C++ OpenGL-透视问题

C++ OpenGL-透视问题,c++,opengl,glut,C++,Opengl,Glut,我只想创建一个透视图,相机的眼睛在,比如:(2,2,-2),正对着原点。我尝试使用gluLookAt()和glFrustum()的组合,但出于某种原因,虽然它正在渲染,但我的对象看起来非常扭曲: glMatrixMode( GL_PROJECTION ); glLoadIdentity(); glFrustum (-1.0, 1.0, -1.0, 1.0, 1.0, 500.0); ... gluLookAt (-2.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, -1.

我只想创建一个透视图,相机的眼睛在,比如:(2,2,-2),正对着原点。我尝试使用
gluLookAt()
glFrustum()
的组合,但出于某种原因,虽然它正在渲染,但我的对象看起来非常扭曲:

glMatrixMode( GL_PROJECTION );
glLoadIdentity();
glFrustum (-1.0, 1.0, -1.0, 1.0, 1.0, 500.0);

... 

gluLookAt (-2.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, -1.0, 0.0);
我做错了什么

编辑:这里是一个屏幕截图。左侧定义要围绕y轴扫掠的轮廓曲线。在透视图中它应该是一个圆柱体,但它。。。扭曲的

编辑2:此外,透视视图中的轴设置如下,我知道这是不正确的:

// draw the axis
   glBegin(GL_LINES);
     // x
     glVertex3f(500.0, 0.0, 0.0);
     glVertex3f(-500.0, 0.0, 0.0);
     // y
     glVertex3f(0.0, -500.0, 0.0);
     glVertex3f(0.0, 500.0, 0.0);
     // z
     glVertex3f(0.0, 0.0, -500.0);
     glVertex3f(0.0, 0.0, 500.0);

   glEnd(); 

编辑3:此外,该形状的任何顶点的x、y或z值都不大于1.0。

视锥台的设置与屏幕为方形一样。如果你的屏幕不是方形的,这将严重扭曲物体

此外,如果对象靠近摄影机,则近距离和远距离都会影响图像

还有一件事,你在gluLookAt中的上轴指向下

发布屏幕截图将有助于识别问题

我做错了什么

我不认为你做错了什么。要在左窗格中显示的视图类型通常使用正交投影完成。你看到的失真只是一种透视失真;您看的不是垂直于曲线的方向(曲线位于XY平面中,您是从某个角度看XY平面)

旁注:
投影矩阵仅定义OpenGL的“镜头”。不得将其用于放置“摄像头”。任何视点定位(视图)都被定义为modelview转换的一部分。因此,
gluLookAt
将用于modelview矩阵。

您能发布一个屏幕截图,说明您得到了什么。@ChrisF:我发布了一个屏幕截图。看起来您离对象太近了一点。将相机移远一点。@ChrisF:根据我的编辑,我的最大顶点范围只有(1,1,1),所以我认为离远一点没有帮助。我试过了,但它让它变得很小。现在没有想法了。视野是多少?你的问题是你的上轴错了。将gluLookAt切换到(-2,1,1,0,0,0,0,1,0)它看起来是这样的,因为您实际上是在屏幕截图中从下方查看对象。