• Advertisement
Sign in to follow this  

Gaps/Holes/Pixelation when rendering triangles

This topic is 1881 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

I'm trying to learn how to render triangles with the DrawIndexedPrimitive function in DirectX9c.
I currently have triangles rendering but they don't seem to be rendering just quite right.
Here is a picture to show you what I mean:
[img]http://i1208.photobucket.com/albums/cc372/skrug80sc/tri_wire.png[/img]
See the pexelation? What am I doing wrong?
I've attached the relative files from my project to allow further investigation:

Here is the main code:

WinMain.cpp
[CODE]
#include "WINlib.h"
#include "GFXlib.h"
int WINAPI WinMain(HINSTANCE cI, HINSTANCE pI, LPSTR cmd, int shw)
{
//instantiate window/directX9
WINPUT::Window window;
GFX::Graphics graphics(window.GetHandle());

//Index/Vertex data
typedef WORD Index;
struct Vertex { D3DXVECTOR3 pos; D3DCOLOR color; };
D3DVERTEXELEMENT9 declaration[3] = {
{ 0, 0, D3DDECLTYPE_FLOAT3, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_POSITION, 0 },
{ 0, 12, D3DDECLTYPE_D3DCOLOR, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_COLOR, 0 },
D3DDECL_END()
};

//Bulid triangle
Vertex vertices[] = {
{ D3DXVECTOR3(0, 0, 0), D3DCOLOR_XRGB(255, 0, 0) },
{ D3DXVECTOR3(0, 1, 0), D3DCOLOR_XRGB(0, 255, 0) },
{ D3DXVECTOR3(1, 0, 0), D3DCOLOR_XRGB(0, 0, 255) }
};
Index indices[] = {0, 1, 2};

//Build Vertex Declaration and Index/Vertex buffers
IDirect3DDevice9* dev = graphics.GetDevice();
IDirect3DVertexDeclaration9* dec = NULL;
IDirect3DVertexBuffer9* vb = NULL;
IDirect3DIndexBuffer9* ib = NULL;

dev->CreateVertexDeclaration(declaration, &dec);
dev->CreateVertexBuffer(
sizeof(Vertex) * 3,
D3DUSAGE_WRITEONLY,
0,
D3DPOOL_MANAGED,
&vb,
NULL);
dev->CreateIndexBuffer(
sizeof(Index) * 3,
D3DUSAGE_WRITEONLY,
D3DFMT_INDEX16,
D3DPOOL_DEFAULT,
&ib,
NULL);

//copy triangle data to Vertex/Index buffers
Vertex* v = NULL;
vb->Lock(0, 0, (void**)&v, 0);
memcpy(v, vertices, sizeof(Vertex) * 3);
vb->Unlock();

Index* i = NULL;
ib->Lock(0, 0, (void**)&i, 0);
memcpy(i, indices, sizeof(Index) * 3);
ib->Unlock();

//set rendering properties
dev->SetRenderState(D3DRS_FILLMODE, D3DFILL_WIREFRAME);
//dev->SetRenderState(D3DRS_FILLMODE, D3DFILL_SOLID);
dev->SetRenderState(D3DRS_LIGHTING, FALSE);
dev->SetVertexDeclaration(dec);
dev->SetStreamSource(0, vb, 0, sizeof(Vertex));
dev->SetIndices(ib);

//render loop
while(!GetAsyncKeyState(VK_ESCAPE))
{
window.Update();
dev->Clear(0, 0, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(32, 32, 32), 1.0f, 0);
dev->BeginScene();
dev->DrawIndexedPrimitive(D3DPT_TRIANGLELIST,0,0,3,0,1);
dev->EndScene();
dev->Present(0, 0, 0, 0);
}

//cleanup
vb->Release();
ib->Release();
dec->Release();

return 0;
}
[/CODE]

Share this post


Link to post
Share on other sites
Advertisement
Enabling the maximum multi-sampling my video card supports helped a little, but not much.
I've rendered models from .X files in DirextX9 before and using
device->SetRenderState(D3DRS_FILLMODE, D3DFILL_WIREFRAME);
has never given me this issue before.

Share this post


Link to post
Share on other sites
Thanks Hodgman, that was exactly the issue. I made a ClientResize function for my Window class but copy pasted it from an older code file of mine that was incorrect. The copy pasta did it to me again >< Edited by skrug80sc

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement