c - 我的数学观点错了吗?

标签 c opengl matrix-multiplication

每当我尝试使用 glmxLoadPerspective 函数时,都不会显示任何内容。但是,我的 glmxLoadOrtho 函数显示正常。我的数学错了吗?相关代码(无关位被截断)如下:

(APP_WIDTH = 1000,APP_HEIGHT = 1000)

用法:

glmxMatrix ortho;
glmxGenMatrix(&ortho, GLMX_4X4); //This simply loads the identity matrix.
glmxLoadPerspective(&ortho, 45.0f, APP_WIDTH / APP_HEIGHT, 1.0f, 10.0f); //Implementation below.

glmxMatrix modelview;
glmxGenMatrix(&modelview, GLMX_4X4); //Same as above.

const GLfloat verts[] = {
   //verts
   100.0f, 100.0f, -3.0f, 1.0f,
   200.0f, 200.0f, -3.0f, 1.0f,
   100.0f,  200.0f, -3.0f, 1.0f,
   200.0f,  100.0f, -3.0f, 1.0f,
   //colors
   1.0f, 0.3f, 0.4f, 0.5f,
   0.5f, 0.1f, 0.4f, 0.3f,
   0.0f,  1.0f, 0.5f, 0.6f,
   0.0f,  1.0f, 0.5f, 0.6f,
};

glmxMultMatrix(&ortho, &modelview);

平截头体函数:

glmxvoid glmxLoadFrustrum(glmxMatrix* matrix, glmxfloat left, glmxfloat right, glmxfloat bottom,
    glmxfloat top, glmxfloat near, glmxfloat far){
if(matrix -> mx_type != GLMX_4X4){GLMX_ERROR = GLMX_NOT_4X4; return;}
matrix -> mx_data[0] = (2.0f * near) / (right - left);
matrix -> mx_data[1] = 0.0f;
matrix -> mx_data[2] = 0.0f;
matrix -> mx_data[3] = 0.0f;
matrix -> mx_data[4] = 0.0f;
matrix -> mx_data[5] = (2.0f * near) / (top - bottom);
matrix -> mx_data[6] = 0.0f;
matrix -> mx_data[7] = 0.0f;
matrix -> mx_data[8] = (right + left) / (right - left);
matrix -> mx_data[9] = (top + bottom) / (top - bottom);
matrix -> mx_data[10] = (-far - near) / (far - near);
matrix -> mx_data[11] = -1.0f;
matrix -> mx_data[12] = 0.0f;
matrix -> mx_data[13] = 0.0f;
matrix -> mx_data[14] = -(2.0f * near) * far / (far - near);
matrix -> mx_data[15] = 0.0f;
}

透视功能:

glmxvoid glmxLoadPerspective(glmxMatrix* matrix, glmxfloat fovy, glmxfloat aspect, glmxfloat near,
    glmxfloat far){
glmxfloat ymax = near * tanf(fovy * GLMX_PI / 360.0f), xmax = ymax * aspect;
glmxLoadFrustrum(matrix, -xmax, xmax, -ymax, ymax, near, far);
}

最佳答案

据我所知,您将 x,y 不对称偏移(8 和 9)放在第三列中,这意味着它们与 z 相乘。我认为 8,9 应该移至 12 和 13。

关于c - 我的数学观点错了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12828120/

相关文章:

C程序打印1-300的所有素数

android - 在 android 中使用 malloc/free

opengl - opengl中的正交投影和纹理坐标

r - 如何在 R 中处理巨大的矩阵?

c++ - boost ublas矩阵产品的问题

c - 将一行存储为字符串并稍后在 C 代码中输出

c - scanf 如何知道何时结束 for 循环?

c - OpenGL正弦函数向点移动

c# - 使用或不使用 VSync

algorithm - 稀疏矩阵——矩阵乘法