2

我需要一个将翻译应用于glTranslate()某个点的函数。有人知道像glTranslate()glRotate()修改和检索矩阵相乘的函数吗?

4

2 回答 2

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
               };

取自维基百科

平移矩阵非常容易创建: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
               };

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

不过,为了让你的生活变得简单,你可以下载一个矩阵类来为你做这一切......

于 2010-12-14T12:39:53.533 回答
1

在这里,您可以找到有关使用矩阵进行转换的一般信息。

在这里,您可以找到执行矩阵乘法(缩放、旋转或其他)的示例和完整函数。它是用目标 C 编写的,但用 c++ 重写它应该不难。

于 2010-12-15T12:07:15.450 回答