View more

View more

View more

### Image of the Day Submit

IOTD | Top Screenshots

### The latest, straight to your Inbox.

Subscribe to GameDev.net Direct to receive the latest updates and exclusive content.

# 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.

2 replies to this topic

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.

### #2phil_t  Members

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.

### #3MJP  Moderators

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.