Ich habe diese Schleife, die zwei Objekte überprüft. Das Problem damit ist, dass es nur die erste prüft, aber die anderen nicht überprüft ... Wenn meine Schleife das erste Objekt zum Auswählen überprüft, sagt es, ob es ausgewählt wurde oder nicht, aber wenn es erneut zur Überprüfung durchläuft das zweite Objekt sagt, es wurde nicht gepflückt, auch wenn es gepflückt wurde. Also was ich getan habe, ist, dass ich den Überprüfungsprozess umgestellt habe. Wie jetzt wird das zweite Objekt überprüft, als das erste Objekt geprüft wird. Also, nachdem ich das getan habe, habe ich dieses Ergebnis, dass es sagt, dass das zweite Objekt ausgewählt wurde oder nicht, es funktioniert gut, aber wenn es erneut Schleife beginnt es das erste Objekt zu überprüfen, es sagt, dass es nicht ausgewählt wird, auch wenn es ausgewählt wurde ..
Hier ist meine Schleifefor Schleife funktioniert nicht richtig
for(int i=0; 1>=i; i++)
{
matWorld=entity[i]->s;
// Use inverse of matrix
D3DXVec3Unproject(&rayPos,&rayPos,&vp,&matProj,&matView,matWorld);
D3DXVec3Unproject(&rayDir,&rayDir,&vp,&matProj,&matView,matWorld);
rayDir -= rayPos; // make a direction from the 2 positions
D3DXVec3Normalize(&rayDir,&rayDir);
if(FAILED(D3DXIntersect(entity[i]->pDrawMesh, &rayPos, &rayDir, &hasHit, NULL, NULL, NULL, &distanceToCollision, NULL, NULL)))
{
PostQuitMessage(0);
};
if(hasHit!=0)
{
entity[i]->draw=false;
}
}
eine Idee?
EDIT 2:
ok ich Sie nicht Leute denken verstanden Recht, mich. Ich versuche nicht, meinen Loop-Check mehr entity
zu machen.
Ok ich werde das ist was passiert.
1. Wenn es zum ersten Mal es Schleifen, überprüft, ob entity[0]
ausgewählt ist oder nicht, Dieser Schritt funktioniert gut.
2. Wenn es zum zweiten Mal eine Schleife macht, überprüft, ob entity[1]
ausgewählt ist oder nicht, HIER IST DAS PROBLEM.
meine Schleife funktioniert gut, wenn es zum ersten Mal eine Schleife, aber es funktioniert nicht, wenn es zum zweiten Mal eine Schleife ist.
Als ich debugging versuchte ich dies.
1. Wenn es zum ersten Mal es Schleifen, überprüft, ob entity[1]
ausgewählt ist oder nicht, Dieser Schritt funktioniert gut.
2. Wenn es zum zweiten Mal Schleife, überprüft, ob entity[2]
ausgewählt ist oder nicht, HIER IST DAS PROBLEM. Es scheint, dass nach der ersten Schleife etwas falsch ist, aber ich kann nicht sehen, was es ist. Übrigens bekomme ich keine Fehler. EDIT 3: die gesamte Funktion
BOOL D3dDevice::Picking(HWND hWnd, LPDIRECT3DDEVICE9 d3ddev, CXFileEntity *entity[4])
{
D3DXMATRIX matProj;
POINT pt;
D3DVIEWPORT9 vp;
D3DXMATRIX *matWorld=NULL;
D3DXMATRIX matView;
GetCursorPos(&pt);
ScreenToClient(hWnd, &pt);
d3ddev->GetTransform(D3DTS_PROJECTION, &matProj);
d3ddev->GetViewport(&vp);
d3ddev->GetTransform(D3DTS_VIEW, &matView);
D3DXVECTOR3 rayPos((float)pt.x, (float)pt.y,0); // near-plane position
D3DXVECTOR3 rayDir((float)pt.x, (float)pt.y,1); // far-plane position
BOOL hasHit;
float distanceToCollision;
for(int i=0; i<=1; i++)
{
matWorld=entity[i]->s;
// Use inverse of matrix
D3DXVec3Unproject(&rayPos,&rayPos,&vp,&matProj,&matView,matWorld);
D3DXVec3Unproject(&rayDir,&rayDir,&vp,&matProj,&matView,matWorld);
rayDir -= rayPos; // make a direction from the 2 positions
D3DXVec3Normalize(&rayDir,&rayDir);
if(FAILED(D3DXIntersect(entity[i]->pDrawMesh, &rayPos, &rayDir, &hasHit, NULL, NULL, NULL, &distanceToCollision, NULL, NULL)))
{
PostQuitMessage(0);
};
if(hasHit!=0)
{
entity[i]->draw=false;
}
}
return hasHit;
}
Diese Beschreibung ist wirklich schwer ohne Interpunktion zu lesen. – BBoy
ok ich gebe sie jetzt entschuldigung – Ramilol
Ist das ... ein Satz? – jwueller