Advertisement

[D3D9] Draw Filled Circle avoiding Triangle Fan

Started by January 24, 2013 08:25 AM
3 comments, last by X-Shiryu 11 years, 9 months ago

I'm implementing some controls for my GUI system, and now its time to do a RadioButton class, whereas I'll not using textures, but pure primitive shapes.

Its very simple: what I'll do is render a unfilled external circle and if RadioButton is clicked/checked, will be rendered a filled one inside.

Since Triangle Fan is marked as deprecated for D3D10+, can achieve it using Triangle Strips?


Model circle;
float position_x = 50;
float position_y = 350;

float radius_x = 30;
float radius_y = 30;

const int degrees = 360;
const float degrees_to_radians = 3.14159265f / 180.0f;

circle.ResizeVertices(degrees);

//Direct3D Triangle Strip
//circle.SetPrimitiveType(TriangleStrip);

//Direct3D Line Strip
circle.SetPrimitiveType(LineStrip);

circle.SetPrimitiveCount(circle.GetVertexTotal() - 1);

for (int i = 0; i < degrees; i++)
{
    const float rad = i * degrees_to_radians;

    circle.SetVertexPosition(i,position_x + (cos(rad) * radius_x),position_y + (sin(rad) * radius_y));

    circle.SetVertexColor(i,Color::Black);
}
 

Using LineStrip top result and TriangleStrip bottom result:

Untitled.png

Why not just use DrawIndexed with triangles instead? That can replicate any primitive type from earlier versions of D3D.

Direct3D has need of instancing, but we do not. We have plenty of glVertexAttrib calls.

Advertisement

Yeah, i just tried using Triangle List and worked.

Using indices like this: 0 1 2 0 2 3 0 3 4 ..., i can simulate a Triangle Fan and fill circle, but uses more indices.

Untitled.jpg

Out of curiosity, why not textures?

Because i'm focusing more on functionalities of controls than graphical aspect, but later i can add a sprite and render it textured.


This topic is closed to new replies.

Advertisement