[英]Have a 3D object look at a 3D object matrix?
我目前正在使我的3D對象變得平坦。 但這是我的目標。
Vector4 up;
newMatrix.SetIdentity();
up.set_x(0);
up.set_y(1);
up.set_z(0);
Vector4 zaxis = player_->transform().GetTranslation() - spider_->transform().GetTranslation();
zaxis.Normalise();
Vector4 xaxis = CrossProduct(up, zaxis);
xaxis.Normalise();
Vector4 yaxis = CrossProduct(zaxis, xaxis);
newMatrix.set_m(0, 0, xaxis.x()); newMatrix.set_m(0, 1, xaxis.y()); newMatrix.set_m(0, 2, xaxis.z());
newMatrix.set_m(1, 0, yaxis.x()); newMatrix.set_m(1, 1, yaxis.y()); newMatrix.set_m(1, 2, yaxis.z());
newMatrix.set_m(2, 0, zaxis.x()); newMatrix.set_m(2, 1, zaxis.y()); newMatrix.set_m(2, 2, zaxis.z());
請問將值放入矩陣的方法,我正在使用框架給我的東西。
Vector4 Game::CrossProduct(Vector4 v1, Vector4 v2)
{
Vector4 crossProduct;
crossProduct.set_x((v1.y() * v2.z()) - (v2.y() * v2.z()));
crossProduct.set_y((v1.z() * v2.x()) - (v1.z() * v2.x()));
crossProduct.set_z((v1.x() * v2.y()) - (v1.x() * v2.y()));
return crossProduct;
}
我在這里做錯了什么? 請注意,我之前添加了第四行,在角落之前添加了1,以防萬一,沒有變化。
當(0,1,0)
接近要查看的方向時,您會遇到問題。 比叉積將導致一個或兩個基矢量為零,這可能導致2D外觀失敗。 但這僅在您的對象彼此之間僅在y
軸上偏移時才會發生。 為避免這種情況,您可以在up
方向和view
方向之間測試dot
積,並且如果結果的abs
大於0.7
改用(1,0,0)
(作為向上或向右或其他方式...)。
同樣,由於我們對您的符號一無所知,因此我們無法確認您的設置矩陣是否正確(可能正確或可能錯誤,可能已轉置等),有關更多信息,請查看:
但是,很可能您的矩陣也保留了透視變換,並且通過設置其像元,您將其完全覆蓋而導致沒有透視,因此沒有2D輸出。 在這種情況下,應將原始透視圖矩陣與新矩陣相乘並使用結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.