У меня есть этот цикл, который проверяет два объекта. Проблема с ним заключается в том, что он проверяет только первый, но не проверяет другие. Когда мой цикл проверяет первый объект для его выбора, он говорит, что он был выбран или нет, но когда он снова петлиет, чтобы проверить второй объект говорит, что он не был выбран, даже когда он был выбран. Так что я сделал то, что я переключил процесс проверки. Как и сейчас, второй объект проверяется, чем проверяется первый объект. Поэтому после того, как я сделал это, я получил этот результат, он говорит, что второй объект получил или нет, он отлично работает, но когда он снова петлиет, он начинает проверять первый объект, который говорит, что он не выбран, даже когда он был выбран.
вот моя петлядля цикла не работает правильно
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]
, ЗДЕСЬ ПРОБЛЕМА. кажется, что после первого цикла есть что-то не так, но я не вижу, что это такое. Кстати, я не получаю никаких ошибок. EDIT 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;
}
Это описание действительно трудно читать, без знаков препинания. – BBoy 2010-11-25 20:17:02
ОК им добавить их сейчас извините – Ramilol 2010-11-25 20:18:31
Это ... _one_ предложение? – jwueller 2010-11-25 20:18:46