Archived

This topic is now archived and is closed to further replies.

Funkodysse

Help please, what is wrong

Recommended Posts

Hello, all i got was a black screen, what is wrong? #define WIN32_LEAN_AND_MEAN // The main windows include file #include <windows.h> #include <d3d8.h> #include <d3dx8.h> //----DIRECT3D GLOBALER------ HWND g_hWnd; // globalt handtag till fönstret. LPDIRECT3D8 g_pD3D=0; // skapa global pekare som ska rymma Direct3D objektet LPDIRECT3DDEVICE8 g_pDevice=0; // skapa global pekare som ska rymma själv grafikgrejen som gör att du kan rita på skärmen. D3DPRESENT_PARAMETERS d3dpp; //device, alla värden för hur skärmen och grafiken ska byggas upp LPDIRECT3DSURFACE8 g_pBackSurface=0; // skapa tom backbuffer (eller skapa en tom yta) LPDIRECT3DVERTEXBUFFER8 g_pVB=0; //deklarera en vertexbuffer som kan innehålla koordinaterna // här nedan i #define har vi valt att vertexstructen ska innehålla // X,Y,Z RHW koordinater samt DIFFUSE COLOR // (| betyder och). #define CUSTOM_ZENVERTEX (D3DFVF_XYZRHW|D3DFVF_DIFFUSE) //nedan,, tillverka en global struct som innehåller //koordinaterna och färgen på 3D objektet. //denna struct hör ihop med vad du väljer i (define CUSTOM_ZENVERTEX) struct g_ZENVERTEX { int x; int y; int z; int rhw; // rhw bör vara där så allt går rätt till DWORD DiffuseColor; // färgen på objektet. }; //-----SLUT PÅ DIRECT3D GLOBALER---- int Init3D() { D3DDISPLAYMODE d3ddm; // skapa en struct som innehåller värden för upplösningen på skärmen etc etc.,structen innehåller: width,height, Refreshrate, Format. D3DPRESENT_PARAMETERS d3dpp; // backbuffer grejer tror jag. g_pD3D=Direct3DCreate8(D3D_SDK_VERSION); // fyll g_pD3D med den senaste versionen av Direct3D g_pD3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT,&d3ddm); // ta reda på vadupplösningen är på skärmen och lägg värdena i d3ddm. ZeroMemory(&d3dpp,sizeof(D3DPRESENT_PARAMETERS) ); //rensa minnet där d3dpp finns. //--------------inställningar för backbuffer d3dpp.BackBufferWidth=800; // skärmupplösning vidden d3dpp.BackBufferHeight=600; // skärmupplösning höjden d3dpp.BackBufferFormat= D3DFMT_R5G6B5; //D3DFMT_R5G6B5; //d3ddm.Format;//D3DFMT_X8R8G8B8; //d3ddm.Format är nuvarande skärmläge. testa annars: //; //32-bit RGB pixel format where 8 bits are reserved for each color d3dpp.BackBufferCount=1; // hur många backbuffers. d3dpp.MultiSampleType=D3DMULTISAMPLE_NONE; // No level of full-scene multisampling is available d3dpp.SwapEffect=D3DSWAPEFFECT_DISCARD; //will be enforced in the debug run time by filling any buffer with noise after it is presented d3dpp.hDeviceWindow=g_hWnd; // fönstret d3dpp.Windowed=FALSE; // inge fönster d3dpp.EnableAutoDepthStencil=TRUE; // så att windows tar hand om depth buffern d3dpp.AutoDepthStencilFormat=D3DFMT_D16; // 16 bit depth buffer d3dpp.FullScreen_RefreshRateInHz=0; // default refreshrate på grafikkortet. d3dpp.FullScreen_PresentationInterval=D3DPRESENT_INTERVAL_IMMEDIATE; // om det är fullscreen, om det är fönster ska det vara noll. d3dpp.Flags=D3DPRESENTFLAG_LOCKABLE_BACKBUFFER; // //skapa Device g_pD3D->CreateDevice(D3DADAPTER_DEFAULT, // default, primära grafikkortet D3DDEVTYPE_HAL, // kommer använda Hardware Acceleration g_hWnd, // handtag till fönstret. D3DCREATE_SOFTWARE_VERTEXPROCESSING, // Vertices kommer bara bli processad i Mjukvaran., testa MIXED istället för SOFTWARE. &d3dpp, // lägg resultatet i d3dpp &g_pDevice); // lägg resultatet i g_pDevice g_pDevice->GetBackBuffer(0,D3DBACKBUFFER_TYPE_MONO, &g_pBackSurface); // fixa en pekare(pBackSurf) som representerar BackBuffern. g_pDevice->Clear(0,0,D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER,D3DCOLOR_XRGB(0,0,0),0.0f,0); //.rensa backbuffern och Z-buffern. g_ZENVERTEX ZenVertices[]= // rita upp triangeln { {150.0f, 50.0f,0.5f, 1.0f, D3DCOLOR_XRGB(255,0,0), }, //X,Y,Z, RHW, COLOR {250.0f, 250.0f, 0.5f, 1.0f, D3DCOLOR_XRGB(255,255,0), }, {50.0f, 250.0f, 0.5f, 1.0f, D3DCOLOR_XRGB(0,0,255), }, }; // skapa en vertexbuffer men storleken 3 gånger större än g_ZENVERTEX (3=antal punkter) // dock får man bara fram Objektet "Vertexbuffer", men inte adressen där den ligger i minnet. // Hur man får fram den ser du nedan. g_pDevice->CreateVertexBuffer(sizeof(g_ZENVERTEX)*3,0,CUSTOM_ZENVERTEX,D3DPOOL_DEFAULT,&g_pVB); // får nedan man fram Adressen till Vertexbuffern, och adressen kommer ligga i pVertices. BYTE* pVertices=0; g_pVB->Lock(0,sizeof(ZenVertices),&pVertices,0); CopyMemory(pVertices,&ZenVertices,sizeof(ZenVertices)); //nu kommer pVertices peka på adressen där vertexbuffern ligger g_pVB->Unlock(); ZeroMemory( &d3dpp, sizeof(d3dpp) ); // rensa minnet return 0; } int Render() { g_pDevice->Clear(0,0,D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER,D3DCOLOR_XRGB(0,0,0),0.0f,0); //.rensa backbuffern. // detta nedan är för att komma åt minnet och skriva direkt dit. // men det behövs förmodligen inte om du inte vill.. //D3DLOCKED_RECT pLockedRect; // rektangelytan i minnet man ska rita på. //g_pBackSurface->LockRect(&pLockedRect,NULL,0); //returnera pekare till ytan //g_pBackSurface->UnlockRect(); g_pDevice->BeginScene(); // börja rita 3D g_pDevice->SetStreamSource(0,g_pVB,sizeof(g_ZENVERTEX)); // göra så att den streamar ut vertexbuffern till kortet. g_pDevice->SetVertexShader(CUSTOM_ZENVERTEX); // g_pDevice->DrawPrimitive(D3DPT_TRIANGLELIST,0,1); //------här lägger du in grafik som ska renderas.---------------------------------------- //------slut på grafikrendering ---------------------------------------------------------------- g_pDevice->EndScene(); // avsluta rita 3D g_pDevice->Present(NULL,NULL,NULL,NULL); // kopiera backbuffern till primära, alltså visa backbuffern. return 0; }

Share this post


Link to post
Share on other sites
Don''t know if this is all that is wrong, but...
The ints should be floats in your structure.

struct g_ZENVERTEX {
int x;
int y;
int z;
int rhw; // rhw bör vara där så allt går rätt till
DWORD DiffuseColor; // färgen på objektet.
};

Bill6

Share this post


Link to post
Share on other sites
See if either of these fix it.

Try disabling back face culling { SetRenderState(D3DRS_CULLMODE,D3DCULL_NONE) }

Don''t create a depth buffer.(remove D3DCLEAR_ZBUFFER from clear also )

Share this post


Link to post
Share on other sites
I noticed you are clearing your zbuffer to 0.0f, try:-
g_pDevice->ClearClear( 0, NULL, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER , 0, 1.0f, 0 );

See if that works, failing that I suggest you compile one of the relevant tutorials, then use that as your base.

Share this post


Link to post
Share on other sites