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

Recommended Posts

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


Share on other sites

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

Share on other sites

Hello there thry this out

RestartStrip()

Share on other sites

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

Share on other sites

Well, if one can draw this...

Share on other sites

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

Share on other sites

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.

Share on other sites

and for a ring of triangles?

Share on other sites
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);
}


Share on other sites

excellent. Thanks a bunch!