如何使用等轴测透视渲染?

9

可能是重复问题:
使用OpenGL进行真正的等轴测投影

我想使用与Blender3d相同的等轴测渲染方式,我该怎么做?只需要调用glMultMatrix()函数吗?我尝试了谷歌搜索,但找不到任何能够产生这种渲染模式的工作矩阵。我尝试了这个http://en.wikipedia.org/wiki/Isometric_projection,但它只是渲染出了非常奇怪的效果。

这是我现在使用的渲染正常透视图的矩阵:

    GLdouble f = cotan(fovy/2.0);
    GLdouble aspect = (GLdouble)width/(GLdouble)height;

    IsoMatrix.x[0] = f/aspect;
    IsoMatrix.y[0] = 0;
    IsoMatrix.z[0] = 0;
    IsoMatrix.w[0] = 0;

    IsoMatrix.x[1] = 0;
    IsoMatrix.y[1] = f;
    IsoMatrix.z[1] = 0;
    IsoMatrix.w[1] = 0;

    IsoMatrix.x[2] = 0;
    IsoMatrix.y[2] = 0;
    IsoMatrix.z[2] = (zfar+znear)/(znear-zfar);
    IsoMatrix.w[2] = (2.0*zfar*znear)/(znear-zfar);

    IsoMatrix.x[3] = 0;
    IsoMatrix.y[3] = 0;
    IsoMatrix.z[3] = -1;
    IsoMatrix.w[3] = 0;

    glMultMatrixd((GLdouble *)&IsoMatrix);

如何更改它的结果为:http://rvzenteno.files.wordpress.com/2008/10/rvz_018.jpg


你知道那里使用的是哪种投影吗?对我来说,它看起来像是通过glOrtho()获得的普通正交投影。 - Nobody moving away from SE
我不明白为什么这个被关闭了。我看了其他的帖子,但是它们对我没有帮助。 - Rookie
1个回答

12

使用glOrtho更容易,然后旋转轴:

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-10.0f, 10.0f, -10.0f, 10.0f, -10.0f, 10.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glRotatef(35.264f, 1.0f, 0.0f, 0.0f);
glRotatef(-45.0f, 0.0f, 1.0f, 0.0f);

这两个glRotatef()函数具体是用来做什么的? - Rookie
没有它们,你只能得到一个沿着z轴直接投影的正交投影。 - Alex Peck
使用它们,您可以获得等角视图 - 绕x轴旋转35.264°,并绕Y轴旋转45°。我根据您提供的维基百科链接更新了角度。35.264° = arctan(sin 45°) - Alex Peck
哦,我明白了,我的相机已经有自己的旋转系统了,所以我想我不需要这些了。虽然,我会记住那些角度,稍后将其设置为完美对称。 - Rookie
谢谢你提供的旋转,正是我所需要的! :) - Asherah

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接