把cube形狀 靜態(tài)的collision繪制出來(lái)發(fā)現(xiàn)少了一些face,這決不是顯示的問(wèn)題,缺少的部分也不能進(jìn)行碰撞檢測(cè)
查了官方網(wǎng)站,似乎這個(gè)問(wèn)題并沒(méi)有得到解決,至少在目前的1.53版中依然存在這個(gè)問(wèn)題。
http://www.newtondynamics.com/forum/viewtopic.php?t=3176&start=0&postdays=0&postorder=asc&highlight=newtontreecollisionaddface
另外,在論壇上我得知做newton的人只有一個(gè),雖然有些bug,但還真的是很佩服作者,這張?zhí)拥幕貜?fù),顯得作者十分的敬業(yè),態(tài)度非常的誠(chéng)懇,這個(gè)問(wèn)題回頭我還得再去確認(rèn)一下。

GraphicObject *teapot = new GraphicObject("box");
GraphicObjects.push_back(teapot);
D3DXCreateBox(gd3dDevice, 5.0f, 5.0f, 5.0f, &(teapot->pMesh), NULL);
//D3DXCreateSphere(gd3dDevice, 5.0f, 5, 5, &(teapot->pMesh), NULL);
//D3DXCreateTeapot(gd3dDevice, &(teapot->pMesh), NULL);
//D3DXCreateBox(gd3dDevice, 10.0f, 10.0, 10.0f, &(teapot->pMesh), NULL);
WORD* pIndices;
LK3D::Vertex::Normal_Vertex* pVertices;
collision = NewtonCreateTreeCollision(nWorld, NULL);
NewtonTreeCollisionBeginBuild(collision);
DWORD numFaces = pGraphicObj->pMesh->GetNumFaces();
teapot->pMesh->LockIndexBuffer(0, (void**)&pIndices);
teapot->pMesh->LockVertexBuffer(0, (void**)&pVertices);
for( DWORD i=0; i<numFaces; i++ )
{
D3DXVECTOR3 face[3];
face[0] = D3DXVECTOR3(pVertices[pIndices[3*i+0]]._x, pVertices[pIndices[3*i+0]]._y, pVertices[pIndices[3*i+0]]._z);
face[1] = D3DXVECTOR3(pVertices[pIndices[3*i+1]]._x, pVertices[pIndices[3*i+1]]._y, pVertices[pIndices[3*i+1]]._z);
face[2] = D3DXVECTOR3(pVertices[pIndices[3*i+2]]._x, pVertices[pIndices[3*i+2]]._y, pVertices[pIndices[3*i+2]]._z);
//boxlocation.TransformTriplex (face, sizeof (dVector), face, sizeof (dVector), 3);
int sz = sizeof (D3DXVECTOR3);
NewtonTreeCollisionAddFace(collision, 3, (FLOAT*)&face[0].x, sz, 0);
}
teapot->pMesh->UnlockVertexBuffer();
teapot->pMesh->UnlockIndexBuffer();
NewtonTreeCollisionEndBuild(collision, 1);
用上cube發(fā)現(xiàn)少了三個(gè)面,用上其它的幾何體也都是同樣的問(wèn)題,有缺失的部分
如果:pVertices[pIndices[3*i+0]]._x + 0.001缺失的部分又會(huì)少一點(diǎn),很奇怪