如何在没有GLUT或其他扩展包的情况下在基本的openGL中相乘矩阵? 说,我想计算T * M的结果,T和M都是矩阵。如何在openGL中实现它?
我知道这是一个名为 glMultMatrix *()的功能。但它只能用结果取代当前的模型矩阵。而且它不是直接计算矩阵的方法。
答案 0 :(得分:4)
glMultMatrix
及相关函数(并从核心配置文件中删除)。而是使用诸如GLM之类的库来执行诸如矩阵乘法(以及更多)之类的任务。
即使您想继续使用固定功能管道(以及兼容性配置文件),这也许是可行的方法。你可以使用glLoadMatrix
将结果上传到OpenGL,你可以更好地使用可编程管道向前推进(你将使用相同的矩阵来设置着色器程序统一)。
答案 1 :(得分:1)
#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);
}
答案 2 :(得分:0)
我想计算T * M的结果,T和M都是矩阵。如何在openGL中实现它?
你没有,因为OpenGL不是数学库。 OpenGL是一个绘图API:你可以提供一些数据(几何,纹理,随时可用的矩阵),它将使用它来绘制图片到你的命令。其他任何东西都超出了OpenGL的范围。
Legacy OpenGL内置了一些矩阵操作功能,但除了初学者的教程和简单的程序之外,几乎没有任何严肃的程序确实使用它们,甚至15年前。原因在于,大多数时候你还需要那些矩阵,比如碰撞检测,刚体力学等等,并且保留冗余副本几乎没有意义。传统的OpenGL矩阵API使用起来很麻烦。
另请注意,在CPU上执行单个4×4矩阵 - 矩阵乘法比在将其卸载到GPU上更有效(如果要执行数千次矩阵乘法,则所有这些都是相同的程序,这是一个完全不同的故事。)
传统OpenGL执行的矩阵数学只是关于矩阵计算的单个实例。所以使用它们没有计算好处;进入OpenGL实现的整个开销实际上就像一个减速带。