Jump to content
  • Advertisement
Sign in to follow this  
Focusrite

DirectX polygons

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

Hey Gamedev!

I need to render 2d polygons and thus came up with this solution:


if(FAILED(gd3dDevice->CreateVertexBuffer(sizeof(RectVertex) *32, D3DUSAGE_DYNAMIC, 0, D3DPOOL_DEFAULT, &mVB_Rect, NULL)))
MessageBox(0, "Error creating RectVertex buffer", 0, 0); //Slightly misleading name, it's a vertexdefiniton containing just position and color

//----------

void Graphics::drawPolygon(cPolygon* shape, D3DCOLOR color, bool filled)
{
if(shape->requireTriangulation())
shape->triangulate(); //Triangulates the polygon if not already done - stores in "shape->triangles"

// Set vertex declaration and stream source
gd3dDevice->SetVertexDeclaration(RectVertex::Decl);
gd3dDevice->SetStreamSource(0, mVB_Rect, 0, sizeof(RectVertex));

// Lock and set the vertices position and texture coordinates
RectVertex *vertices = 0;
mVB_texture->Lock(0, 0, (void**)&vertices, 0);

for(int i = 0; i<shape->getTriangles().size()/3; i++)
{
vertices[i*3+0].color = color;
vertices[i*3+0].pos.x = shape->getTriangles()[i*3+0].x + shape->getPos().x; //Due to triangles beeing in local coordinates
vertices[i*3+0].pos.y = shape->getTriangles()[i*3+0].y + shape->getPos().y;
vertices[i*3+0].pos.z = 0.0f;

vertices[i*3+1].color = color;
vertices[i*3+1].pos.x = shape->getTriangles()[i*3+1].x + shape->getPos().x;
vertices[i*3+1].pos.y = shape->getTriangles()[i*3+1].y + shape->getPos().y;
vertices[i*3+1].pos.z = 0.0f;

vertices[i*3+2].color = color;
vertices[i*3+2].pos.x = shape->getTriangles()[i*3+2].x + shape->getPos().x;
vertices[i*3+2].pos.y = shape->getTriangles()[i*3+2].y + shape->getPos().y;
vertices[i*3+2].pos.z = 0.0f;
}
// Unlock the vertex buffer
mVB_texture->Unlock();

if(filled)
gd3dDevice->SetRenderState(D3DRS_FILLMODE, D3DFILL_SOLID);
else
gd3dDevice->SetRenderState(D3DRS_FILLMODE, D3DFILL_WIREFRAME);

// Draw image
gd3dDevice->DrawPrimitive(D3DPT_TRIANGLELIST, 0, shape->getTriangles().size()/3);
}



But it doesn't render at all! If i debug, it's ran, and the shape has the values it is supposed to have.
I do not believe the triangulation is the issue, it was not originally written by me, and on debug it gives *very* plausable results.

The (only slightly modded) triangulation technique here: http://www.flipcode....ngulation.shtml

Anyone have any clue on why it does not work?

Thanks in advance!
- Focusrite

Share this post


Link to post
Share on other sites
Advertisement
Are your transform matrices / shader constants set up correctly?
Do you have anything else rendering?
You could also try running your app through PIX and see if it shows anything relevant.

Share this post


Link to post
Share on other sites
Ah sorry should mention that, yeah other types of rendering works, graphics renders rectangles, textures, lines etc without any issues at all, it's just this one giving me a headache. And no, afraid it's not the shaders as they're as of yet to be added to the project.. hm.

I haven't heard of that PIX, what kind of tool is it? Google seemed not so helpful when searching for it.

Share this post


Link to post
Share on other sites
So are you using the fixed function pipeline for rendering?

PIX is a tool that comes with the DirectX SDK that is extremely useful for debugging D3D applications. It's fairly intuitive to just poke around with, but you can also check out the help file that comes with it for more detailed stuff.

Try starting it up, go to File -> New Experiment, put the path to your compiled .exe into it and select "A single-frame capture of Direct3D whenevef F12 is pressed" and click Start Experiment. Then hit F12 when something should be rendering then close your app.
You can then expand the frame in the lower left pane, and look at all the draw calls made. From there, you can see the vertex positions before and after the vertex shader (or fixed-function equivalent) is run, which will hopefully tell you why the vertices aren't visible (E.g. back-facing, offscreen, 0 alpha, etc).

Share this post


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

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!