Jump to content

  • Log In with Google      Sign In   
  • Create Account

We're offering banner ads on our site from just $5!

1. Details HERE. 2. GDNet+ Subscriptions HERE. 3. Ad upload HERE.


Vertex and index buffers in DirectX.


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
2 replies to this topic

#1 mbradber   Members   -  Reputation: 129

Like
0Likes
Like

Posted 09 March 2013 - 03:46 PM

Hey guys, I'm learning DirectX and I've recently come across a problem that I would like some insight on. I have a cube class that creates a vertex buffer of vertices containing a 3D vector for position and a 3D vector for normals and a 2D vector for textures coordinates.

vec3 position

vec3 normal

vec2 texcoords

 

I'm using an index buffer as well so that I only need to have 8 vertices instead of 36. The problem with this is when texturing, the same vertex (for example the front face top left corner) would need to have different texture coordinates depending on which triangle it is part of during rendering (as each vertex will be part of 4 triangles). For instance the front face - top left vertex would have texture coordinates of 0,0 for the two triangles of the front face, but for the top face I would want that vertex to have texture coordinates of 0,1, and for the left face I would want that vertex to have texture coordinates of 1,0.

To try and solve this problem I just decided to create another vertex buffer to hold the 4 different texture coordinates and setup the input layout to read the texture coordinates from that buffer. Then I saw that you could only bind one index buffer...The only compromise I see right now is to create 24 vertices instead of 8, where each vertex has 3 permutations of texture coordinates depending on which face of the cube it is being rendered from.

So I'm curious as to whether there is a better way to structure your buffers so that you wouldn't need one large buffer of 24 vertices for a textured cube which really only has 8 vertices?

 

Thanks for the help.



Sponsor:

#2 phil_t   Crossbones+   -  Reputation: 3948

Like
4Likes
Like

Posted 09 March 2013 - 04:24 PM

Nope, that's the way to do it... 24 vertices.

Most "real" models are much smoother, and can generally share a lot more vertices between triangles.

Edited by phil_t, 09 March 2013 - 04:25 PM.


#3 MJP   Moderators   -  Reputation: 11589

Like
2Likes
Like

Posted 09 March 2013 - 07:25 PM

Yeah GPU's can only work with a single index buffer, so typically you will duplicate vertices so that you have enough for all necessary combination of position/normal/UV/tangent/etc. If you're using a vertex shader and DX10+ it's possible to implement more complex means for storing vertex data since you can load arbitrary data from buffers, however like I said before the GPU is limited to one index buffer and your vertex shader will (usually) only run once for each vertex specified in the index buffer. Therefore it can get pretty complicated to do something like this.






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