作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
// get the current transform matrices
D3DXMATRIX matProjection, matView, matWorld, matInverse;
ENGINE.GetDevice()->GetDevice()->GetTransform(D3DTS_PROJECTION, &matProjection);
ENGINE.GetDevice()->GetDevice()->GetTransform(D3DTS_VIEW, &matView);
ENGINE.GetDevice()->GetDevice()->GetTransform(D3DTS_WORLD, &matWorld);
// use the mouse coordinates to get the mouse angle
float xAngle = (((2.0f * ENGINE.GetInputManager()->GetMousePos()->x) / WINDOW_WIDTH) - 1.0f) / matProjection(0, 0);
float yAngle = (((-2.0f * ENGINE.GetInputManager()->GetMousePos()->y) / WINDOW_HEIGHT) + 1.0f) / matProjection(1, 1);
D3DXVECTOR3 origin, direction;
origin = D3DXVECTOR3(0.0f, 0.0f, 0.0f);
direction = D3DXVECTOR3(xAngle, yAngle, 1.0f);
// find the inverse matrix
D3DXMatrixInverse(&matInverse, NULL, &(matWorld * matView));
// convert origin and direction into model space
D3DXVec3TransformCoord(&origin, &origin, &matInverse);
D3DXVec3TransformNormal(&direction, &direction, &matInverse);
D3DXVec3Normalize(&direction, &direction);
// detect picking
BOOL hit;
std :: list<CEntity*> :: iterator iter = MAINMANAGER.GetLegoObjectManager()->GetObjList().begin();
CResource* g_pResource = NULL;
while(iter != MAINMANAGER.GetLegoObjectManager()->GetObjList().end())
{
g_pResource = static_cast<CEntity*>(*iter)->GetResource();
D3DXIntersect( static_cast<PassiveMesh*>(g_pResource)->GetMesh(), &origin, &direction, &hit, NULL, NULL, NULL, NULL, NULL, NULL);
if(hit)
{
ENGINE.GetDevice()->GetDevice()->SetRenderState(D3DRS_LIGHTING, FALSE);
break;
}
else
{
ENGINE.GetDevice()->GetDevice()->SetRenderState(D3DRS_LIGHTING, TRUE);
}
++iter;
}
这是我挑选的示例源代码。我有一个问题。
如果我创建三个 3D 对象。所以选择第三个对象。第一个不工作,第二个对象。
如果我只创建一个对象。采摘效果很好!
如果我创建两个对象。拾取第二个对象而不是第一个对象。
只有创建最后一个对象才能很好地工作。
我不明白为什么会出现这个问题。
请给我一些建议。
最佳答案
我猜你的列表不是按到相机的距离排序的,这是正常的,但正因为如此,你只需检查一个网格,如果有命中,你就会崩溃。相反,因为您不知道列表的顺序,您应该检查列表中的所有网格,然后取最短的一个。你现在做事的方式使得选择取决于列表,而不是相机所在的位置。
关于c++ - 问D3DXIntersect函数:(,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17681241/
我是一名优秀的程序员,十分优秀!