Ich versuche gerade mit Direct3D ein Dreieck darzustellen!!!!!!!!!11



  • Leider bleibt der bildschirm schwarz

    #define WINDOW_CLASS_NAME "Game Shell Window"
    #define WIN32_LEAN_AND_MEAN  
    
    #include <windows.h>
    #include <d3dx9.h>
    
    HRESULT hr;
    LPDIRECT3D9 D3DGE = NULL;
    LPDIRECT3DDEVICE9 D3DGR = NULL;
    LPDIRECT3DVERTEXBUFFER9 rew = NULL;
    
    #define KEYDOWN(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0)
    #define KEYUP(vk_code)   ((GetAsyncKeyState(vk_code) & 0x8000) ? 0 : 1)
    #define D3D_CUSTOMVERTEX (D3DFVF_XYZRHW|D3DFVF_DIFFUSE)
    struct CustomVertex
    {
    	float x,y,z,rhw;
    	DWORD color;
    };
    CustomVertex Tria[]=
    {
    	{320.0f,150.0f,0.0f,1.0f,D3DCOLOR_XRGB(0,255,0)},
        {400.0f,330.0f,0.0f,1.0f,D3DCOLOR_XRGB(0,255,0)},
        {400.0f,330.0f,0.0f,1.0f,D3DCOLOR_XRGB(0,255,0)}
    
    };
    
    void Init_3D();
    void Render();
    void Init_Scene();
    void Shutdown();
    
    HWND      main_window_handle = NULL; 
    HINSTANCE hinstance_app      = NULL; 
    
    LRESULT CALLBACK WindowProc(HWND hwnd, 
    						    UINT msg, 
                                WPARAM wparam, 
                                LPARAM lparam)
    {
    
        PAINTSTRUCT		ps;		
        HDC				hdc;	
    
        switch(msg)
    	{       
    	    case WM_CREATE: 
            {
    		    return(0);
    		} 
            break;
    
    	    case WM_PAINT: 
    		{		   
       	        hdc = BeginPaint(hwnd,&ps);	           
                EndPaint(hwnd,&ps);          
    		    return(0);
       		}
            break;
    
    	    case WM_DESTROY: 
    		{		   
    		    PostQuitMessage(0);          
    		    return(0);
    		} 
            break;
    
    	    default:
            break;
    
        } 
        return (DefWindowProc(hwnd, msg, wparam, lparam));
    
    } 
    
    int WINAPI WinMain(	HINSTANCE hinstance,
    					HINSTANCE hprevinstance,
    					LPSTR lpcmdline,
    					int ncmdshow)
    {
    
        WNDCLASSEX winclass; 
        HWND	   hwnd;	 
        MSG		   msg;	
    
        winclass.cbSize         = sizeof(WNDCLASSEX);
        winclass.style			= CS_HREDRAW | CS_VREDRAW;
        winclass.lpfnWndProc	= WindowProc;
        winclass.cbClsExtra		= 0;
        winclass.cbWndExtra		= 0;
        winclass.hInstance		= hinstance;
        winclass.hIcon			= LoadIcon(NULL, IDI_APPLICATION);
        winclass.hCursor		= LoadCursor(NULL, IDC_ARROW); 
        winclass.hbrBackground	= (HBRUSH)GetStockObject(BLACK_BRUSH);
        winclass.lpszMenuName	= NULL;
        winclass.lpszClassName	= WINDOW_CLASS_NAME;
        winclass.hIconSm        = LoadIcon(NULL, IDI_APPLICATION);
    
        hinstance_app = hinstance;
    
        if (!RegisterClassEx(&winclass))
    	    return(0);
    
        if (!(hwnd = CreateWindowEx(NULL,                  
                                    WINDOW_CLASS_NAME,     
    						        "My Game Shell", 
    						        WS_POPUP | WS_VISIBLE,
    					 	        0,0,	  
    						        640,480,  
    						        NULL,	  
    						        NULL,	  
    						        hinstance,
    						        NULL)))	
        return(0);
    
        main_window_handle = hwnd;
    
        Init_3D();
    	Init_Scene();
        while(TRUE)
    	{
    	    if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))
    	    { 
    
               if (msg.message == WM_QUIT)
                   break;
    
    	       TranslateMessage(&msg);	       
    	       DispatchMessage(&msg);
    		   if(KEYDOWN(VK_ESCAPE))
    		   {
    			   SendMessage(main_window_handle,WM_CLOSE,0,0);
    		   }
    		   Render();
    	    } 
    
        } 
    
        Shutdown();
    
        return(msg.wParam);
    
    } 
    
    	void Init_3D() 
    { 
        D3DGE = Direct3DCreate9(D3D_SDK_VERSION); 
        D3DPRESENT_PARAMETERS dpp; 
        ZeroMemory(&dpp,sizeof(dpp)); 
        dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; 
        dpp.BackBufferCount = 1; 
        dpp.BackBufferWidth = 640; 
        dpp.BackBufferHeight = 480; 
        dpp.Windowed = TRUE; 
        dpp.BackBufferFormat = D3DFMT_UNKNOWN;//D3DFMT_X8R8G8B8; 
        dpp.hDeviceWindow = main_window_handle; 
        hr=D3DGE->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,main_window_handle,D3DCREATE_SOFTWARE_VERTEXPROCESSING,&dpp,&D3DGR); 
        if(hr==D3DERR_INVALIDCALL)        SendMessage(main_window_handle,WM_CLOSE,0,0);//D3DERR_INVALIDCALL D3DERR_NOTAVAILABLE D3DERR_OUTOFVIDEOMEMORY 
    
    }
    
    void Render()
    {
    	D3DGR->Clear(0,NULL,D3DCLEAR_TARGET,D3DCOLOR_XRGB(0,0,0),1.0f,0);
    	D3DGR->BeginScene();
    	D3DGR->SetStreamSource(0,rew,0,sizeof(CustomVertex));
    	D3DGR->DrawPrimitive(D3DPT_TRIANGLELIST,0,1);
    	D3DGR->EndScene();
    	D3DGR->Present(NULL,NULL,NULL,NULL);
    }
    void Init_Scene()
    {
    	void* VertexBufferStart;
    
    	D3DGR->CreateVertexBuffer(3*sizeof(Tria),D3DUSAGE_WRITEONLY,D3D_CUSTOMVERTEX,D3DPOOL_MANAGED,&rew,NULL);
    	rew->Lock(0,0,&VertexBufferStart,0);
    	memcpy(VertexBufferStart,Tria,sizeof(Tria));
    	rew->Unlock();
    	D3DGR->SetFVF(D3D_CUSTOMVERTEX);
    }
    void Shutdown()
    {
    
    }
    


  • Ja, hast du uns nun 6 mal mitgeteilt.



  • Hör mal, Dir wurde in den anderen Threads bereits geantwortet, wieso gehst Du auf die Antworten nicht ein? Jedesmal nen neuen Thread aufzumachen wenn Du die Antwort nicht verstehst hilft auch nix...
    rya.



  • Mit "!!!!!!!!!11" endender Threadtitel, unbrauchbare Fehlerbeschreibung, Code mit über 200 Zeilen, mehrfache Threads, keine Eigeninitiative. Ziemlich erbärmlicher Trollversuch. 👎



  • Oh, es hat die Code-Tags gefunden.



  • Nexus schrieb:

    Mit "!!!!!!!!!11" endender Threadtitel, unbrauchbare Fehlerbeschreibung, Code mit über 200 Zeilen, mehrfache Threads, keine Eigeninitiative. Ziemlich erbärmlicher Trollversuch. 👎

    Ich befürchte, dass das gar kein Troll ist. Eher einer, der in 2 Wochen im Projekteforum Leute für sein MMORPG sucht...


  • Mod

    was auch immer es ist, der thread verkommt durch void antworten zu nem troll thread. ich will nicht wirklich sowas schliessen muessen um euch vor euch selber zu beschuetzen.
    also bitte ab hier entweder antworten oder wenigstens kein bier ins feuer giessen.



  • this->that schrieb:

    Nexus schrieb:

    Mit "!!!!!!!!!11" endender Threadtitel, unbrauchbare Fehlerbeschreibung, Code mit über 200 Zeilen, mehrfache Threads, keine Eigeninitiative. Ziemlich erbärmlicher Trollversuch. 👎

    Ich befürchte, dass das gar kein Troll ist.

    Dem schließe ich mich an. Der OP hat anscheinend wirklich ein paar Probleme. Vorurteile bringen nichts, solange man nicht versucht ihm zu helfen. Ihr habt auch mal klein angefangen.
    Leider kenne ich mich mit DX überhaupt nicht aus und habe nicht vor mich dort einzuarbeiten.

    @OP Hast du dir schon mal die NeHe Tutorials angeschaut? Ist zwar OpenGL, aber daür ein sehr guter Einstieg.
    English (Orginal): http://nehe.gamedev.net/
    Deutsch: http://www.joachimrohde.com/cms/xoops/modules/articles/index.php?cat_id=1

    zu DirectX:
    http://www.codeworx.org/directx_tuts.php
    http://www.jammni.de/php/tutorials.php?tutorial=2
    http://www.tutorials.de/forum/c-c/343473-tutorial-terrain-directx-9-und-c-teil-1-a.html
    http://www.directxtutorial.com/Tutorial9/A-Win32/dx9A.aspx

    Gruß,
    Thomas



  • Versuch mal mein Testbeispiel, wenn das nicht läuft(ein schönes grünes Dreieck!), liegt es an Deiner Umgebung...Dann wirst Du den Adapter abfragen und Deine Werte entsprechend anpassen müssen:
    z.B.: D3DDISPLAYMODE d3ddm;
    if(g_bFullScreen == FALSE)
    D3DGE->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &d3ddm);

    Viel einfacher gehts nimmer, Du kannst nur noch ein paar Fehler mehr abfangen und auswerten. Ein Beispiel habe ich auf die schnelle hineinkopiert, siehe Init_3D()

    D3D_Header.h

    void Init_3D();
    void Render();
    void Init_Scene();
    void End_All();
    
    LPDIRECT3D9 D3DGE = NULL;
    LPDIRECT3DDEVICE9 D3DGR = NULL;
    LPDIRECT3DVERTEXBUFFER9 rew = NULL;
    
    HWND main_window_handle = NULL;
    HINSTANCE hinstance_app = NULL;
    
    HRESULT hr;
    

    D3DMain.cpp

    #define WINDOW_CLASS_NAME "Game Shell Window"
    #define WIN32_LEAN_AND_MEAN
    
    #include <windows.h>
    #include <d3dx9.h>
    #include "D3D_Header.h"
    
    #define KEYDOWN(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0)
    #define KEYUP(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 0 : 1)
    #define D3D_CUSTOMVERTEX (D3DFVF_XYZRHW|D3DFVF_DIFFUSE)
    
    struct CustomVertex
    {
    
    	float x,y,z,rhw;
    
    	DWORD color;
    };
    
    CustomVertex Tria[]=
    {
    {200.0f,150.0f,5.0f,1.0f,D3DCOLOR_XRGB(100,255,0)},
    {400.0f,300.0f,0.0f,1.0f,D3DCOLOR_XRGB(0,255,100)},
    {60.0f,400.0f,0.0f,1.0f,D3DCOLOR_XRGB(0,255,250)},
    
    };
    
    LRESULT CALLBACK WindowProc(HWND hwnd,UINT msg,WPARAM wparam,LPARAM lparam)
    {
    
    PAINTSTRUCT ps;
    HDC hdc;
    
    switch(msg)
    {
    	case WM_CREATE:
    	{
    		return(0);
    	}
    	break;
    
    	case WM_PAINT:
    	{
    		hdc = BeginPaint(hwnd,&ps);
    		EndPaint(hwnd,&ps);
    		return(0);
    	}
    	break;
    
    	case WM_DESTROY:
    	{
    		PostQuitMessage(0);
    		return(0);
    	}
    	break;
    
    	default:
    	break;
    
    }
    return (DefWindowProc(hwnd, msg, wparam, lparam));
    
    }
    
    int WINAPI WinMain( HINSTANCE hinstance,HINSTANCE hprevinstance,LPSTR lpcmdline,int ncmdshow)
    {
    
    WNDCLASSEX winclass;
    HWND hwnd;
    MSG msg;
    
    winclass.cbSize = sizeof(WNDCLASSEX);
    winclass.style = CS_HREDRAW | CS_VREDRAW;
    winclass.lpfnWndProc = WindowProc;
    winclass.cbClsExtra = 0;
    winclass.cbWndExtra = 0;
    winclass.hInstance = hinstance;
    winclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    winclass.hCursor = LoadCursor(NULL, IDC_ARROW);
    winclass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
    winclass.lpszMenuName = NULL;
    winclass.lpszClassName = WINDOW_CLASS_NAME;
    winclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
    
    hinstance_app = hinstance;
    
    if (!RegisterClassEx(&winclass))
    return(0);
    
    if (!(hwnd = CreateWindowEx(NULL,WINDOW_CLASS_NAME,"My Game Shell",WS_POPUP | WS_VISIBLE,0,0,800,600,NULL,NULL,hinstance,NULL)))
    	return(0);
    
    main_window_handle = hwnd;
    
    Init_3D();
    Init_Scene();
    while(TRUE)
    	{
    	if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))
    	{
    
    	if (msg.message == WM_QUIT)
    	break;
    
    	TranslateMessage(&msg);
    	DispatchMessage(&msg);
    	if(KEYDOWN(VK_ESCAPE))
    	{
    
    	SendMessage(main_window_handle,WM_CLOSE,0,0);
    
    	}
    	Render();
    	}
    
    	}
    	End_All();
    
    return(msg.wParam);
    
    }
    
    void Init_3D()
    {
    	D3DGE = Direct3DCreate9(D3D_SDK_VERSION);
    	D3DPRESENT_PARAMETERS dpp;
    	ZeroMemory(&dpp,sizeof(dpp));
    	dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
    	dpp.BackBufferCount = 1;
    	dpp.BackBufferWidth = 800;
    	dpp.BackBufferHeight = 600;
    	dpp.Windowed = TRUE;
    	dpp.BackBufferFormat = D3DFMT_UNKNOWN;//D3DFMT_X8R8G8B8;
    	dpp.hDeviceWindow = main_window_handle;
    	hr=D3DGE->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,main_window_handle,D3DCREATE_SOFTWARE_VERTEXPROCESSING,&dpp,&D3DGR);
    	if(hr==D3DERR_INVALIDCALL)		SendMessage(main_window_handle,WM_CLOSE,0,0);//D3DERR_INVALIDCALL D3DERR_NOTAVAILABLE D3DERR_OUTOFVIDEOMEMORY
    	if(hr==D3DERR_NOTAVAILABLE)	SendMessage(main_window_handle,WM_CLOSE,0,0);
    	if(hr==D3DERR_OUTOFVIDEOMEMORY)	SendMessage(main_window_handle,WM_CLOSE,0,0);
    	if(hr==D3DERR_DEVICELOST)	SendMessage(main_window_handle,WM_CLOSE,0,0);
    }
    
    void Render()
    {
    	D3DGR->Clear(0,NULL,D3DCLEAR_TARGET,D3DCOLOR_XRGB(0,0,0),1.0f,0);
    	D3DGR->BeginScene();
    	D3DGR->SetStreamSource(0,rew,0,sizeof(CustomVertex));
    	D3DGR->DrawPrimitive(D3DPT_TRIANGLELIST,0,1);
    	D3DGR->EndScene();
    	D3DGR->Present(NULL,NULL,NULL,NULL);
    
    }
    void Init_Scene()
    {
    	void* VertexBufferStart;
    	RECT screenRect;
    	GetClientRect(main_window_handle,&screenRect);
    	D3DGR->CreateVertexBuffer(3*sizeof(Tria),D3DUSAGE_WRITEONLY,D3D_CUSTOMVERTEX,D3DPOOL_MANAGED,&rew,NULL);
    	rew->Lock(0,0,&VertexBufferStart,0);
    	memcpy(VertexBufferStart,Tria,sizeof(Tria));
    	rew->Unlock();
    	D3DGR->SetFVF(D3D_CUSTOMVERTEX);
    }
    
    void End_All()
    {
    	if(D3DGR)
    	D3DGR->Release();
    	if(D3DGE)
    	D3DGE->Release();
    }
    

Anmelden zum Antworten