内容简介:代码日志版权声明:翻译自:http://stackoverflow.com/questions/10320332/how-to-render-perfect-wireframed-rectangle-in-2d-mode-with-opengl
编辑:只是这样你知道:我还没有完全解决这个问题,目前我使用的是0.5px的偏移,似乎有效,但正如其他人所说,这不是“正确”的解决方案.所以我正在寻找真正的交易,钻石出口规则解决方案根本没有工作.
我相信这可能是显卡的错误,但如果是,那么任何专业的 程序员 都应该有这样的防弹解决方案呢?
编辑:我现在买了一个新的nvidia卡(以前有ATI卡),我仍然遇到这个问题.我也在许多游戏中看到同样的错误.所以我想这是不可能修复一个干净的方式?
这是错误的形象:
你如何克服这个问题?如果可能,最好是非着色器解决方案.我试图设置第一行的偏移量,当我自己绘制4个单独的行,而不是使用线框模式,但没有很好的工作:如果矩形大小改变,它有时看起来完美的矩形,但有时甚至比我的修复之前更糟.
这是我渲染四边形的方式:
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
glBegin(GL_QUADS);
glVertex2f(...);
glVertex2f(...);
glVertex2f(...);
glVertex2f(...);
glEnd();
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
是的,我知道我可以使用顶点数组或VBO,但这不是重点.
我也试过GL_LINE_LOOP,但它没有修复这个错误.
编辑:一个解决方案,迄今为止工作: Opengl pixel perfect 2D drawing by Lie Ryan:
Note that OpenGL coordinate space has no notion of integers,
everything is a float and the “centre” of an OpenGL pixel is really at
the 0.5,0.5 instead of its top-left corner. Therefore, if you want a
you really had to draw a
line from 0.5,0.5 to 10.5,10.5.
This will be especially apparent if you turn on anti-aliasing, if you
have anti-aliasing and you try to draw from 50,0 to 50,100 you may see
a blurry 2px wide line because the line fell in-between two pixels.
这不是一个bug,这正是遵循规范.没有绘制一行的最后一个像素,以防止使用以下线段进行过度绘制,这会导致混合问题.解决方案:发送最后一个顶点两次.
代码更新
// don't use glPolygonMode, it doesn't
// do what you think it does
glBegin(GL_LINE_STRIP);
glVertex2f(a);
glVertex2f(b);
glVertex2f(c);
glVertex2f(d);
glVertex2f(a);
glVertex2f(a); // resend last vertex another time, to close the loop
glEnd();
BTW:你应该学习如何使用顶点数组.立即模式(glBegin,glEnd,glVertex调用)已经从OpenGL-3.x内核和之后移除.
代码日志版权声明:
翻译自:http://stackoverflow.com/questions/10320332/how-to-render-perfect-wireframed-rectangle-in-2d-mode-with-opengl
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
计算机网络(第4版)
[美] James F. Kurose、[美] Keith W. Ross / 陈鸣 / 机械工业出版社 / 2009-11 / 66.00元
本书采用了独创的自顶向下方法,即从应用层开始沿协议栈向下讲解计算机网络的基本原理,强调应用层范例和应用编程接口,内容深入浅出,注重教学方法,理论与实践相结合。第3版的内容相应更新并反映了网络领域的最新进展,如增加了无线和移动网络一章,扩充了对等网络、BGP、MPLS、网络安全、广播选路和因特网编址及转发方面的材料;还增加了一套实用的实验,并修订了习题。本书适合作为计算机、电子、通信工程相关专业的本......一起来看看 《计算机网络(第4版)》 这本书的介绍吧!