• Advertisement
Sign in to follow this  

A simple function to generate index buffers for D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP

This topic is 1093 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Hi!

 

Before I start, I want you to know this is not a question, but a topic. I'm sorry for my bad English because I'm Brazilian.

 

Okay. So, I was trying to write index buffers so I could display polygons - not only triangles - using a vertex list (always clockwise) together with D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP. Soon, I noticed that it makes a pattern.

4 vertices   1  2  0  3
5 vertices   1  2  0  3  4
6 vertices   1  2  0  3  5  4
7 vertices   1  2  0  3  6  4  5
8 vertices   1  2  0  3  7  4  6  5
9 vertices   1  2  0  3  8  4  7  5  6
10 vertices  1  2  0  3  9  4  8  5  7  6
11 vertices  1  2  0  3 10  4  9  5  8  6  7
12 vertices  1  2  0  3 11  4 10  5  9  6  8  7
13 vertices  1  2  0  3 12  4 11  5 10  6  9  7  8
14 vertices  1  2  0  3 13  4 12  5 11  6 10  7  9  8
15 vertices  1  2  0  3 14  4 13  5 12  6 11  7 10  8  9
16 vertices  1  2  0  3 15  4 14  5 13  6 12  7 11  8 10  9

I didn't test all of them, but I did test 4, 5, 6, 7, 8, 9, 10 and 16. All of them worked. This is the 16 vertices polygon (it's a bit ugly because I didn't spent too much work on it):

[attachment=25580:polygon.png]

Then I've made a little function:

#include <iostream>

using namespace std;

unsigned int* Generate(unsigned int cVertices)
{
	unsigned int *pIndexBuffer;

	pIndexBuffer = new unsigned int[cVertices];
	pIndexBuffer[0] = 1;
	pIndexBuffer[1] = 2;
	pIndexBuffer[2] = 0;

	for (int i = 3, n = 3, m = 1; i < cVertices; i++)
	{
		if (i & 1) // odd
		{
			pIndexBuffer[i] = n++;
		}
		else // even
		{
			pIndexBuffer[i] = cVertices - m++;
		}
	}
	
	return pIndexBuffer;
}

int main()
{
	for (int i = 4; i <= 25; i++)
	{
		unsigned int *pIndexBuffer = Generate(i);

		printf("%2i: ", i);
		for (int n = 0; n < i; n++)
		{
			printf("%3i", pIndexBuffer[n]);
		}

		cout << endl;

		delete[] pIndexBuffer;
	}

	getchar();
}

And that's it. I'm not sure if it works for any CONVEX polygon.

 

So, that's my little adventure. Any thoughts are welcome.

Edited by LHLaurini

Share this post


Link to post
Share on other sites
Advertisement
Sign in to follow this  

  • Advertisement