2012-06-16 6 views
0

오늘 저는 DirectX (D3D9)로 작업하기 시작했습니다. 정적 메쉬 클래스를 만들 때까지 모든 것이 잘되었습니다. 이 클래스에는 버퍼 생성, 버퍼 그리기 및 해제 메소드가 포함되어 있습니다.DirectX - 버텍스 배열을 인수로 사용하여 버퍼 생성

버퍼 생성 기능에 문제가 있습니다. 함수의 인수로 꼭지점 배열을 전달하려는 경우 그리기 시간에 삼각형 (삼각형 테스트)이 그려지지 않습니다. 그러나 꼭지점이 함수 내에서 선언 된 경우 (예 : 인수), 삼각형이 그려지지 않습니다.

정점 분류 :

#define CUSTOMFVF (D3DFVF_XYZRHW | D3DFVF_DIFFUSE) 
class CUSTOMVERTEX 
{ 
public: 
    float X, Y, Z, RHW; 
    DWORD Color; 
}; 

정점 버퍼 생성 함수 (즉, 작동하지 않는다)

void StaticMesh::CreateBuffer(CUSTOMVERTEX Vertices[], LPDIRECT3DDEVICE9 d3ddev) 
{ 
    // USING FIXED SIZE WHILE TESTING WITH A SINGLE TRIANGLE. 
    d3ddev->CreateVertexBuffer(3*sizeof(CUSTOMVERTEX), 0, CUSTOMFVF, D3DPOOL_MANAGED, &Buffer, NULL); 

    VOID* p; 

    Buffer->Lock(0, 0, (void**)&p, 0); 
    memcpy(p, Vertices, sizeof(Vertices)); 
    Buffer->Unlock(); 
} 

정점 버퍼 생성 함수 (즉 작업을 수행)

void StaticMesh::CreateBuffer(LPDIRECT3DDEVICE9 d3ddev) 
{ 
    CUSTOMVERTEX vertices[3] = 
    { 
     { 400.0f, 62.5f, 0.5f, 1.0f, D3DCOLOR_XRGB(0, 0, 255), }, 
     { 650.0f, 500.0f, 0.5f, 1.0f, D3DCOLOR_XRGB(0, 255, 0), }, 
     { 150.0f, 500.0f, 0.5f, 1.0f, D3DCOLOR_XRGB(255, 0, 0), }, 
    }; 

    // USING FIXED SIZE WHILE TESTING WITH A SINGLE TRIANGLE. 
    d3ddev->CreateVertexBuffer(3*sizeof(CUSTOMVERTEX), 0, CUSTOMFVF, D3DPOOL_MANAGED, &Buffer, NULL); 

    VOID* p; 

    Buffer->Lock(0, 0, (void**)&p, 0); 
    memcpy(p, Vertices, sizeof(Vertices)); 
    Buffer->Unlock(); 
} 

문제가 무엇인지 모르겠습니다. 어떤 도움을 주셔서 감사합니다. 더 많은 정보가 필요하면 저에게 조언 해주십시오. 함수

void StaticMesh::CreateBuffer(CUSTOMVERTEX Vertices[], LPDIRECT3DDEVICE9 d3ddev) 

답변

1

매개 변수의 정점은 형의 포인터이다. 따라서 함수 내의 sizeof (Vertices)는 포인터의 크기를 반환하며 예상대로 전체 배열의 크기는 반환하지 않습니다.

꼭지점 수를 함수에 다른 매개 변수로 전달하고 이와 같이 함수를 수정하십시오.

void StaticMesh::CreateBuffer(CUSTOMVERTEX Vertices[], int aNumVertices, LPDIRECT3DDEVICE9 d3ddev) 
{ 
    // USING FIXED SIZE WHILE TESTING WITH A SINGLE TRIANGLE. 
    d3ddev->CreateVertexBuffer(aNumVertices*sizeof(CUSTOMVERTEX), 0, CUSTOMFVF, D3DPOOL_MANAGED, &Buffer, NULL); 

    VOID* p; 

    Buffer->Lock(0, 0, (void**)&p, 0); 
    memcpy(p, Vertices, aNumVertices * sizeof(CUSTOMVERTEX)); 
    Buffer->Unlock(); 
} 
+0

감사합니다. 어떻게 기억하지 못했습니까? – zeluisping