我写了一些代码,希望在屏幕中间看到一个正方形,而不是正方形看起来更高,在屏幕顶部附近的某些宽高比,稍微向左。
另一个宽高比:
这是我的代码的相关部分:
void resize(uint32_t height, uint32_t width){
glViewport(0, 0, width, height);
glMatrixMode (GL_PROJECTION); //set the matrix to projection
glLoadIdentity();
gluPerspective(60, (GLfloat)width / (GLfloat)height, 1.0, 1000.0);
}
void draw(){
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glLoadIdentity();
glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
//set up camera
glLoadIdentity();
gluLookAt(0,10,0,0,0,0,0.001,0.999,0);
//draw a square in the center of the screen
glBegin(GL_TRIANGLE_FAN);
glColor4f(0,1,1,1);
glVertex3f(-1,0,-1);
glVertex3f(-1,0,1);
glVertex3f(1,0,1);
glVertex3f(1,0,-1);
glEnd();
glPopMatrix();
}
是不是0,0,0应该是屏幕的中间?并不是gluLookAt应该把我指定的任何坐标放在屏幕的中心?
答案 0 :(得分:2)
更改up
vector
gluLookAt(0,10,0,0,0,0,0,0,1);
你的眼睛处于正y
- 中心的轴和参考点,up
(头)矢量必须沿着z
- 轴。
您在调整大小功能中又犯了一个错误
void resize(uint32_t height, uint32_t width){
glViewport(0, 0, width, height);
.....................
gluPerspective(60, (GLfloat)width / (GLfloat)height, 1.0, 1000.0);
}
您的变量height
存储屏幕宽度,变量width
存储高度,您已定义glViewport
,而gluPerspective
中您认为自己的比例为width
} height
,但实际上你的height
比率为width
,因此问题就出现了。编辑代码如下:
void resize(uint32_t width, uint32_t height){
glViewport(0, 0, width, height);
..................
gluPerspective(60, (GLfloat)width / (GLfloat)height, 1.0, 1000.0);
}