【问题标题】:How do I use gluPerspective() in jogl?如何在 jogl 中使用 gluPerspective()?
【发布时间】:2012-03-15 17:30:16
【问题描述】:

我有一个init() 方法,我正在尝试创建一个Perspective 渲染。下面是我到目前为止的代码,但我传递给gluPerspective(fovy, aspect, zNear, zFar) 的数字是错误的。我觉得fovy是视野(60度),aspect是纵横比(宽/高),但不知道zNearzFar是什么。

public void init(GLAutoDrawable gld) {
    //We will  use the default ViewPort

    GL gl = gld.getGL();
    glu = new GLU();

    gl.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);


    glu.gluLookAt(
            25, 15, 0, // eye
            25, 15, 30, // at
            0, 1, 0 // up
            );



    // Set up camera for Orthographic projection:
    gl.glMatrixMode(GL.GL_PROJECTION);
    gl.glLoadIdentity();
    glu.gluPerspective(60, 500/300, 0.0, 60.0);

    gl.glMatrixMode(GL.GL_MODELVIEW);
    gl.glLoadIdentity();

}

【问题讨论】:

标签: java opengl jogl perspective perspectivecamera


【解决方案1】:

Near 和 Far 值指定对象可见的范围(它们定义了近处和远处的裁剪 planes)。实际上,使用该视角将看不到比60.0 更远的对象。

正如 Tim 已经评论的那样,最好明确写入浮点值(即500.0f/300.0f)。

但更糟糕的是,您在将其设置为标识之前设置了查看矩阵(假设在方法的开头,矩阵模式为GL.GL_MODELVIEW)。可能以下顺序更好:

gl.glMatrixMode(GL.GL_MODELVIEW);
gl.glLoadIdentity();
glu.gluLookAt(...);

也许您需要进一步研究相机抽象。

【讨论】:

    【解决方案2】:

    就像 Luca 已经说过的,近和远定义了可见对象的范围。但最重要的是,永远不要将值

    为近裁剪平面使用一些合理的小值,但不要太小,因为这会导致深度缓冲区精度不佳。使用合理的东西,例如在模拟一个普通的现实世界时,10cm 的近距离通常是一个不错的选择(无论这在实际应用中意味着多少通用单位),因为你不会让你的眼睛更靠近任何物体.但这取决于您的应用程序,例如 far 值。

    当然,就像蒂姆说的那样,目前你的纵横比是 1.0,因为你进行整数除法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多