如何在 OpenGL 中以像素为单位指定顶点?

Posted

技术标签:

【中文标题】如何在 OpenGL 中以像素为单位指定顶点?【英文标题】:How can I specify vertices in pixels in OpenGL? 【发布时间】:2013-12-30 01:23:28 【问题描述】:

我想用OpenGL C++写一个小项目,我想用像素代替浮点值,比如这样:

glVertext2f(420, 300);

代替:

glVertex2f(0.4, -0.34);

有可能吗?

【问题讨论】:

您可以设置投影矩阵,以便顶点坐标与屏幕上的像素匹配,而不是将值转换为“浮点”。 【参考方案1】:

如果您想使用像素坐标进行渲染,使用正交矩阵非常容易,您可以使用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 转换为 float。 C 和 C++ 都应该进行隐式转换。即glVertext2f(420, 300);

【讨论】:

以上是关于如何在 OpenGL 中以像素为单位指定顶点?的主要内容,如果未能解决你的问题,请参考以下文章

如何在mapkit中以像素为单位获取米?

如何在OpenGl中计算三角形网格的顶点法线?

如何在OpenGL中计算三角形网格的顶点法线?

使用 GLM 库在 OpenGL 中绘制顶点时如何使用常规坐标系

opengl如何获取一点的像素

opengl纹理映射总结