我想開始說明我的目標與這個問題, 我目前正在C++和DirectX中創建一個小型遊戲引擎,我目前正處於我需要在廣告牌精靈(總是面對相機的那種)和模型上進行光線投射。如何從矩陣中獲取Vector3
對於我的老式遊戲,在廣告牌精靈處進行光線投射現在更重要一些,所以讓我們把模型光線投射完成。
我目前使用下面的代碼來測試對我的精靈:
for(int i = 0; i < spriteObjs.size();i++)
{
BOOL hit = FALSE;
FLOAT distToHit = 100;
D3DXVECTOR3 v1 = D3DXVECTOR3((-2.5f*spriteObjs.at(i)->scaling.x)+spriteObjs.at(i)->position.x,(5*spriteObjs.at(i)->scaling.y)+spriteObjs.at(i)->position.y,0+spriteObjs.at(i)->position.z);
D3DXVECTOR3 v2 = D3DXVECTOR3((2.5f*spriteObjs.at(i)->scaling.x)+spriteObjs.at(i)->position.x,(5*spriteObjs.at(i)->scaling.y)+spriteObjs.at(i)->position.y,0+spriteObjs.at(i)->position.z);
D3DXVECTOR3 v3 = D3DXVECTOR3((-2.5f*spriteObjs.at(i)->scaling.x)+spriteObjs.at(i)->position.x,(-5*spriteObjs.at(i)->scaling.y)+spriteObjs.at(i)->position.y,0+spriteObjs.at(i)->position.z);
D3DXVECTOR3 v4 = D3DXVECTOR3((2.5f*spriteObjs.at(i)->scaling.x)+spriteObjs.at(i)->position.x,(-5*spriteObjs.at(i)->scaling.y)+spriteObjs.at(i)->position.y,0+spriteObjs.at(i)->position.z);
if(D3DXIntersectTri(&v1,&v2,&v3,&camera.position,&lookDir,NULL,NULL,&distToHit))
{
//cout << "hit target: "<<spriteObjs.at(i)->quad.textureName << " at distance: " << distToHit << endl;
}
if(D3DXIntersectTri(&v2,&v3,&v4,&camera.position,&lookDir,NULL,NULL,&distToHit))
{
//cout << "hit target: "<<spriteObjs.at(i)->quad.textureName << " at distance: " << distToHit << endl;
}
}
看着精靈的時候,然後測試該線這導致給人一種真實的,但是,這並不佔由精靈本身的視圖矩陣給出的旋轉,所以這適用於精靈的「前視圖」,但是當它側視時(它是一架飛機,所以它沒有寬度),你將永遠無法擊中它。因爲它是用它的臉朝着相機繪製的,所以仍然可以看到精靈的正面。所以我需要從世界矩陣(或倒轉的視圖矩陣(您的選擇))得到旋轉,並將其與vector3的定義相乘/數學運算(爲什麼來自2.5和5等你拿)頂點的位置(在這種情況下,V1到V4)
對我怎麼在四定義我的頂點一些額外的代碼
VertexPosNorTex triangleVerts[] =
{
{D3DXVECTOR3(-2.5,5,0),D3DXVECTOR3(1,0,0),D3DXVECTOR2(0,0)},
{D3DXVECTOR3(2.5,5,0),D3DXVECTOR3(1,0,0),D3DXVECTOR2(1,0)},
{D3DXVECTOR3(-2.5,-5,0),D3DXVECTOR3(1,0,0),D3DXVECTOR2(0,1.5)},
{D3DXVECTOR3(2.5,-5,0),D3DXVECTOR3(1,0,0),D3DXVECTOR2(1,1.5)},
};
這會導致看起來像一個四方形
5
----------
| |
| |
| |
| | 10
| |
| |
| |
----------
這將在中間轉動精靈廣告牌錨點,在那裏我只使用上部0.5紫外線空間作爲紋理(下部分離保持透明,所以你不會看到它(這有助於解決問題)就像從一個更高的角度)
看低所以當他們是飛在地面以上。隨着給予足夠的解釋和我的問題半途而廢,這裏是
TL; DR
如何改變我使用旋轉版本(矩陣)的頂點位置以旋轉的形式返回到Vector3,其位置爲 (因此1個頂點wi例如,在(1,0,0)處的第0次旋轉將會像(0.86,0,0.1314)那樣在從矩陣中取回之後。 (例如只是一個隨機數,沒有造成任何代碼或數學)
所以這有點工作的,它有一個奇怪偏離設定在不同的角度和位置與多然後100上以不同的角度在X改變而子畫面只在寬度5, 我不能完全弄清楚爲什麼.. – Themperror