Hallo.
Ich brauche nun für meinen Editor Picking. Ich habe schon Code geschrieben der teilweise funktioniert. Wenn ich mein Objekt jetzt aber verschiebe (BSP -x (links)) dann muss ich weiter Links "Picken" als das Objekt. Das Selbe in die andere Richtung.Wenn mein Objekt an 0|0|0 liegt, sind nur minimale Abweichungen vorhanden. Je mehr es von dem 0|0|0 Punkt entfernt ist desto mehr Abweichungen habe ich.
(RayPos ist falsch?)
Mein Code:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
Vector3 v;
Matrix Proj = Direct3D::Instance().GetTransform(D3DTS_PROJECTION);
v.x = ((( 2.0f * ManipulatedMouseposition.x) / Screensize.x ) - 1) / Proj.m11;
v.y = -( ( ( 2.0f * ManipulatedMouseposition.y ) / Screensize.y ) - 1 ) / Proj.m22;
v.z = 1.0f;
Matrix m, View;
Vector3 rayPos,rayDir;
View = Direct3D::Instance().GetTransform(D3DTS_VIEW);
m = MatrixInvert( View );
rayDir.x = v.x*m.m11 + v.y*m.m21 + v.z*m.m31;
rayDir.y = v.x*m.m12 + v.y*m.m22 + v.z*m.m32;
rayDir.z = v.x*m.m13 + v.y*m.m23 + v.z*m.m33;
rayPos.x = m.m41;
rayPos.y = m.m42;
rayPos.z = m.m43;
|
ManipulatedMouseposition sind die Mauskoordinaten minus Renderpanel-Position. Das mache ich weil mein Rendertarget(Panel) nicht an 0|0 des Fensters liegt.
Screensize ist nicht die Größe des Backbuffers, sonder die des Renderpanels abzüglich Menu, Rahmen und co.
Tutorial:
http://www.toymaker.info/Games/html/picking.html
EDIT: Ich kann garantieren, dass die Kollision zwischen Ray und Objekt keine Fehler hat. Ich rechne den Strahl in den ModelSpace um, und mache dann die Kollisionsprüfung.
Danke
MfG