Archived

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

Help please, what is wrong

This topic is 5819 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

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
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