その場回転のやり方教えてください!(DXLIB?)
Posted: 2016年11月06日(日) 22:16
3Dの三角形をその場で回転させたいのですが上手くいかずに困っています
全くわからないので皆さんの知恵を貸してください(>_<)
プログラムすべて記入すると長くなるので一部省略して記載します
現在
float rot;
VECTOR axis;
クォータニオンでrotとaxisで回転クォータニオン生成
MATRIX matRot = 回転クォータニオンから回転行列に変換したもの
平行移動行列生成
MATRIX matTrans = MGetTranslate(VGet(モデルの座標));
回転行列と平行移動行列を乗算
matRot = MMult(matRot, matTrans);
//行列をセット
MV1SetMatrix(モデルのハンドル, matRot);
MV1SetPosition(モデルのハンドル, モデルの座標);
ではモデルはその場で回転するのですが同じように
クォータニオンでrotとaxisで回転クォータニオン生成
MATRIX matRot = 回転クォータニオンから回転行列に変換したもの
平行移動行列生成
MATRIX matTrans = MGetTranslate(VGet(三角形の座標));
回転行列と平行移動行列を乗算
matRot = MMult(matRot, matTrans);
DrawTriangle3D(VTransform(VGet(三角形の座標からx座標を少しーに移動させた座標),matRot),
VTransform(VGet(三角形の座標からy座標を少し+に移動させた座標),matRot),
VTransform(VGet(三角形の座標からx座標を少し+に移動させた座標),matRot));
でやると上手くその場で回転しません。(旋回のような動きをします)
三角形のすべての頂点座標に行列を乗算すればできると思っていたのですが…
その後色々なサイトを調べていろいろ考えたのですが全然うまくいかずに放心状態です…
助けてください(´;ω;`)ウゥゥ
全くわからないので皆さんの知恵を貸してください(>_<)
プログラムすべて記入すると長くなるので一部省略して記載します
現在
float rot;
VECTOR axis;
クォータニオンでrotとaxisで回転クォータニオン生成
MATRIX matRot = 回転クォータニオンから回転行列に変換したもの
平行移動行列生成
MATRIX matTrans = MGetTranslate(VGet(モデルの座標));
回転行列と平行移動行列を乗算
matRot = MMult(matRot, matTrans);
//行列をセット
MV1SetMatrix(モデルのハンドル, matRot);
MV1SetPosition(モデルのハンドル, モデルの座標);
ではモデルはその場で回転するのですが同じように
クォータニオンでrotとaxisで回転クォータニオン生成
MATRIX matRot = 回転クォータニオンから回転行列に変換したもの
平行移動行列生成
MATRIX matTrans = MGetTranslate(VGet(三角形の座標));
回転行列と平行移動行列を乗算
matRot = MMult(matRot, matTrans);
DrawTriangle3D(VTransform(VGet(三角形の座標からx座標を少しーに移動させた座標),matRot),
VTransform(VGet(三角形の座標からy座標を少し+に移動させた座標),matRot),
VTransform(VGet(三角形の座標からx座標を少し+に移動させた座標),matRot));
でやると上手くその場で回転しません。(旋回のような動きをします)
三角形のすべての頂点座標に行列を乗算すればできると思っていたのですが…
その後色々なサイトを調べていろいろ考えたのですが全然うまくいかずに放心状態です…
助けてください(´;ω;`)ウゥゥ