у меня есть этот цикл, который проверяет два объекта. Проблема с ним в том, что он проверяет только первый, но не проверяет остальные... Когда мой цикл проверяет первый объект для выбора, он говорит, был ли он выбран или нет, но когда он снова зацикливается, чтобы проверить второй объект говорит, что он не был выбран, даже когда он был выбран. Итак, что я сделал, так это то, что я переключил процесс проверки. Например, теперь проверяется второй объект, а не первый объект. Итак, после того, как я это сделал, я получил этот результат, он говорит, что второй объект был выбран или нет, он работает нормально, но когда он снова зацикливается, он начинает проверять первый объект, он говорит, что он не выбран, даже когда он был выбран..
вот моя петля
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;
}
}
Есть идеи?
EDIT 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;
}