• Create Account

## drawing triangular pyramid using dx9

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.

4 replies to this topic

### #1phil67rpg  Members

216
Like
0Likes
Like

Posted 07 January 2013 - 09:48 PM

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), },
};

### #2HappyCoder  Members

4741
Like
0Likes
Like

Posted 07 January 2013 - 11:16 PM

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

### #3phil67rpg  Members

216
Like
0Likes
Like

Posted 07 January 2013 - 11:24 PM

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

### #4phil67rpg  Members

216
Like
0Likes
Like

Posted 08 January 2013 - 09:45 PM

I am still a little confused about how to use the index buffer. I need just a little more advice.

### #5HappyCoder  Members

4741
Like
1Likes
Like

Posted 09 January 2013 - 09:34 AM

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

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.