Jump to content

  • Log In with Google      Sign In   
  • Create Account

FREE SOFTWARE GIVEAWAY

We have 4 x Pro Licences (valued at $59 each) for 2d modular animation software Spriter to give away in this Thursday's GDNet Direct email newsletter.


Read more in this forum topic or make sure you're signed up (from the right-hand sidebar on the homepage) and read Thursday's newsletter to get in the running!


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: 2500

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: 1364

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: 6018

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: 6018

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: 6018

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