opengl:将原点更改为左上角

标签 opengl 3d coordinate-systems

我在将 openGL 原点设置为 View 的左上角时遇到问题。因此,在我的窗口调整大小处理程序中,我执行以下操作:

// ox and oy are some offsets and width and height are the 
// required viewport width and height
glViewport(ox, oy, width, height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, width, 0, height, -1, 1);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

这会将原点保持在左下角,我可以将纹理渲染为:

glBegin(GL_QUADS);
glTexCoord2f(0, 0); glVertex2f(0, 0); 
glTexCoord2f(1, 0); glVertex2f(width, 0);                            
glTexCoord2f(1, 1); glVertex2f(width, height);                      
glTexCoord2f(0, 1); glVertex2f(0, height);                 
glEnd();

据我从阅读此处的页面来看,要翻转原点,我只需将 glOrtho 调用替换为

glOrtho(0, width, height, 0, -1, 1);

但是,执行此操作并使用上面的渲染代码不会再渲染我的纹理,我只会看到一个空白屏幕。

最佳答案

通过绕 y 轴翻转,你翻转了世界空间的手性。这意味着你们脸部的弯曲效果会有所不同。 CCW 变为 CW,反之亦然。您很可能启用了面部剔除,因此为了考虑手性翻转,您必须将 CCW 换成 CW 面部剔除。

关于opengl:将原点更改为左上角,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30235563/

相关文章:

c# - 具有第 4 维标记特殊值的 3D 表面着色

python - 点 EPSG 4326 (WSG 84) 到 (EPSG 28992) 的 PROJ pyproj 转换

c - gotoxy() 函数使用 printf() 的位置

WPF:如何使 (0,0) 位于 Canvas 中心

python - OpenGL 基础 : calling glDrawElements once per object

c++ - 在现代 opengl 中移动形状/对象

c++ - Freetype 字形在加载到 openGL 时换行

opencv - 3d 点投影 2d 点错误

c - 运行 OpenGL 着色器以修改现有的纹理/帧缓冲区

c++ - D3D9 从顶点缓冲区绘制 100k 立方体非常慢