我在用纯 C 语言编写 glRotatef 的替代函数时遇到问题。我需要实现参数为:点列表、角度和旋转向量的函数。函数必须在旋转后返回点列表。我的功能如下所示:
void rotate(float * current, float a, float x, float y, float z)
{
float sina = sinf(a);
float cosa = cosf(a);
float rotateMatrix[9] = //creating rotate matrix
{
x*x*(1-cosa) + cosa, x*y*(1-cosa) - z*sina, x*z*(1-cosa) + y*sina,
y*x*(1-cosa) + z*sina, y*y*(1-cosa) + cosa, y*z*(1-cosa) - x*sina,
z*x*(1-cosa) - y*sina, z*y*(1-cosa) + x*sina, z*z*(1-cosa) + cosa
};
float *resultVertexList = current; //temporary help
int i;
for(i=0;current[i] != 0;i++) //multiplying CURRENT_MATRIX * ROTATE_MATRIX
{
int currentVertex = (i/3) * 3;
int rotateColumn = i%3;
resultVertexList[i] =
current[currentVertex] * rotateMatrix[rotateColumn] +
current[currentVertex+1] * rotateMatrix[rotateColumn+3] +
current[currentVertex+2] * rotateMatrix[rotateColumn+6];
}
current = resultVertexList;
}
我在这里这样称呼它:rotate(current, M_PI/10, 0, 1, 0);
之后,我current
列出点并用 openGL 简单地绘制它们。为了测试,我尝试旋转代表立方体的点列表。它旋转,但每次调用rotate
函数它都会缩小。我不知道为什么。看一些截图:
在多次调用rotate
函数后,它缩小到一个点。
我究竟做错了什么?