OpenGL等距投影剪辑

时间:2013-09-20 15:57:20

标签: opengl jogl projection clipping isometric

我在另一个Stack Overflow问题中使用这个巧妙的技巧:True Isometric Projection with OpenGL来设置等轴测投影。如果我用线条绘制轮廓,一切都很好1但是如果我绘制多边形,它们会被裁剪,因此行2

Correct Clipped

设置投影的代码:

    pmv.glMatrixMode(PMVMatrix.GL_PROJECTION);
    pmv.glLoadIdentity();
    float dist = (float)Math.sqrt(1 / 3.0f);
    pmv.gluLookAt(dist, dist, dist,
              0.0f,  0.0f,  0.0f,
              0.0f,  1.0f,  0.0f);

注意:我正在使用JOGL,所以它可能是一个可能的错误;除此之外,没有剔除,深度测试启用和深度范围抵消线/多边形。

1 个答案:

答案 0 :(得分:2)

通过仔细观察平截头体的近距离和远距离平面,您可以看到它们设置得很糟糕

    N: Plane[ [ 0.57735026, 0.57735026, 0.57735026 ], 0.0], 
    F: Plane[ [ -0.57735026, -0.57735026, -0.57735026 ], 1.9999998]], 

解决方案首先使用正确的近/远值轻松设置正交投影,然后将其与lookat函数矩阵相乘

    pmv.glMatrixMode(PMVMatrix.GL_PROJECTION);
    pmv.glLoadIdentity();
    pmv.glOrthof(-1.0f, 1.0f, -1.0f, 1.0f, -1.0f, 1.0f);
    float dist = (float)Math.sqrt(1 / 3.0f);
    pmv.gluLookAt(dist, dist, dist,
              0.0f,  0.0f,  0.0f,
              0.0f,  1.0f,  0.0f);

结果:

    N: Plane[ [ -0.57735026, -0.57735026, -0.57735026 ], 1.9999998], 
    F: Plane[ [ 0.57735026, 0.57735026, 0.57735026 ], 0.0]],