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.


Gaps/Holes/Pixelation when rendering triangles


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
4 replies to this topic

#1 skrug80sc   Members   -  Reputation: 106

Like
0Likes
Like

Posted 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;
}

Attached Files



Sponsor:

#2 Steve_Segreto   Crossbones+   -  Reputation: 1542

Like
0Likes
Like

Posted 25 November 2012 - 08:32 PM

Try enabling multi-sampling in your DirectX device creation code. D3DMULTISAMPLE_2_SAMPLES for instance.

#3 skrug80sc   Members   -  Reputation: 106

Like
0Likes
Like

Posted 25 November 2012 - 09:55 PM

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.

#4 Hodgman   Moderators   -  Reputation: 31153

Like
5Likes
Like

Posted 25 November 2012 - 10:19 PM

That is a strange artefact. My first guess is that you're creating a back-buffer that's larger than your window's client-area.

#5 skrug80sc   Members   -  Reputation: 106

Like
1Likes
Like

Posted 25 November 2012 - 10:47 PM

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, 25 November 2012 - 11:15 PM.





Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS