У меня есть этот цикл, который проверяет два объекта.Проблема в том, что он проверяет только первый, но не проверяет остальные ... Когда мой цикл проверяет первый объект на предмет выбора, он говорит, был ли он выбран или нет, но когда он повторяется, чтобы проверитьвторой объект говорит, что он не был выбран, даже когда он был выбран.Поэтому я переключил процесс проверки.Как сейчас, второй объект проверяется, чем первый объект проверяется.Поэтому после того, как я это сделал, я получил такой результат, он говорит, что второй объект выбран или нет, он работает нормально, но когда он повторяется, он начинает проверять первый объект, он говорит, что он не выбран, даже когда он был выбран ..
вот мой цикл
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;
}
}
есть идеи?
РЕДАКТИРОВАТЬ 2:
хорошо, я не думаю, что вы, ребята, правильно меня поняли.Я не пытаюсь заставить мой цикл проверять больше entity
.
Хорошо, я буду, вот что происходит.
1. Когда он в первый раз зацикливается, проверяет, выбран ли entity[0]
или нет, этот шаг работает нормально.
2. Когда он повторяется во второй раз, проверяет, выбран ли entity[1]
или нет, ЗДЕСЬ ПРОБЛЕМА.
мой цикл работает нормально, когда он зацикливается дляв первый раз, но он не работает, когда он повторяется во второй раз.
Когда я отлаживал, я пытался это сделать.
1. Когда он зацикливается в первый раз, проверяет, если entity[1]
Этот шаг работает нормально.
2. Когда он повторяется во второй раз, проверяет, выбран ли entity[2]
или нет, ЗДЕСЬ ПРОБЛЕМА.кажется, что после первого цикла что-то не так, но я не вижу, что это.Кстати, я не получаю никаких ошибок. РЕДАКТИРОВАТЬ 3: Вся функция
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;
}