第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

相機(jī)與物體向量相交的角度

相機(jī)與物體向量相交的角度

C#
慕勒3428872 2023-09-16 17:39:03
我試圖確定相機(jī)前向矢量與對(duì)象矢量相交的角度。抱歉,無法直接以我的知識(shí)進(jìn)行解釋,請(qǐng)參閱附圖:相機(jī)可能不會(huì)直接看著物體(OBJ),我想知道相機(jī)的前向矢量的角度(圖中的?) (紅色的 V1)與對(duì)象的矢量(紅色的 V2)相交(如果相交),例如點(diǎn) A、B、C 等,具體取決于相機(jī)的 x 旋轉(zhuǎn)。我嘗試計(jì)算紅線 v1 和 v2 的歸一化向量。然后計(jì)算兩個(gè)向量之間的角度https://onlinemschool.com/math/library/vector/angl/ 但測(cè)試時(shí)結(jié)果與預(yù)期值不符。//v1Vector3 hypoth = Camera.main.transform.forward.normalized;//v2Vector3 adjacent = (new Vector3(obj.transform.position.x, obj.transform.position.y, Camera.main.transform.position.z)                         -obj.transform.position).normalized;float dotProd = Vector3.Dot(adjacent, hypoth);float cosOfAngle = dotProd / (Vector3.Magnitude(adjacent) * Vector3.Magnitude(hypoth));double radAngle = Math.Acos(cosOfAngle);float angle = (float)((180 / Math.PI) * radAngle);
查看完整描述

2 回答

?
jeck貓

TA貢獻(xiàn)1909條經(jīng)驗(yàn) 獲得超7個(gè)贊

v1找到和之間的角度v2會(huì)得到這個(gè)角度,它與您在圖表中標(biāo)記的角度不匹配:

https://img4.sycdn.imooc.com/650577f30001c06301980136.jpg

相反,求解 v1 和垂直于 v2 的平面之間的角度:

https://img1.sycdn.imooc.com/650577fe0001f41e04080212.jpg

我們可以通過使用Vector3.ProjectOnPlane將 v1 投影到與 v2 垂直的平面,然后使用Vector3.Angle找到該投影與 v1 之間的角度來統(tǒng)一完成此操作:

Vector3?projection?=?Vector3.ProjectOnPlane(hypoth,?adjacent);?
float?angle?=?Vector3.Angle(projection,?hypoth);


查看完整回答
反對(duì) 回復(fù) 2023-09-16
?
ITMISS

TA貢獻(xiàn)1871條經(jīng)驗(yàn) 獲得超8個(gè)贊

我有一個(gè)類似的情況,我想將地形單位的碰撞器設(shè)置在玩家Jet的同一高度,同時(shí)它必須在相機(jī)的視線上,否則當(dāng)你拍攝地形單位時(shí),子彈看起來就像穿過地面上的敵方單位,這僅在您使用預(yù)期相機(jī)時(shí)才有效,在正交上,您可能根本不需要這樣做,只需將對(duì)象設(shè)置在與相機(jī)和所有東西相同的高度即可將被對(duì)齊。


這是我的代碼


 void SetColliderLocation()

{

    // Object on the ground

    A = TerrainUnit.transform.position;

    // Camera location

    B = cam.transform.position;

    // Enemy jet height 

    height = mainPlayerTransform.position.y;

    // Unit Vector normalized between A and B

    AB_Normalized = (A - B).normalized;

    // The unit vector required to move the collider to maintain its hieght and line of sight with the camera

    unitVector = (height - A.y) / AB_Normalized.y;

    // Setting the location of the collidar .

    collidarGameObject.transform.position = (AB_Normalized * unitVector) + A;

}

我希望它與您正在尋找的東西有多么相似。


編輯:


如果您應(yīng)用此腳本并且放置一個(gè)盒子而不是碰撞器,您將看到盒子的位置將始終位于天空上的相機(jī)和地面上的物體之間,但是相機(jī)或地面上的物體正在移動(dòng)。


查看完整回答
反對(duì) 回復(fù) 2023-09-16
  • 2 回答
  • 0 關(guān)注
  • 124 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)