Jump to content

  • Log In with Google      Sign In   
  • Create Account

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.


  • You cannot reply to this topic
9 replies to this topic

#1   Members   -  Reputation: 393

Like
0Likes
Like

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

pentagon_zpsc02ad1ae.png



#2   Crossbones+   -  Reputation: 3860

Like
2Likes
Like

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



#3   Members   -  Reputation: 2240

Like
1Likes
Like

Posted 24 April 2014 - 04:33 AM

Hello there thry this out

RestartStrip()



#4   Members   -  Reputation: 393

Like
0Likes
Like

Posted 24 April 2014 - 05:38 AM

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



#5   Crossbones+   -  Reputation: 8209

Like
0Likes
Like

Posted 24 April 2014 - 06:58 AM

Well, if one can draw this...



#6   Members   -  Reputation: 393

Like
0Likes
Like

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.


#7   Crossbones+   -  Reputation: 8209

Like
0Likes
Like

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. 



#8   Members   -  Reputation: 393

Like
0Likes
Like

Posted 24 April 2014 - 09:15 AM

and for a ring of triangles?



#9   Crossbones+   -  Reputation: 8209

Like
1Likes
Like

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

Attached Thumbnails

  • GeometryShaderRing.Png


#10   Members   -  Reputation: 393

Like
0Likes
Like

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.




PARTNERS