OpenGL ES 2.0 2D投影矩阵,错误地将GLfloat(*)[4]转换为GLfloat

时间:2013-07-22 11:17:43

标签: c++ opengl opengl-es

我正在OpenGL ES 2.0中创建一个应用程序,并希望设置一个2D投影矩阵来理清由屏幕宽高比引起的拉伸和失真。我已经使用函数创建了具有所需值的矩阵。该函数的结果是一个4x4矩阵,然后上传到顶点着色器。当我运行程序时,我得到一个构建错误,说:“无法转换GLfloat (*)[4]' to GLfloat'作为回报​​”。我有限的C ++知识,不知道如何解决这个问题,下面是我调用函数的代码。

GLfloat ortho_matrix(float left, float right, float bottom, float top, float near,
float  far)
{
GLfloat result[4][4];

result[0][0] = 2.0 / (right - left);
result[1][0] = 0.0;
result[2][0] = 0.0;
result[3][0] = 0.0;

//Second Column
result[0][1] = 0.0;
result[1][1] = 2.0 / (top - bottom);
result[2][1] = 0.0;
result[3][1] = 0.0;

//Third Column
result[0][2] = 0.0;
result[1][2] = 0.0;
result[2][2] = -2.0 / (far - near);
result[3][2] = 0.0;

//Fourth Column
result[0][3] = -(right + left) / (right - left);
result[1][3] = -(top + bottom) / (top - bottom);
result[2][3] = -(far + near) / (far - near);
result[3][3] = 1;

return result;
}

2 个答案:

答案 0 :(得分:1)

您正在尝试从函数返回单个浮点数,您需要返回一个2D数组。以这种方式声明你的功能:

void ortho_matrix(float left, float right, float bottom, float top, float near,
float  far, GLfloat result[4][4])

答案 1 :(得分:0)

看看GLM。它具有适当的矩阵类型和对矩阵运算的适当支持。它也是OpenGL友好的。