Ok nun das habe ich hinbekommen. Allerdings nur 2D. Den Abstnd zur Kamera lege ich willkürlich fest.
Mein Code:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
D3DXVECTOR3 g_v1, g_v2;
//...
float x = ((float) xPos) / g_screenWidth;
float y = ((float) yPos) / g_screenHeight; // y + x Pos ist die Mausposition
ComputePickRay(2 * x - 1, 1 - 2 * y);
//a)Objekt an der Position anzeigen, wo der Spieler mit der Maus geklickt hat
D3DXVECTOR3 n = g_v2 - g_v1;
D3DXVec3Normalize(&n, &n);
D3DXVECTOR3 pickPt = *g_Camera.GetEyePt() + 5 * n; //willkürlicher Abstand
D3DXMatrixTranslation(&mWorld, pickPt.x, pickPt.y, pickPt.z);
g_pmWorld->SetMatrix( ( float* )&mWorld );
//...
|
und:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
void ComputePickRay(float xPos, float yPos)
{
D3DXMATRIX mViewProj;
D3DXMatrixMultiply(&mViewProj, g_Camera.GetViewMatrix(),
g_Camera.GetProjMatrix());
D3DXMATRIX Inverse;
D3DXMATRIX invProj, invView;
D3DXMatrixInverse(&invView, NULL, g_Camera.GetViewMatrix());
D3DXMatrixInverse(&invProj, NULL, g_Camera.GetProjMatrix());
D3DXMatrixInverse(&Inverse, NULL, &mViewProj);
D3DXVECTOR3 nearPoint(xPos, yPos, 0);
D3DXVECTOR3 farPoint (xPos, yPos, 1);
D3DXVec3TransformCoord(&g_v1, &nearPoint, &Inverse);
D3DXVec3TransformCoord(&g_v2, &farPoint, &Inverse);
}
|
Ist nicht ganz mein eigener Code
Aber ich kann nun mein Objekt noch nicht in die Tiefe bewegen... Also eigentlich ist meine Frage: Wie bewege ich mein Objekt auf Z Achse?
Ich verwende vorerst nicht meine Engine sonder das DirectX SDK
Danke für die Hilfe