我看到了能够使用矩阵而不是内置函数来表示转换的示例。我想在不使用任何opengl的矩阵或变换函数的情况下了解更多关于低级函数的信息
假设我有一个矩阵类:类矩阵{公共:浮点数据[3][3];
Matrix ( void )
{
int i, j;
for ( i = 0; i < 3; i++ )
{
for ( j = 0; j < 3; j++ )
{
data [ i ] [ j ] = 0;
}sa
}
}
};
示例功能:
Matrix scale ( Pt p, float alpha )
{
Matrix rvalue;
rvalue.data[0][0] = alpha;
rvalue.data[0][1] = 0;
rvalue.data[0][2] = (1-alpha)*p.x;
rvalue.data[1][0] = 0;
rvalue.data[1][1] = alpha;
rvalue.data[1][2] = (1-alpha)*p.y;
rvalue.data[2][0] = 0;
rvalue.data[2][1] = 0;
rvalue.data[2][2] = 1;
return rvalue;
}
如何使用opengl应用这些转换?我不知道从哪里开始。有没有一个函数可以让cane取一个3x3矩阵并加载它?
您可能想要glLoadMatrix
或glMultMatrix
中的一个。它们采用列主4x4矩阵,所以你会想写一个类似的填充码
GLfloat matrix[16];
matrix[0] = data[0][0];
matrix[1] = data[0][1];
matrix[2] = data[0][2];
matrix[3] = 0.0f;
matrix[4] = data[1][0];
matrix[5] = data[1][1];
matrix[6] = data[1][2];
matrix[7] = 0.0f;
matrix[8] = data[2][0];
matrix[9] = data[2][1];
matrix[10] = data[2][2];
matrix[11] = 0.0f;
matrix[12] = 0.0f;
matrix[13] = 0.0f;
matrix[14] = 0.0f;
matrix[15] = 1.0f;
glLoadMatrixf(matrix);
所以我刚刚用身份矩阵的相关部分填充了你的数据。
你是说glLoadMatrix
?
真的,我想你已经猜到了那个名字。
现在,这是OpenGL 3+中不推荐使用的函数。相反,您可以使用glUniformMatrix3fv
将变换加载到统一中,在那里您可以在着色器中检索它,并使用矩阵乘法应用它。