OpenGL glTranslate和glRotate

时间:2010-12-14 12:36:45

标签: c++ opengl matrix glrotate

我需要一个将glTranslate()之类的翻译应用到某个点的函数。 有人知道像glTranslate()glRotate()这样的函数来修改和检索要乘法的矩阵吗?

2 个答案:

答案 0 :(得分:3)

那里有成千上万的{{​​3}}。有一个搜索圆谷歌,然后你可以设置翻译和旋转,而不使用gl *功能......

编辑:如果你真的只想创建矩阵而不使用多方便的矩阵类,那么你可以按如下方式定义glRotatef(angle,x,y,z):

const float cosA = cosf( angle );
const float sinA = sinf( angle );
float m[16] = { cosA + ((x * x) * (1 - cosA)), ((x * y) * (1 - cosA)) - (z * sinA), ((x * z) * (1 - cosA)) + (y * sinA), 0.0f,
                ((y * x) * (1 - cosA)) + (z * sinA), cosA + ((y * y) * (1 - cosA)), ((y * z) * (1 - cosA)) - (x * sinA), 0.0f,
                ((z * x) * (1 - cosA)) - (y * sinA), ((z * y) * (1 - cosA)) + (x * sinA), cosA + ((z * z) * (1 - cosA)), 0.0f,
                0.0f, 0.0f, 0.0f, 1.0f
               };

取自free matrix classe

转换矩阵非常容易创建:glTranslatef(x,y,z)定义如下:

float m[16] = { 1.0f, 0.0f, 0.0f, 0.0f,
                0.0f, 1.0f, 0.0f, 0.0f,
                0.0f, 0.0f, 1.0f, 0.0f,
                   x,    y,    z, 1.0f
               };

你可以很容易地查找矩阵乘法和矩阵向量乘法。

为了让你的生活变得简单,你可以下载一个矩阵类,它可以为你完成所有这些......

答案 1 :(得分:1)

Here您可以使用矩阵找到有关转换的一般信息。

Here你可以找到做矩阵乘法的例子和完整函数(缩放,旋转或其他)。它是用目标C编写的,但它不应该难以用c ++重写它。