我想用OpenGL C++写一个小项目,我想使用像素而不是浮点值,例如:
glVertext2f(420, 300);
而不是:
glVertex2f(0.4, -0.34);
可能吗?
如果要使用像素坐标进行渲染,使用正交矩阵很容易做到这一点,您可以使用glOrtho
创建正交矩阵。 假设窗口为 800x600,您可以使用以下代码:
// Set your projection matrix
glMatrixMode(GL_PROJECTION);
glOrtho(0, 800, 0, 600, -1, 1);
// Restore the default matrix mode
glMatrixMode(GL_MODELVIEW);
glOrtho
期望参数为"左、右、下、上",因此这实际上会将原点放在左下角(大多数 OpenGL 坐标系的 Y 随着您的向上移动而增加)。 但是,您希望将原点放在左上角,就像大多数基于像素的绘图系统一样,您希望反转底部和顶部参数。
这将允许您使用像素坐标而不是默认剪辑坐标来调用 glVertex2f。 请注意,您不必调用特殊函数即可从 int 转换为浮点数。 C 和 C++ 都应该进行隐式转换。即 glVertext2f(420, 300);