[英]How to Multiply Matrices in openGL
如何在没有GLUT或其他扩展包的情况下将基本openGL中的矩阵相乘? 说,我想计算T * M的结果,T和M都是矩阵。 如何在openGL中实现它?
我知道这是一个叫做glMultMatrix *()的函数。 但它只能用结果取代当前的模型矩阵。 而且它不是直接计算矩阵的方法。
在更新版本的OpenGL中,不推荐使用glMultMatrix
和相关函数(并从核心配置文件中删除)。 而是使用诸如GLM之类的库来执行诸如矩阵乘法(以及更多)之类的任务。
即使您想继续使用固定功能管道(和兼容性配置文件),这也许是可行的方法。 您可以使用glLoadMatrix
将结果上传到OpenGL,并且您可以更好地使用可编程管道向前推进(您将使用相同的矩阵来设置着色器程序统一)。
那么( http://ideone.com/EsQkAR ):
#include <iostream>
void Multiply(float N[4][4], float M[4][4], float Result[4][4])
{
for (int I = 0; I < 4; ++I)
{
for (int J = 0; J < 4; ++J)
{
float SumElements = 0.0f;
for (int K = 0; K < 4; ++K)
{
SumElements += M[I][K] * N[K][J];
}
Result[I][J] = SumElements;
}
}
}
void Print(float mat[4][4])
{
for (int i = 0; i < 4; ++i)
{
for (int j = 0; j < 4; ++j)
{
std::cout<<mat[i][j]<<" ";
}
std::cout<<"\n";
}
}
int main()
{
float N[4][4] =
{
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12},
{13, 14, 15, 16}
};
float M[4][4] =
{
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12},
{13, 14, 15, 16}
};
float Result[4][4];
Multiply(N, M, Result);
Print(Result);
}
我想计算T * M的结果,T和M都是矩阵。 如何在openGL中实现它?
你没有,因为OpenGL不是一个数学库。 OpenGL是一个绘图API:你可以提供一些数据(几何,纹理,随时可用的矩阵),它将使用它来绘制图片到你的命令。 其他任何东西都超出了OpenGL的范围。
Legacy OpenGL内置了一些矩阵操作功能,但除了初学者的教程和简单的程序之外,几乎没有任何严肃的程序确实使用它们,甚至15年前。 原因在于,大多数时候你还需要那些矩阵,比如碰撞检测,刚体力学等等,并且保留冗余副本几乎没有意义。 传统的OpenGL矩阵API使用起来很麻烦。
另请注意,在CPU上执行单个4×4矩阵 - 矩阵乘法比在将其卸载到GPU上更有效(如果要执行数千次矩阵乘法,则所有这些都是相同的程序,这是一个完整的不同的故事)。
由传统OpenGL执行的矩阵数学仅涉及矩阵计算的单个实例。 所以使用它们没有计算好处; 进入OpenGL实现的整个开销实际上就像一个减速带。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.