我有以下C++類基質:矩陣類的DirectX和OpenGL的
我用這再加上渲染器,用於其中有一個OpenGL和一個DirectX實現。
我有一個測試示例,其中窗口內的鼠標座標用於定位光標下的圖形。這在OpenGL下按預期工作。
由於DirectX是行主要與OpenGL是柱主要,我扭轉矩陣如下,並將其傳遞渲染之前到DirectX:
if(o->tree){
CObjectTransform* t = o->tree->GetTransform(o->transformID);
D3DMATRIX d;
float* m = (float*)&d;
for (int u=0; u<4; u++){
for (int v=0; v<4; v++){
m[u +v*4] = t->worldtransform.matrix[v+u*4];
}
}
pd3dDevice->SetTransform(D3DTS_WORLD, &d);
}
這樣做的結果是沒有什麼是在可見光區域中顯示從圖形,無論在這裏,我把我的光標。
所以:
- 是我的轉換類正確實施?
- 如何使用directx工作?
編輯:
以下代碼是設置:
float* m = (float*)&d;
for (int u=0; u<4; u++){
for (int v=0; v<4; v++){
m[u +v*4] = t->worldtransform.matrix[v+u*4];
}
}
float test[16] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 };
memcpy(test,&d,sizeof(d));
矩陣類的值:
1,0,0,0
0,1,0 ,0
0,0,1,0
47,-30,0,1
的交換矩陣的值:
1,0,0,47
0,1,0,-30
0,0,1,0
0,0,0,1
所以矩陣正在交換。這就排除了作爲問題原因的交換循環代碼。
看來如果我在代碼中將轉換從一個轉換轉換爲一個縮放,那麼我會得到預期的縮放行爲 – 2009-12-01 00:44:40
我完全避開了這個問題並實現了一個接口與包含每個API本機API的directx和opengl實現,因此,一切都按預期工作^ _^ – 2009-12-01 12:24:10