Jump to content

  • Log In with Google      Sign In   
  • Create Account

We need your feedback on a survey! Each completed response supports our community and gives you a chance to win a $25 Amazon gift card!


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.

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

#1 phil67rpg   Members   -  Reputation: 767

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


Sponsor:

#2 HappyCoder   Members   -  Reputation: 2889

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.

#3 phil67rpg   Members   -  Reputation: 767

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


#4 phil67rpg   Members   -  Reputation: 767

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.

#5 HappyCoder   Members   -  Reputation: 2889

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
}





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