【问题标题】:How to render with isometric perspective? [duplicate]如何用等距透视渲染? [复制]
【发布时间】:2011-06-28 16:07:56
【问题描述】:

可能重复:
true isometric projection with 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()
  • 我不明白为什么它被关闭了。我看到了另一个线程,它根本没有帮助我。

标签: c++ opengl isometric


【解决方案1】:

使用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() 到底是干什么用的?
  • 没有它们,您将得到一个正射投影,直接沿 z 轴看。
  • 有了它们,您就有了等轴测视图 - 绕 x 轴旋转 35.264°,绕 Y 旋转 45°。我根据您的维基百科链接更新了角度。 35.264° = arctan(sin 45°)
  • 哦,我明白了,我的相机已经有了自己的旋转系统,所以我想我不需要这些。不过,我会记住那里的那些角度,以便稍后将其设置为完美对称。
  • 感谢您的轮换;他们正是我所需要的! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-03
  • 1970-01-01
  • 1970-01-01
  • 2019-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多