|
本来刚开始学习opengl,有不少疑惑,肯请各位前辈指点迷津,下面开始描述问题:
#include "gl\glut.h"
// 绘制场景
void RenderScene(void)
{
//用当前清除颜色清除窗口
glClear(GL_COLOR_BUFFER_BIT);
//绘制一个矩形
glColor3f(1.0f, 0.0f, 0.0f);
glRectf(-25.0f, -25.0f, 25.0f, 25.0f);
//刷新绘图命令
glFlush();
}
//设置渲染状态
void SetRC(void)
{
glClearColor(0.0f, 0.0f, 1.0f, 1.0f);
}
//窗口改变时的回调函数
void ChangeSize(GLsizei w, GLsizei h)
{
GLfloat aspectRatio;
//防止除数为0
if (h == 0) h = 1;
//把视图设置为窗口大小
glViewport(0, 0, w, h);
//重置坐标系统
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
//建立裁剪区域(左,右,底,顶,远,近)
aspectRatio = (GLfloat)w / (GLfloat)h;
if (w <= h)
{
glOrtho(- 100.0, 100.0, -100.0 / aspectRatio, 100.0 / aspectRatio, 1.0, - 1.0);
}
else
{
glOrtho(- 100.0 * aspectRatio, 100.0 * aspectRatio, - 100.0, 100.0, 1.0, - 1.0);
}
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
int main(int argc, char* argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA);
glutCreateWindow("sample01");
glutDisplayFunc(RenderScene);
glutReshapeFunc(ChangeSize);
SetRC();
glutMainLoop();
return 0;
}
这是一个最简单的显示一个蓝色背景的opengl窗口,窗口中间放置一个2D样式的红色正方形。
问题主要在RenderScene和ChangeSize函数中。
(1) RenderScene中的glRectf函数,这个函数的值是-25.0,-25.0,25.0,25.0这四个,opengl坐标系的范围不是-1.0,-1.0,1.0,1.0么?
(2) 既然glRectf是上面那样设置的,那么changsize里面肯定是做了某种变换,就是那个glOrtho函数,但是我不明白这个函数的工作原理,看书上说的是用正投影,然后矩阵相乘以后得到的一个新的矩阵,不是很明白。
感谢各位大牛指点小弟 [em19] |
|