正交相机投影矩阵

时间:2013-10-29 15:15:12

标签: c opengl matrix orthographic

目标

我正在尝试使用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;

如果我使用单位矩阵而不是上面的单位矩阵,那么所有内容都会正确绘制。也许我的矩阵计算存在问题?

2 个答案:

答案 0 :(得分:2)

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

三角形很小,不能用这些参数绘制。

使用以下绘制调用:

updateCamera(&gCamera, -1.0f, 1.0f, -1.0f, 1.0f, 1.0f, -1.0f);
一切正常。

答案 1 :(得分:0)

首先使用单位矩阵查明绘图是否有效 - 然后添加缩放和翻译。

相关问题