Jump to content

View more

Image of the Day

#ld38 #screenshotsaturday Mimosa Fizz action gif #2 https://t.co/TUzdppvfUL
IOTD | Top Screenshots

The latest, straight to your Inbox.

Subscribe to GameDev.net Direct to receive the latest updates and exclusive content.


Sign up now

Gaps/Holes/Pixelation when rendering triangles

4: Adsense

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   

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



#2 Steve_Segreto   Members   

2060
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   

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   

50656
Like
5Likes
Like

Posted 25 November 2012 - 10:19 PM

*
POPULAR

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   

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.