对 OpenGL 绘图形状使用值而不是 -1...1?
Posted
技术标签:
【中文标题】对 OpenGL 绘图形状使用值而不是 -1...1?【英文标题】:Use values instead of -1...1 for OpenGL drawing shapes? 【发布时间】:2015-12-03 01:34:41 【问题描述】:如果我想在 OpenGL 中绘制平面,我会执行以下操作:
glBegin(GL_POLYGON);
glColor3f(1.0, 1.0, 1.0);
glVertex3f(0.5, -0.5, 0.5);
glVertex3f(0.5, 0.5, 0.5);
glVertex3f(-0.5, 0.5, 0.5);
glVertex3f(-0.5, -0.5, 0.5);
glEnd();
这会绘制一个覆盖画布 50% 的白色平面(两个轴上从 -0.5 到 0.5)。但是,我想改用数字。我不想使用 -1 到 1,而是使用 0 到 n 之类的东西,其中 n 是我的画布的尺寸。对于上面的示例,在 1000 像素画布上的两个轴上的值是 250 到 750,而不是 -0.5 到 0.5。
【问题讨论】:
【参考方案1】:这就是转换矩阵的用途。在您的情况下,您可以根据需要设置一个具有限制的正交投影矩阵。在你的例子中
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, 1000, 0, 1000, -1, 1);
将设置一个查看体积,以便边界在左下角的 0,0 和右上角的 1000,1000。
请注意,这(以及您提供的代码)使用旧的、已弃用的固定功能管道。您应该放弃它以支持基于着色器的方法。
【讨论】:
+1 用于解释它,-1 用于将着色器推荐作为答案的一部分(而不是评论)。 干杯。我想glOrtho
也可以将(-500,500,-500,500,...)
作为参数?
glOrtho 将浮点值作为参数。你可以传递任何适合浮动的东西。 OpenGL 不会“认为”它是像素。一切都以任意单位发生,只有在最后一步将数字转换为像素空间。
@immibis:不,着色器推荐必须去那里。 OP 使用的功能已经非常过时,不应在任何新编写的代码中使用。当使用着色器时,有很多不同的方法可以获得相同的结果。
@datenwolf 你知道吗,一款非常成功的、2B 美元的游戏是仅使用 OpenGL 1.1 功能和多纹理制作的?固定功能管道不起作用的实际原因是什么?以上是关于对 OpenGL 绘图形状使用值而不是 -1...1?的主要内容,如果未能解决你的问题,请参考以下文章