Jump to content
  • Advertisement

Archived

This topic is now archived and is closed to further replies.

drawing a curved surface

This topic is 5243 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

I urgently want to draw a 3D curved surface that is essentially a 1/4 of a hollow cylinder. How do i do that? Will appreciate if there is any sample tutorial or code. Thank you.

Share this post


Link to post
Share on other sites
Advertisement
quote:
Original post by coda_x
I urgently want to draw a 3D curved surface that is essentially a 1/4 of a hollow cylinder. How do i do that? Will appreciate if there is any sample tutorial or code. Thank you.


So this surface would kind of look like a piece of paper with it's long sides lifted up slightly?

You could do it like this... (assuming you want it concave up)

for t = 0 to length

x[t] = width * cos(t)
y[t] = -1 * height * sin(t)
z[t] = t

loop

And then to draw it you could just stitch each length of t together with triangles

You know what I mean?


[edited by - nexius on January 12, 2004 2:41:53 AM]

Share this post


Link to post
Share on other sites
yah it looks like a paper with sides lifted up slightly but erm I dun understand what t stands for - radius? is there a proper code for it? i am doing for a project and been stuck here. Thanx.

Share this post


Link to post
Share on other sites
I think t in that case would be the arc-length. He's using t for the cos/sin parameter, so it's representing the angle. If t went from 0 to 2*PI, you'd get a full cylinder. One way you could accomplish this is make a grid of vertices. Think of the grid of vertices as the piece of paper, but you've folded it upwards.


// Generic 3-float vertex struct
struct Point
{
float x, y, z;
};

// 50 vertices along the arc, 100 vertices in length
Point VertexGrid[50][100];

// This is the angle variable
float t;
// Fill the grid
for (int z = 0; z < 100; z++) // loop for the length of it
{
t = 0.0f;
for (int x = 0; x < 50; x++) // loop from right to left
{
// Have t increment from 0 rads to PI over the width
t = (float)x / 49 * PI;
VertexGrid[x][z].x = cos(t) * radius;
VertexGrid[x][z].y = -sin(t) * radius;
VertexGrid[x][z].z = -(float)z / 99 * length;
}
}


Unless I did something horribly wrong, that grid would now represent a half cylinder (since I went from 0 to PI rads) opening upwards (note the negative y value) and it'll stretch from z = 0.0 to z = -length (remember going into the screen is more and more negative along the z-axis).

Once you have the grid, you could write a connectivity loop to generate the triangles for rendering. If you need that too, go ahead and ask.

That help?

Edit: I noticed you asked for 1/4 of a cylinder, so replace that PI value in the inner loop with PI / 2, i.e. 1/4 of a full circle. That should do it

[edited by - chawk on January 12, 2004 10:01:05 AM]

Share this post


Link to post
Share on other sites
thanx that help to clear up my doubt can i ask how do u render it? is it

gl_Begin(GL_TRIANGLE_FAN);

erm then i not sure how to continue...btw the code u wrote can I put it in function then call it here? also, i need the normal to this curve surface as I am using lighting, how to do this as well? greatly appreciate any kind help



[edited by - coda_x on January 12, 2004 8:34:24 PM]

Share this post


Link to post
Share on other sites

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

Participate in the game development conversation and more when you create an account on GameDev.net!

Sign me up!