Jump to content

  • Log In with Google      Sign In   
  • Create Account

We're offering banner ads on our site from just $5!

1. Details HERE. 2. GDNet+ Subscriptions HERE. 3. Ad upload HERE.


Don't forget to read Tuesday's email newsletter for your chance to win a free copy of Construct 2!


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 Naruto-kun   Members   -  Reputation: 339

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



Sponsor:

#2 C0lumbo   Crossbones+   -  Reputation: 2373

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 ankhd   Members   -  Reputation: 1322

Like
1Likes
Like

Posted 24 April 2014 - 04:33 AM

Hello there thry this out

RestartStrip()



#4 Naruto-kun   Members   -  Reputation: 339

Like
0Likes
Like

Posted 24 April 2014 - 05:38 AM

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



#5 unbird   Crossbones+   -  Reputation: 5575

Like
0Likes
Like

Posted 24 April 2014 - 06:58 AM

Well, if one can draw this...



#6 Naruto-kun   Members   -  Reputation: 339

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 unbird   Crossbones+   -  Reputation: 5575

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 Naruto-kun   Members   -  Reputation: 339

Like
0Likes
Like

Posted 24 April 2014 - 09:15 AM

and for a ring of triangles?



#9 unbird   Crossbones+   -  Reputation: 5575

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 Naruto-kun   Members   -  Reputation: 339

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