【问题标题】:Use values instead of -1...1 for OpenGL drawing shapes?对 OpenGL 绘图形状使用值而不是 -1...1?
【发布时间】: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。

【问题讨论】:

    标签: c opengl glut


    【解决方案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 功能和多纹理制作的?固定功能管道不起作用的实际原因是什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-27
    • 2017-02-02
    • 1970-01-01
    • 2017-08-28
    相关资源
    最近更新 更多