Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Мультимедия, OpenGL/DirectX > Direct X


Автор: Dray 25.3.2005, 14:01
Visual C++ 6 DirectX9

Требуется сделать обычный куб.
Делаю так:

Код

HRESULT InitVB()
{
    MYVERTEX vers[]={
        {-1, 1, 0, 0xFF0000FF},
        { 0, 0, 0, 0xFF0000FF},
        {-1, 0, 0, 0xFF0000FF},
        
        {-1, 1, 0, 0xFF0000FF},    
        { 0, 1, 0, 0xFF0000FF},
        { 0, 0, 0, 0xFF0000FF},
        
        { 0, 1, 0, 0xFF00FF00},
        { 0, 0,-1, 0xFF00FF00},
        { 0, 0, 0, 0xFF00FF00},
        
        { 0, 1, 0, 0xFF00FF00},
        { 0, 1,-1, 0xFF00FF00},
        { 0, 0,-1, 0xFF00FF00},
        
        {-1, 0,-1, 0xFFFF0000},
        { 0, 0,-1, 0xFFFF0000},
        {-1, 1,-1, 0xFFFF0000},
        
        { 0, 1,-1, 0xFFFF0000},
        {-1, 1,-1, 0xFFFF0000},
        { 0, 0,-1, 0xFFFF0000},
        
        {-1, 1, 0, 0xFF00FFFF},
        {-1, 0, 0, 0xFF00FFFF},
        {-1, 0,-1, 0xFF00FFFF},
        
        {-1, 1,-1, 0xFF00FFFF},
        {-1, 1, 0, 0xFF00FFFF},
        {-1, 0,-1, 0xFF00FFFF},
        
        {-1, 1, 0, 0xFFFF00FF},
        {-1, 1,-1, 0xFFFF00FF},
        { 0, 1, 0, 0xFFFF00FF},
        
        {-1, 1,-1, 0xFFFF00FF},
        { 0, 1,-1, 0xFFFF00FF},
        { 0, 1, 0, 0xFFFF00FF},
        
        {-1, 0, 0, 0xFFFFFF00},
        { 0, 0, 0, 0xFFFFFF00},
        { 0, 0,-1, 0xFFFFFF00},
        
        {-1, 0, 0, 0xFFFFFF00},
        { 0, 0,-1, 0xFFFFFF00},
        {-1, 0,-1, 0xFFFFFF00},
    };
    p_Dev->CreateVertexBuffer(3*sizeof(MYVERTEX), 0, D3DFVF_XYZ|D3DFVF_DIFFUSE, 
        D3DPOOL_DEFAULT, &pVB, NULL);
    
    VOID *pVer;
    pVB->Lock (0, sizeof (vers), (void **) &pVer, 0);
    memcpy (pVer, vers, sizeof (vers));
    pVB->Unlock();
    return S_OK;
};


Отрисовка:

Код

VOID Render()
{
    p_Dev->Clear (0, 0, D3DCLEAR_TARGET, D3DCOLOR_XRGB(255, 255, 255), 1, 0);
    p_Dev->BeginScene();

    SetUpMat();
    //Otrisovka
    p_Dev->SetStreamSource(0, pVB, 0, sizeof (MYVERTEX));
    p_Dev->SetFVF(D3DFVF_XYZ|D3DFVF_DIFFUSE);

    p_Dev->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 12);

    p_Dev->EndScene();
    p_Dev->Present(0,0,0,0);
};


При запуске возникает Runtime Error. Ошибка видимо где-то здесь:

{-1, 0, 0, 0xFFFFFF00},
{ 0, 0, 0, 0xFFFFFF00},
{ 0, 0,-1, 0xFFFFFF00},

{-1, 0, 0, 0xFFFFFF00},
{ 0, 0,-1, 0xFFFFFF00},
{-1, 0,-1, 0xFFFFFF00},

т. к. Если закомментировать, то все нормально.
Я непойму, что здесь может быть не правильно. Помогите пожалуйста разобраться. smile

Автор: Dray 29.3.2005, 12:25
Все разобрался. smile Ошибка сдесь:
Код

p_Dev->CreateVertexBuffer(3*sizeof(MYVERTEX), 0, D3DFVF_XYZ|D3DFVF_DIFFUSE, 
        D3DPOOL_DEFAULT, &pVB, NULL);

А именно 3*sizeof(MYVERTEX). Надо умножать не на 3, а на 3 * на колличество треугольников. В данном случае на 36.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)