用于OpenGL的重塑函数
Reshape Function For OpenGL
我正在使用鼠标功能向屏幕绘制正方形,以及我从屏幕收集的坐标。坐标在OpenGL程序正在运行的窗口的像素范围内。因此,为了避免在x轴和y轴上将像素转换为-1到1的opengl坐标系,我使用:
g_widthglOrtho (0, 0, g_height, 0, 2200年),
,
0, g_width
为绘图坐标的左右值,
0, g_height
为绘图坐标的底部和顶部值;我相信
0, 2200
是要绘制到的坐标的最小值和最大值。
这是我的重塑函数:
void resize(GLsizei w, GLsizei h){
cout << "Resize..." << endl
<< "W: " << w << endl
<< "H: " << h << endl;
g_width = w;
g_height = h;
glViewport(0,0,g_width,g_height);
glOrtho(0,g_width,0,g_height,0,2200);
cout << "Ortho called" << endl;
}
我从函数中取当前的宽度和高度,我测试了这与我留下的打印语句一起工作,它在我收缩或拉伸窗口时起作用,但效果似乎没有改变我可以绘制正方形的区域。在这个代码实例中,当我向任何方向拉伸屏幕时,我不能再在屏幕上绘制正方形,但是如果我将其保持在我定义的原始700*700,它将像我定义的那样工作。但是,重塑方法不适用于新的宽度和高度。
任何想法?
glOrtho
将将当前选择的矩阵堆栈的当前顶部矩阵乘以具有给定参数的正交矩阵。但是你不想要那个乘积,你只想要这个正交矩阵,所以你之前应该叫它glLoadIdentity()
。但是,由于正射影矩阵应该是投影矩阵,所以之前应该将矩阵模式切换到GL_PROJECTION
,之后再切换回GL_MODELVIEW
。
但是您应该意识到所有这些都是完全不赞成的。现代GL没有矩阵堆栈和glOrtho
。你应该使用你自己的矩阵函数(或使用一些库,如glm),并使用顶点着色器应用任何变换,你喜欢你的顶点数据
相关文章:
- 如何在Visual Basic中使用矩形函数OpenGL绘制矩形
- GLFW DDS 加载函数的 OpenGL 链路错误
- 同时使用Opengl CORE函数以及Comptability Profile - GLFW
- 函数 _main (OPENGL C++) 中引用的未解析的外部符号 ________
- GLEW 未在 MSYS2 上定位 OpenGL 函数
- CMake 子项目不能调用 OpenGL 函数,但父项目可以
- EGL 在第一次 opengl 函数调用时崩溃
- 从固定函数迁移到 GLSL OpenGL:我应该如何修改我的视图(lookAt)矩阵和透视矩阵?
- 我是否需要这些 OpenGL 函数末尾的"3f"?
- 使用 QOpenGLWidget 加载 OpenGL 函数指针
- OpenGL GLSL 纹理函数始终返回 vec4(1,1,1,1),白色三角形
- OpenGL 调试 错误回调函数的 ID 参数是什么?
- opengl32.lib如何在Windows(仅1.1版本)上工作?它是否真正实现了OpenGL函数
- OpenGL着色器错误C1068:类型构造函数中的数据过多
- 如何为数据类型 vector<glm::vec3> (opengl 数据类型) 编写 std::minmax 函数的自定义比较器
- 类中的 OpenGL 函数
- 从十六进制值返回 OpenGL #define 错误名称的函数
- ImGui+OpenGL,渲染函数无法渲染字体
- OpenGL:无法使用 glu.h 中的函数
- for 循环在显示函数 OpenGL 中调用的函数中不起作用