c++ - openGl reshape 功能

标签 c++ opengl graphics reshape

有人能告诉我这段代码中的 if-else 语句有什么意义吗?它到底是做什么的? 尤其是在 glOrtho 中将高度除以宽度的部分。

*万一这个方法对任何人来说都是模棱两可的,这句话可能会有所帮助.. “这种 reshape 通过使视口(viewport)和世界窗口具有相同的纵横比来保留形状”

void myReshape(int w, int h)
{
    glViewport(0, 0, w, h);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    if (w <= h)
        glOrtho(-50.0, 50.0, -50.0*(GLfloat)h / (GLfloat)w,
            50.0*(GLfloat)h / (GLfloat)w, -1.0, 1.0);
    else
        glOrtho(-50.0*(GLfloat)w / (GLfloat)h,
            50.0*(GLfloat)w / (GLfloat)h, -50.0, 50.0, -1.0, 1.0);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();

}

提前致谢!

最佳答案

本质上,这个想法是让投影保持方形纵横比(这就是 wh 的划分) XY 平面中边长为 100(世界空间单位)的正方形围绕选定的 XY 原点 (0,0) 适合窗口的大小(这就是 if 用于决定窗口的两种尺寸中哪一种是短尺寸)。

关于c++ - openGl reshape 功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42929650/

相关文章:

c++ - std::unordered_map 使用枚举和定义的类

c++ - 为什么<gl/GL.h>中没有缓冲区

java - Sedgewick & Wayne 的算法,练习 1.2.3

c - 在普通 C 中测量字符串大小

c++ - 在 macOS X Mojave 上构建点云库 (PCL) 错误 : ld: library not found for -lflann

c++ - 从 C++ 代码使用的 C 内联函数

c++ - 错误 :ISO C++ forbids declaration of ‘mousePressEvent’ with no type

c++ - ATL CString 到字符数组的转换

C++/OpenGL - 开始一个新项目

opengl - 阵列纹理是否与采样器阵列相关?