gpt4 book ai didi

opengl - 在 OpenGL 中使用 gluPerspective

转载 作者:行者123 更新时间:2023-12-02 02:59:43 26 4
gpt4 key购买 nike

我正在做我的 OpenGL 程序,碰巧遇到了问题,你能找出它出了什么问题吗?

以y轴为中心旋转一个平面当我使用 glOrtho 时,它工作正常,但 gluPerspective 则不然。

gluPerspective 存在一些问题,因为当我将角度更改为 0 时,我只能看到一些内容,但看不到整个内容。但是当我将其更改为 45 时。屏幕上没有显示任何内容,并且我没有得到有关近值和远值的线索。

 #include iostream  
#include "Xlib.h"
#include "gl.h"
#include "glu.h"
#include "glut.h"
#include math.h
void setupRC()
{
glClearColor(1,0,0,1);
glColor3f(0,0,0);
}
void timerfunc(int value)
{
glutPostRedisplay();
glutTimerFunc(1, timerfunc ,1);
}
void RenderScene()
{
glColor3f(0,0,0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
static GLfloat rot = 0.0f,x =0.0f , y=1.0f , z=0.0f;
rot++;
glPushMatrix();

glRotatef(rot,0.0,1.0,0.0);
glBegin(GL_POLYGON);
glVertex3i(1,-1,0);
glVertex3i(1,1,0);
glVertex3i(-1,1,0);
glVertex3i(-1,-1,0);
glVertex3i(1,-1,0);

glEnd();
glPopMatrix();
if (rot == 360)
rot = 0;
glutSwapBuffers();
}
void ChangeSize(GLint w, GLint h)
{
if(h==0)
h = 1;
GLfloat aspectratio = (GLfloat)w/(GLfloat)h;

glViewport(0,0,w,h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45.0f, aspectratio, 1,1000);
/*if(w <= h)
glOrtho(-100,100,-100/aspectratio, 100/aspectratio, 1,-1);
else
glOrtho(-100*aspectratio, 100*aspectratio , -100,100,1,-1);*/
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

}

int main(int argc , char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
glutInitWindowSize(800,600);
glutInitWindowPosition(0,0);
glutCreateWindow("chelsea");
glutTimerFunc(1, timerfunc , 1);
setupRC();
glutDisplayFunc(RenderScene);
glutReshapeFunc(ChangeSize);
glutMainLoop();

return 0;
}

最佳答案

您的问题是:您的多边形和相机位于同一坐标。 (多边形不是在相机前面,而是在相机之上。)

  1. 当多边形处于初始位置时,它与摄像机无法看到它完全对齐;
  2. 当它开始旋转时,它的一部分会进入相机前面,但距离太近而无法显示。

但是,在构建透视矩阵时将 fovy 设置为 0° 会产生一个(真正)广角相机,它能够看到(真正)近距离的物体 - 解释为什么你可以看到某些东西,“但不是全部”。

如果您希望能够使用 fovy=45 看到“整个事物”,请通过沿 Z 轴应用负平移将多边形移离相机:

void RenderScene()
{
...
glPushMatrix();
glTranslatef(0.,0.,-10.); // Move away from camera
glRotatef(rot,0.0,1.0,0.0);
glBegin(GL_POLYGON);
...
glEnd();
glPopMatrix();
...
}

关于opengl - 在 OpenGL 中使用 gluPerspective,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1968403/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com