线性代数和OpenGL的新手.一旦你有了一个转换矩阵,你如何使用openGL绘制它们



我看到了能够使用矩阵而不是内置函数来表示转换的示例。我想在不使用任何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矩阵并加载它?

您可能想要glLoadMatrixglMultMatrix中的一个。它们采用列主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将变换加载到统一中,在那里您可以在着色器中检索它,并使用矩阵乘法应用它。

相关内容

  • 没有找到相关文章

最新更新