c++ - OpenGL - 透视问题

标签 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.0, 0.0);

我做错了什么?

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

enter image description here

编辑 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..

最佳答案

What am I doing wrong?

我不认为你做错了什么。您希望在左 Pane 中看到的那种 View 通常使用正交 投影来完成。您看到的失真只是透视失真;您并不是垂直于曲线看(曲线位于 XY 平面内,而您是从某个角度看 XY 平面)。

旁注:

投影矩阵只定义了 OpenGL 的“lens”。它不得用于放置“相机”。任何视点定位( View )都被定义为模型 View 转换的一部分。因此,gluLookAt 旨在用于模型 View 矩阵。

关于c++ - OpenGL - 透视问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7908377/

相关文章:

c++ - 与 GLUT 一起使用的独立于平台的用户界面库

c++ - 对相同基类的引用必须在内存中具有单独的偏移量

c++ - 红皮书毛皮示例不渲染毛皮 (Linux/nvidia gtx675mx)

c++ - 使用WIC(Windows镜像组件)时遇到的问题

c++ - glBufferData 上的段错误

c++ - 三角形的内外检验

c++ - 我正在用 OpenGL 编写一个程序来创建一个摆动的摆锤

python - OpenGL不渲染图形

c++ - Qt QInputDialog参数列表

c++ - 向 std::vector 添加结构时的 std::bad_alloc