2012-06-16 4 views
0

Сегодня я начал работать с DirectX (D3D9), все прошло нормально, пока я не создал класс Static-mesh. Этот класс содержит методы генерации буфера, выделения и освобождения буфера.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(); 
} 

Я не понимаю, в чем проблема. Спасибо за любую помощь, и если вам нужна дополнительная информация, пожалуйста, сообщите мне.

ответ

1

Вершины параметров вашей функции

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

является указателем типа. Таким образом, 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

 Смежные вопросы

  • Нет связанных вопросов^_^