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