drawing triangular pyramid using dx9

Started by
3 comments, last by HappyCoder 11 years, 3 months ago
I am still working with directx9tutorial.com and it is going really good. However I need a little help. I want to draw a triangular pyramid. The tutorial draws a hypercraft. Here is the code for the space craft. void init_graphics(void) { // create the vertices using the CUSTOMVERTEX struct CUSTOMVERTEX vertices[] = { // fuselage { 3.0f, 0.0f, 0.0f, D3DCOLOR_XRGB(0, 255, 0), }, { 0.0f, 3.0f, -3.0f, D3DCOLOR_XRGB(0, 0, 255), }, { 0.0f, 0.0f, 10.0f, D3DCOLOR_XRGB(255, 0, 0), }, { -3.0f, 0.0f, 0.0f, D3DCOLOR_XRGB(0, 255, 255), }, // left gun { 3.2f, -1.0f, -3.0f, D3DCOLOR_XRGB(0, 0, 255), }, { 3.2f, -1.0f, 11.0f, D3DCOLOR_XRGB(0, 255, 0), }, { 2.0f, 1.0f, 2.0f, D3DCOLOR_XRGB(255, 0, 0), }, // right gun { -3.2f, -1.0f, -3.0f, D3DCOLOR_XRGB(0, 0, 255), }, { -3.2f, -1.0f, 11.0f, D3DCOLOR_XRGB(0, 255, 0), }, { -2.0f, 1.0f, 2.0f, D3DCOLOR_XRGB(255, 0, 0), }, };
Advertisement
It seems like there should be an index buffer to go with that data. Is there an array of integers somewhere in your code? The index buffer lets you reuse vertices. Lets say you have the following vertices.

{
{-1, -1, 0}
{-1, 1, 0}
{1, 1, 0}
{1, -1, 0}
}

If you were to plot those points you would find they form square. 3D geometry is made up of triangles so you need the have the points come in groups of 3. To reduce the redundancy of vertices you use an index buffer.

{
0, 1, 2,
0, 2, 3
}

What that index buffer says is to use vertices (0, 1, 2) for the first triangle and (0, 2, 3) for the second triangle. So you don't have to repeat vertices in the vertex buffer. So to make your triangular pyramid you will want to create the four corners of your pyramid in the vertex buffer then you have 4 sets of 3 integers in an index buffer specifying how the four corners connect together to form the faces.
My current game project Platform RPG
here is the code for the vertices // create the indices using an int array short indices[] = { 0, 1, 2, // fuselage 2, 1, 3, 3, 1, 0, 0, 2, 3, 4, 5, 6, // wings 7, 8, 9, };
I am still a little confused about how to use the index buffer. I need just a little more advice.
Well if you an array of vertices each vertex can be found at a specific index

{
{-1, -1, 0} // index 0
{-1, 1, 0} // index 1
{1, 1, 0} // index 2
{1, -1, 0} // index 3
}

When drawing triangles, vertices need to come in triples. The vertices I have listed above form a square. We need to break it up into triangles but a square has four points. There are two options at this point. One options is to repeat two of the vertices so I have 6.

{
// first triangle
{-1, -1, 0}
{-1, 1, 0}
{1, 1, 0}
// second triangle
{-1, -1, 0} <-- repeats
{1, 1, 0} <--
{1, -1, 0}
}

Repeating vertices just ends up using more memory than needed. By using an index buffer we can reduce the number of repeats.

{
{-1, -1, 0}
{-1, 1, 0}
{1, 1, 0}
{1, -1, 0}
}

// index buffer
{
 0, 1 ,2, <-- first triangle
 0, 2, 3 <-- second triangle
}
My current game project Platform RPG

This topic is closed to new replies.

Advertisement