だから私はここに機能を持っています
void rotateLocal(GLfloat deg, GLfloat x, GLfloat y, GLfloat z)
ここで、x、y、z は、このオブジェクトを中心に回転させたいローカル軸の座標です。テスト目的で (0,1,0) を使用していますが、ローカル y ではなくワールド y を中心に回転するだけです。この関数のオブジェクトの 1 つの頂点のロジックは次のとおりです。
ax = x;
ay = y;
az = z;
//normalize
length = sqrt((ax * ax) + (ay * ay) + (az * az));
ux = ax / length;
uy = ay / length;
uz = az / length;
//square these
uxS = ux * ux;
uyS = uy * uy;
uzS = uz * uz;
getx = vertex[0];
gety = vertex[1];
getz = vertex[2];
//find new vertex points using rotation matrix for local axis
vertex[0] = (getx * (uxS + cos(deg) * (1 - uxS))) + (gety * (ux * uy * (1 - cos(deg)) - uz * sin(deg))) + (getz * (uz * ux * (1 - cos(deg)) + uy * sin(deg)));
vertex[1] = (getx * (ux * uy * (1-cos(deg)) + uz * sin(deg))) + (gety * (uyS + cos(deg) * (1 - uyS))) + (getz * (uy * uz * (1 - cos(deg)) - ux * sin(deg)));
vertex[2] = (getx * (uz * ux * (1-cos(deg)) - uy * sin(deg))) + (gety * (uy * uz * (1-cos(deg)) + ux * sin(deg))) + (getz * (uzS + cos(deg) * (1-uzS)));
回転行列に何か問題がありますか? どこかで間違った変数を使用していますか?
注: RotateGL などは使用したくありません。行列の計算を自分で行いたいのです。