은 내가 mpMesh에 대한 인덱스 버퍼를 설정하지 않은, 당신이 볼 수 있듯이 나는 DESC 다음DirectX 10 메쉬 버퍼가 정렬되지 않았습니다. 웨이브 프런트 obj 인덱스를 계산하는 방법?
D3D10_INPUT_ELEMENT_DESC defaultLayout[] =
{
{"POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D10_INPUT_PER_VERTEX_DATA, 0},
{"NORMAL", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, D3D10_APPEND_ALIGNED_ELEMENT, D3D10_INPUT_PER_VERTEX_DATA, 0},
{"COLOR", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, D3D10_APPEND_ALIGNED_ELEMENT, D3D10_INPUT_PER_VERTEX_DATA, 0},
{"TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, D3D10_APPEND_ALIGNED_ELEMENT, D3D10_INPUT_PER_VERTEX_DATA, 0},
};
r = D3DX10CreateMesh(Graphics()->GetDevice(),defaultLayout,4,
"POSITION",NumVerts(),12,D3DX10_MESH_32_BIT,
&mpMesh);
if(FAILED(r))
{
throw cGameError(L"Can not create mesh");
}
r= mpMesh->SetVertexData(0,&m_verts[0]);
if(FAILED(r))
{
throw cGameError(L"Can not Set VertexData");
}
//mpMesh->SetIndexData(&m_tris[0],m_tris.size()*3);
mpMesh->CommitToDevice();
로 정점 데이터를로드
다이렉트 X 10에서 파면 OBJ 모델을 렌더링하는 프로그램을 썼습니다. Vertexes 인덱스를 계산하는 방법을 모르겠습니다. 보시다시피, 내 버텍스 형식에는 노멀이 포함됩니다. 즉, 동일한 버텍스 위치가 다른 노멀을 가질 수 있습니다. 예를 들어, 큐브에는 36 개의 정점이 있지만 8 개의 다른 위치 만 포함됩니다. 파면 obj 파일은 8 위치 인덱스 만 사용합니다.
이 프로그램은 내가 그것을 메쉬 인덱스 또는 다른 문제를 설정하지 않음으로써 원인을인지 확실하지 않다 런타임
DrawIndexed: Vertex Buffer Stride (15) at the input vertex slot 0 is not aligned properly. The current Input Layout imposes an alignment of (4) because of the Formats used with this slot.
EXECUTION ERROR #367: DEVICE_DRAW_VERTEX_STRIDE_UNALIGNED
에서 다음과 같은 오류가 발생합니다. 모든 의견을 환영합니다.
감사합니다.
대단히 감사합니다. Btw, 그 꼭지점을위한 메쉬를 만드는 데 어떤 이점이 있는지 알고 싶습니다. 같은 꼭지점 데이터로 여러 객체를 그리려 할 때 메쉬 사용 속도가 빠르다고 들었습니다. – LNK2019
ID3DX10Mesh :: Optimize() 호출을 사용하면 크거나 복잡한 모델에서 성능을 크게 향상시킬 수 있습니다. 메시를 전처리로 최적화하지 않는 한 (아마도 OBJ를 읽는 중이 아닌 경우),이 호출만으로도 ID3DX10Mesh를 사용하는 것이 좋습니다. –