OpenGL JOGL摄像头透视

时间:2014-04-22 15:29:17

标签: java opengl graphics jogl

我已经绘制了三个相同尺寸但与相机距离不同的盒子。当这些盒子远离相机时,它们的大小应该会减小。我如何实现这种距离的幻觉。

//这些是盒子的三个平面

  // first plane
  gl.glVertex3i(0, 30, 30);
  gl.glVertex3i(10, 30, 30);
  gl.glVertex3i(10, 20, 30);
  gl.glVertex3i(0, 20, 30);

  //2nd Plane
  gl.glVertex3i(20, 20, 37);
  gl.glVertex3i(30, 20, 37);
  gl.glVertex3i(30, 10, 37);
  gl.glVertex3i(20, 10, 37);

  //3rd Plane
  gl.glVertex3i(40, 10, 45);
  gl.glVertex3i(50, 10, 45);
  gl.glVertex3i(50, 0, 45);
  gl.glVertex3i(40, 0, 45);

//这是关注代码。

gl.glMatrixMode(GL2.GL_MODELVIEW);
gl.glLoadIdentity();
glu.gluLookAt(
              35, 15,  10, 
              25, 15, 30, 
      0,  1,  0   
              );

gl.glMatrixMode(GL2.GL_PROJECTION);
gl.glLoadIdentity();
gl.glOrtho(-50.0, 50.0, -30.0, 30.0, 0.0, 60.0);

1 个答案:

答案 0 :(得分:2)

您需要使用透视投影,而不是正投影。

而不是打电话

gl.glOrtho(-50.0, 50.0, -30.0, 30.0, 0.0, 60.0);

您应该能够用

替换该行
GLU glu = new GLU();
glu.gluPerspective(60.0, 4.0/3.0, 1.0, 100.0);

我提供的参数可能不适合您的程序,因此您可能需要调整它们。

参数依次为:fovy,aspect,zNear和zFar。

来自manpage

  

fovy:指定y中视角的范围(以度为单位)   方向。

     

方面:指定确定视野的宽高比   在x方向。纵横比是x(宽度)与y的比率   (高度)。

     

zNear:指定从查看器到近剪裁的距离   飞机(总是积极的)。

     

zFar:指定从查看器到远剪裁平面的距离   (总是积极的。)

GLU课程位于此处

import javax.media.opengl.glu.GLU