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.

# Pentagons in geometry shaders

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.

9 replies to this topic

### #1Naruto-kun  Members

Posted 23 April 2014 - 12:00 PM

Hi guys

Got a bit of a problem here. I am trying to draw a pentagon shape on my geometry shader but for some reason the final vertex is always ending up co-located with the 2nd vertex after the center. Any ideas?

	v.p = center;
triStream.Append(v);
//top left
v.p = center+float4(-0.07702941f, 0.02502837f, 0, 0);
triStream.Append(v);
//top
v.p = center+float4(0, 0.08099352f, 0, 0);
triStream.Append(v);
//top right
v.p = center+float4(0.07702941f, 0.02502837f, 0, 0);
triStream.Append(v);
//bottom right
v.p = center+float4(0.04760679f, -0.06552513f, 0, 0);
triStream.Append(v);
//bottom left
v.p = center+float4(-0.04760679f, -0.06552513f, 0, 0);
triStream.Append(v);


### #2C0lumbo  Members

Posted 24 April 2014 - 01:27 AM

Just a guess, but it looks like maybe your code is intended to produce a triangle fan, but it's actually outputting a triangle strip (with some of the triangles being back faced culled). .

### #3ankhd  Members

Posted 24 April 2014 - 04:33 AM

Hello there thry this out

RestartStrip()

### #4Naruto-kun  Members

Posted 24 April 2014 - 05:38 AM

Damn....is there no way to draw it without using RestartStrip?

### #5unbird  Members

Posted 24 April 2014 - 06:58 AM

Well, if one can draw this...

### #6Naruto-kun  Members

Posted 24 April 2014 - 07:26 AM

Hehe good one. That just helped me figure out how to dump the center vertex. However...this does lead me to question how more complex shapes (eg 36point circles) would be handled...

Edited by Naruto-kun, 24 April 2014 - 07:28 AM.

### #7unbird  Members

Posted 24 April 2014 - 08:04 AM

Any convex shape should work. Strips alternate between left and right side. For a circle split vertices at one axis (e.g. x < 0).

May give you "bad" triangulation (very acute triangles), if that is a problem.

### #8Naruto-kun  Members

Posted 24 April 2014 - 09:15 AM

and for a ring of triangles?

### #9unbird  Members

Posted 25 April 2014 - 02:45 AM

Sure:
    int n = 20;
float r1 = 0.1;
float r2 = 0.05;
for(int i = 0; i <= n; i++)
{
float a = (float)i / n * 2 * 3.1415926;
float x, y;
sincos(a, x, y);
v.Position = mul(center + r2 * float4(x,y,0,0), WVP);
triStream.Append(v);
v.Position = mul(center + r1 * float4(x,y,0,0), WVP);
triStream.Append(v);
}


### #10Naruto-kun  Members

Posted 25 April 2014 - 04:30 AM

excellent. Thanks a bunch!

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.