我使用glTranslate命令来移动从我的iPhone OpenGL应用中的纹理加载的精灵的位置。我的问题是我申请glTranslatef后,图像显得有点模糊。当我评论这行代码时,图像很清晰。我该如何解决这个问题?glTranslatef问题
1
A
回答
3
您可能没有完全按下屏幕像素网格。这将导致纹理过滤模糊它。这个问题有点复杂:不是将纹理看作一系列点,而是将它看作网格规则纸(纹理表可以被拉伸,剪切,缩放)。为了使东西看起来很脆,网格必须完美对齐。纹理坐标(0,0)和(1,1)不会触及纹理元素的中心,而会触及纹理表的外边缘。因此,您需要一点点抵消和缩放以解决texel中心问题。将目标四边形放置在屏幕上也是一样,顶点位置必须与屏幕边缘对齐,而不是像素中心。如果您的投影和模型视图矩阵没有以模型视图空间中的一个单位是一个像素宽的方式进行设置,并且投影填充了整个屏幕(或窗口视口),则很难做到这一点。
人们通常用
glViewport(0,0, width, height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, width, 0, height, -1, 1);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
// modelview XY range 0..width x 0..height now covers the whole viewport
// (0,0) don't address the lower left pixel but the lower left edge of this
// (width,height) similarily addresses the upper right corner
// drawing a 0..width x 0..height quad with texture coordinates 0..1 x 0..1
// will cover it perfectly
只要这将作为四是完全相同的尺寸(即它的顶点位置匹配)的纹理坐标和顶点位置是整数开始。
现在有趣的部分是:如果他们不符合这些条件会怎么样。然后走样。在GL_NEAREST过滤模式下,东西看起来仍然很清晰,但是一些行/行只是简单的丢失了。在GL_LINEAR滤波模式下,相邻像素被插值,插值因子beding确定它们离网格有多远(以俗语来说,实际实现看起来稍微不同)。
所以如何解决你的问题:在与视口相匹配的投影/模型视图中绘制精灵,只对顶点坐标使用整数坐标,并使纹理覆盖整个图片。如果仅使用纹理坐标范围的一部分,则事情会变得更加有趣,因为我们只针对纹理网格,而不是纹理中心。
0
我会建议看看你的模型视图矩阵声明,并确保glLoadIdentity()被调用,以确保矩阵堆栈在应用转换之前是干净的。
相关问题
- 1. OPENGL ES glTranslatef问题
- 2. glTranslatef/2D视口设置问题
- 3. Normalized glTranslatef()
- 4. 为什么glTranslatef?
- 5. 屏幕左侧glTranslatef
- 6. glTranslatef等效没有它
- 7. 不能使用的glTranslatef iPhone
- 8. LWJGL glTranslatef没有渲染深度
- 9. glMultMatrix/glLoadMatrix比glRotatef或glTranslatef更高效吗?
- 10. 的glTranslatef和鼠标点击 - gluUnProject
- 11. JOGL-2.0-预20100528 - MacOSX的万能无法将文件的glTranslatef
- 12. 如果我使用glTranslatex代替glTranslatef,我什么都看不到!
- 13. XSLT问题问题
- 14. Cocos2d问题/问题
- 15. IE问题有问题 - CSS
- 16. 锁定问题问题
- 17. Backbone EventAggregator问题和问题
- 18. 问题jQuery添加()问题
- 19. 问题的Response.Write问题
- 20. Javascript问题面试问题
- 21. Bootstrap问题,菜单问题
- 22. Android NDK问题pthread_mutex_unlock问题
- 23. 锁定,问题问题
- 24. 高人问题:问题
- 25. OCUnit链接问题问题
- 26. 用户访问某个主题时出现问题:问题
- 27. Redmine安装问题耙指令问题,MySQL数据库问题?
- 28. 从glTranslatef切换到gluLookAt后,opengl不会呈现所需的输出
- 29. 使用glBufferSubData使用不推荐的glTranslatef或更新坐标是否更好?
- 30. MouseOver标题问题