Jump to content

  • Log In with Google      Sign In   
  • Create Account

We're offering banner ads on our site from just $5!

1. Details HERE. 2. GDNet+ Subscriptions HERE. 3. Ad upload HERE.


skrug80sc

Member Since 25 Nov 2012
Offline Last Active Nov 25 2012 11:15 PM

Topics I've Started

Gaps/Holes/Pixelation when rendering triangles

25 November 2012 - 08:10 PM

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:
Posted Image
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
#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;
}

PARTNERS