Проблема создания системы координат xyz с DX UT DirectX9

Здравствуйте, я на самом деле пытаюсь создать систему координат xyz с помощью DX UT, но линии не отображаются на экране.

Я использую следующую структуру для хранения данных вершин.

          // Struct for vertex
struct s_custom_vertex
{
    // Position
    FLOAT x, y, z, rhw;

    // Current color
    DWORD color;

public:

    // Default constructor
    s_custom_vertex() = default;

    // Constructor that sets value
    s_custom_vertex(FLOAT _x,FLOAT _y, FLOAT _z,FLOAT _rhw,DWORD _color):
        x(_x),y(_y),z(_z),rhw(_rhw),color(_color){}
};

extern LPDIRECT3DVERTEXBUFFER9 g_pVB;

И создал еще один класс, который содержит указатель на массив этой структуры. ЗАГОЛОВОК ФАЙЛА

      using Custom_vertex_arr = std::array< s_custom_vertex*, MAX_LINE_COUNT>;

// Class that manages the graph
class XYZ_pos_graph
{
private:

    // My custom vertex array
    Custom_vertex_arr m_custom_vertex_arr;

public:
    
    // Constructor
    XYZ_pos_graph();

    // Destructor
    ~XYZ_pos_graph();

public:

    // Get m_custom_vertex_arr
    Custom_vertex_arr Get_custom_vertex_arr();

    // Initialize values
    void Init_values();
};

CPP ФАЙЛ

      XYZ_pos_graph::XYZ_pos_graph()
{
    Init_values();
}

XYZ_pos_graph::~XYZ_pos_graph()
{
    // Exception
    if (m_custom_vertex_arr.data())
    {
        for (size_t i = 0; i < MAX_LINE_COUNT; i++)
        {
            delete m_custom_vertex_arr[i];
        }
    }
}


Custom_vertex_arr XYZ_pos_graph::Get_custom_vertex_arr()
{
    return m_custom_vertex_arr;
}

void XYZ_pos_graph::Init_values()
{
    // Red color line, pos X
    m_custom_vertex_arr[0] = new s_custom_vertex(-100.f, 0.f, 0.f, 1.f, 0xffff0000);

    // Green color line, pos Y
    m_custom_vertex_arr[1] = new s_custom_vertex(0.f, 100.f, 0.f, 1.f, 0xff0000ff);

    // Blue color line, pos Z
    m_custom_vertex_arr[2] = new s_custom_vertex(0.f, 0.f, 100.f, 1.f, 0xff00ff00);
}

И DX UT

      HRESULT CALLBACK OnD3D9CreateDevice( IDirect3DDevice9* pd3dDevice, const D3DSURFACE_DESC* pBackBufferSurfaceDesc,
                                     void* pUserContext )
{
    // Create vertex buffer
    if (FAILED(pd3dDevice->CreateVertexBuffer(MAX_LINE_COUNT * sizeof(XYZ_pos_graph),
        0, D3DFVF_CUSTOMVERTEX,
        D3DPOOL_DEFAULT, &g_pVB, NULL)))
        return E_FAIL;

    // Instantiate pointer to XYZ_pos_graph
    XYZ_pos_graph* pos_graph_ptr = new XYZ_pos_graph();

    // Lock, set values then unlock
    VOID* vertices_ptr;
    if (FAILED(g_pVB->Lock(0, sizeof(pos_graph_ptr->Get_custom_vertex_arr()), static_cast<void**>(&vertices_ptr), 0)))
        return E_FAIL;

    memcpy(vertices_ptr, static_cast<VOID*>(pos_graph_ptr->Get_custom_vertex_arr().data()), sizeof(pos_graph_ptr->Get_custom_vertex_arr()));

    g_pVB->Unlock();
    delete pos_graph_ptr;
    return S_OK;
}

void CALLBACK OnD3D9FrameRender( IDirect3DDevice9* pd3dDevice, double fTime, float fElapsedTime, void* pUserContext )
{
    HRESULT hr;

    // Clear the render target and the zbuffer 
    V( pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_ARGB( 0, 255, 255, 255 ), 1.0f, 0 ) );

    // Render the scene
    if( SUCCEEDED( pd3dDevice->BeginScene() ) )
    {
        pd3dDevice->SetStreamSource(0, g_pVB, 0, sizeof(XYZ_pos_graph));
        pd3dDevice->SetFVF(D3DFVF_CUSTOMVERTEX);
        pd3dDevice->DrawPrimitive(D3DPRIMITIVETYPE::D3DPT_LINESTRIP, 0, MAX_LINE_COUNT);
        V( pd3dDevice->EndScene() );
    }
}

Что могло быть не так? Заранее спасибо.

0 ответов

Другие вопросы по тегам