【问题标题】:Orthographic Camera Projection matrix正交相机投影矩阵
【发布时间】:2013-10-29 15:15:12
【问题描述】:

目标

我正在尝试使用 OpenGL 实现用于 2D 渲染的正交相机。

问题

没有任何东西被绘制到屏幕上。

设置

我使用此调用更新相机的每一帧:

updateCamera(&gCamera, -10.0f, 10.0f, 0.0f, 10.0f, 1.0f, -1.0f);

updateCamera 方法有如下声明:

void updateCamera(Camera* cam, float top, float bottom, float left, float right, float zFar, float zNear);

相机结构只是有一个float opm[4][4] 成员,它代表矩阵。

updateCamera 方法有如下实现:

cam->opm[0][0] = 2.0f / (right - left);
cam->opm[1][1] = 2.0f / (top - bottom);
cam->opm[2][2] = -2.0f / (zFar - zNear);
cam->opm[3][0] = -(right + left) / (right - left);
cam->opm[3][1] = -(top + bottom) / (top - bottom);
cam->opm[3][2] = -(zFar + zNear) / (zFar - zNear);
cam->opm[3][3] = 1.0f;

如果我使用单位矩阵而不是上面的单位矩阵,一切都会正确绘制。也许我的矩阵计算有问题?

【问题讨论】:

  • 为什么不使用glm.g-truc.net?从头开始创建矩阵变得更加直观!
  • 虽然 glm 是一个很棒的库,并且它在其他项目中对我来说非常好,但这是一个小项目,让我了解关于这些矩阵的一切如何工作。我发现这些知识很有用。
  • 我明白,但 GLM 是一个非常轻量级的库。您可以在了解幕后内容的同时使用 then...但是如果您真的想自己制作,请先创建一个 Matrix 类,以便您可以将矩阵相乘...然后使用单独的步骤处理您的逻辑

标签: c opengl matrix orthographic


【解决方案1】:

问题在于顶点的定义和对updateCamera的调用。

三角形太小了,没有用这些参数绘制。

使用以下绘图调用:

updateCamera(&gCamera, -1.0f, 1.0f, -1.0f, 1.0f, 1.0f, -1.0f);

一切正常。

【讨论】:

    【解决方案2】:

    首先使用单位矩阵来确定绘图是否有效 - 然后添加缩放和平移。

    【讨论】:

    • 感谢您的建议,我找到了问题并回答了我自己的问题。
    猜你喜欢
    • 1970-01-01
    • 2015-04-11
    • 2018-10-29
    • 1970-01-01
    • 1970-01-01
    • 2011-04-06
    • 1970-01-01
    • 1970-01-01
    • 2019-08-10
    相关资源
    最近更新 更多