質問

I am having a simple program, it draws a circle :/ This works fine...

for (k = 1; k < n+1+1; k++){
 vertices[k].color = GU_COLOR( 0.0f, 0.0f, 1.0f, 0.0f );
 vertices[k].x = cos_d( 360 - ((k-1) * dstep) );
 vertices[k].y = sin_d( 360 - ((k-1) * dstep) );
 vertices[k].z = 0.0f;
}
...
//Now draw it
sceGumDrawArray(GU_TRIANGLE_FAN, GU_COLOR_8888|GU_VERTEX_32BITF|GU_TRANSFORM_3D, n+1+1, 0, vertices);

But this doesn't:

for (k = 1; k < n+1+1; k++){
 vertices[k].color = GU_COLOR( 0.0f, 0.0f, 1.0f, 0.0f );
 vertices[k].x = cos_d( ((k-1) * dstep) );
 vertices[k].y = sin_d( ((k-1) * dstep) );
 vertices[k].z = 0.0f;
}

But shouldn't this be the same - just with difference that the first loop calculates the vertices clockwise and the second anti-clockwise? It's just awkward that it just doesn't draw the vertices using the second example...

Or am I stupid?

役に立ちましたか?

解決

Not really sure how you are drawing the circle (I see you creating a list of vertices, but know nothing about the rendering of those), but:

Usually, when you invert from clockwise to counter-clockwise, you end up getting the normal inverted, which means that you are looking at the back of your circle. And, as is the case with most APIs, when looking at the back of something (that doesn't have volume), it isn't rendered.

This is called backface culling.

他のヒント

It may not be drawn because of back-face culling.

"If the user has specified that front-facing polygons have a clockwise winding, if the polygon projected on the screen has a counter-clockwise winding it has been rotated to face away from the camera and will not be drawn."

I don't know the library you are using, but are you sure you aren't mixing radians and degrees in your code? Do the sin and cos functions take radians or degrees?

Presumably dstep is 360 / n?

As an aesthetic point, with GL_TRIANGLE_FAN you probably want your first point to be the center of the circle.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top