c - 正交相机投影矩阵

标签 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;

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

最佳答案

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

三角形太小,无法用这些参数绘制。

使用以下绘制调用:

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

一切正常。

关于c - 正交相机投影矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19662156/

相关文章:

c++ - 这个 C 语法#define GET_UINT32_BE(n,b,i) 是什么?

python - 如何在python中使用S3TC/DXT算法压缩PNG图像?

c++ - 使用 std::vector 或数组初始化 boost 矩阵

c - 我程序中的函数似乎没有等待其他函数完成

c - 如何使用 Nix 在 macOS 上构建使用 time.h 的软件

c++ - 缺少 openGL 纹理标志 GL_TEXTURE_RECTANGLE

java - OpenGL 纹理无法正确显示

matlab - 在matlab中逐列计算相关性的快速方法是什么

java - 在不克隆数组的情况下在二维数组的列中搜索数字的最佳性能

c - 当我尝试交叉编译 mips64 的 libperl 时,为什么会出现语法错误?