簡體   English   中英

3D對象會看着3D對象矩陣嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM