Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    553

    [Visual C++]Errore nell'utilizzo delle DirectX

    Premetto che sono un neofita nell'utilizzo di Visual C++ e delle DirectX.
    Ho il seguente codice:



    //-----------------------------------------------------------------------
    #include <windows.h>
    #include <d3d8.h>

    //---------------------------------------------------------------
    // Puntatori globali. In questi puntatori metteremo gli indirizzi
    // dell'oggetto Direct3D e della 3dDevice

    LPDIRECT3D8 g_pD3D = NULL;
    LPDIRECT3DDEVICE8 g_pd3dDevice = NULL;

    // buffer per i vertici del nostro oggetto
    LPDIRECT3DVERTEXBUFFER8 g_pVB = NULL;

    // descrizione del singolo vertice - 3 coordinate ed un colore
    #define D3DFVF_MIOVERTICE (D3DFVF_XYZ | D3DFVF_DIFFUSE)

    // struttura per un singolo vertice - 3 coordinate ed un colore
    struct MIOVERTICE
    {
    FLOAT x, y, z; // Posizione 3D del vertice
    DWORD color; // Colore del vertice
    };

    // definizione dei colori principali
    #define COLORE_ROSSO 0xFFFF0000
    #define COLORE_VERDE 0xFF00FF00
    #define COLORE_BLU 0xFF0000FF
    #define COLORE_BIANCO 0xFFFFFFFF
    #define COLORE_NERO 0xFF000000

    // posizioni e colori dei vertici
    MIOVERTICE Vertices[] =
    {
    { -1.0f,-1.0f, 0.0f, COLORE_ROSSO, },
    { 1.0f,-1.0f, 0.0f, COLORE_BLU, },
    { 0.0f, 1.0f, 0.0f, COLORE_BIANCO, },
    };








    // --------------- Start3D() -----------------
    // Inizializza la libreria Direct3D

    HRESULT InitD3D(HWND hWnd )
    {

    // Crea l'oggetto Direct3D
    if ( (g_pD3D = Direct3DCreate8( D3D_SDK_VERSION)) == NULL)
    return E_FAIL;

    // Trova il modo video
    D3DDISPLAYMODE d3ddm;
    if ( FAILED( g_pD3D->GetAdapterDisplayMode( D3DADAPTER_DEFAULT, &d3ddm)))
    return E_FAIL;


    // Crea il 3dDevice, usando un sacco di parametri di default. Vedi la lezione 4.
    D3DPRESENT_PARAMETERS d3dpp;
    ZeroMemory( &d3dpp, sizeof(d3dpp) );
    d3dpp.Windowed = TRUE;
    d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
    d3dpp.BackBufferFormat = d3ddm.Format;

    if ( FAILED( g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &g_pd3dDevice)))
    return E_FAIL;

    // Lezione 6: crea il vertex buffer
    if ( FAILED( g_pd3dDevice->CreateVertexBuffer( sizeof(MIOVERTICE) *3, 0, D3DFVF_MIOVERTICE, D3DPOOL_DEFAULT, &g_pVB )))
    return E_FAIL;

    // Turn off culling, so we see the front and back of the triangle
    g_pd3dDevice->SetRenderState( D3DRS_CULLMODE, D3DCULL_NONE );

    // Turn off D3D lighting, since we are providing our own vertex colors
    g_pd3dDevice->SetRenderState( D3DRS_LIGHTING, FALSE );


    return S_OK;
    }




    //------------- CleanUp() ----------
    // Rilascia tutti gli oggetti creati. E' un passo fondamentale
    // per un'uscita "pulita" del programma.

    void CleanUp()
    {
    if ( g_pVB != NULL)
    g_pVB->Release();

    if( g_pd3dDevice)
    g_pd3dDevice->Release();

    if( g_pD3D)
    g_pD3D->Release();
    }




    //------------- Render() ---------------
    // Disegna la scena.

    void Render()
    {
    static int color=0;

    // Assicurati che il 3dDevice esista
    if ( g_pd3dDevice == NULL)
    return;

    // Pulisce il backbuffer con un colore noto
    g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0, color), 1.0f, 0 );

    // Inizia la scena
    g_pd3dDevice->BeginScene();


    // Lezione 6: Deforma il triangolo
    Vertices[0].x *= 0.9999f;
    Vertices[1].x *= 0.9999f;
    Vertices[2].y *= 0.9999f;

    // Lezione 6: riempi il vertex buffer
    VOID* pointer;
    if( FAILED( g_pVB->Lock( 0, sizeof(Vertices), (BYTE**)&pointer, 0 )))
    return;
    memcpy( pointer, Vertices, sizeof(Vertices) );
    g_pVB->Unlock();

    // Lezione 6: Disegna un oggetto
    g_pd3dDevice->SetStreamSource( 0, g_pVB, sizeof(MIOVERTICE) );
    g_pd3dDevice->SetVertexShader( D3DFVF_MIOVERTICE );
    g_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLELIST, 0, 1 );

    // Finisce la scena
    g_pd3dDevice->EndScene();

    // Mostra la scena (il backbuffer) sullo schermo
    g_pd3dDevice->Present( NULL, NULL, NULL, NULL );

    // Cambia il colore per dare un po' di vita
    color = (color+1) % 256;
    }


    //----------- MsgProc() ---------------
    // Procedura dei messaggi

    LRESULT WINAPI MsgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )
    {
    switch( msg )
    {
    case WM_DESTROY:
    PostQuitMessage( 0 );
    return 0;
    }

    return DefWindowProc( hWnd, msg, wParam, lParam );
    }




    //-------- WinMain() ------------------
    // Funzione principale di Windows, tutta roba molto comune...

    INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR, INT )
    {
    // Registra la classe della finestra.
    WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, 0L, 0L,
    GetModuleHandle(NULL), NULL, NULL, NULL, NULL,
    "D3D", NULL };
    RegisterClassEx( &wc );

    // Crea la finestra
    HWND hWnd = CreateWindow( "D3D", "Corso di DirecX: lezione 6",
    WS_OVERLAPPEDWINDOW, 100, 100, 300, 300,
    GetDesktopWindow(), NULL, wc.hInstance, NULL );

    // Fai partire il Direct3d
    if( SUCCEEDED( InitD3D( hWnd)))
    {
    // Mostra la finestra
    ShowWindow( hWnd, SW_SHOWDEFAULT );
    UpdateWindow( hWnd );

    // Loop dei messaggi. Questo è speciale per i nostri scopi
    // (Vedi la lezione 4).
    MSG msg;
    ZeroMemory( &msg, sizeof(msg) );
    while( msg.message!=WM_QUIT )
    {
    if( PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) )
    {
    TranslateMessage( &msg );
    DispatchMessage( &msg );
    }
    else
    Render();
    }
    }

    // Ripulisci il tutto ed esci
    CleanUp();
    UnregisterClass( "D3D", wc.hInstance );
    return 0;
    }


    Ottengo un errore in fase di compilazione.....non so dirvi di più


    tulipan

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Che vuol dire ? Non sai riportare quale errore hai ? Devi solamente fare copia e incolla ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    553
    no è che visual c++ non mi dice niente sull'errore...non so forse dipende da come è configurato! boh non so .....è la prima volta che lo uso


    tulipan

  4. #4
    Nel primo messaggio hai detto che ottieni un errore di compilazione, dunque Visual C++ ti ha segnalato un problema, Oregon ti ha giustamente chiesto di riportare il testo dell'errore. Altrimenti dovremmo cercare di riprodurre la situazione (non è detto che ci si riesca) o analizzare riga per riga il codice, tra l'altro avresti dovuto postarlo in un blocco [CODE]. VVoVe:
    "Se riesci a passare un pomeriggio assolutamente inutile in modo assolutamente inutile, hai imparato a vivere."

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da tulipan
    no è che visual c++ non mi dice niente sull'errore...
    E come fai a sapere che c'e' un errore di compilazione?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    553
    il compilatore mi segnale questo:
    Lezione4.exe - 1 error(s), 0 warning(s)


    ma non mi dice niente su quale riga l'errore è e di che errore si tratta.


    non è un problema mio ma del compilatore


    tulipan

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Guarda che e' praticamente impossibile ... se scorri in alto la finestra dove c'e' quella informazione, ci dovrebbe essere anche l'errore ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    553
    hai ragione ....eccolo:

    e:\programmi\microsoft visual studio\myprojects\lezione4\lezione4.cpp(8) : fatal error C1083: Cannot open include file: 'd3d8.h': No such file or directory


    io però ho installato directX correttamente


    tulipan

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Hai visto che l'errore c'era?

    Devi indicare la directory dove sono installati gli include in Visual Studio.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    553
    e come si fa?


    tulipan

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.