1

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

       正确的      剪裁

设置投影的代码:

    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,所以它可能是一个错误;除此之外,没有剔除,启用深度测试和偏移线/多边形的深度范围。

4

1 回答 1

2

通过仔细观察近平面和远平面的截锥体,您会发现它们的设置很糟糕

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

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

    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]],
于 2013-09-20T19:45:05.290 回答