newasun

05-23-2005, 01:05 AM

I need to draw cube by taking input from user.

Can anybody help me with the algorithm.

Thanx.

Can anybody help me with the algorithm.

Thanx.

View Full Version : Urgent! drawing cube by user input

newasun

05-23-2005, 01:05 AM

I need to draw cube by taking input from user.

Can anybody help me with the algorithm.

Thanx.

Can anybody help me with the algorithm.

Thanx.

Ehsan Kamrani

05-23-2005, 02:43 AM

This is a general question. Are you familiar with the transformations?Which API do you want to use to interact with the mouse?--GLUT, DirectInput, WM_MOUSE ?

newasun

05-23-2005, 02:46 AM

Not by glut. Mouse input is also not needed. I just have to take input from user like how many points or triangles there will be or length of cube etc and draw the cube, cone, cylinder etc.

powerpad

05-23-2005, 04:08 AM

a cube:

1. get width W = w;

2. get position P(x,y,z)

3. use one color C or multiple colors

1. draw the cube ... simple way use quads

glBegin(GL_QUADS)

//draw Front/Back/Left/Right/Top/Bottom Face

//front

glVertex3f(0, 0, 0)

glVertex3f(w, 0, 0)

glVertex3f(w, w, 0)

glVertex3f(0, w, 0)

//back

glVertex3f(0, 0, w)

glVertex3f(w, 0, w)

glVertex3f(w, w, w)

glVertex3f(0, w, w)

//left

glVertex3f(0, 0, 0)

glVertex3f(0, 0, w)

glVertex3f(0, w, w)

glVertex3f(0, w, 0)

//right

glVertex3f(w, 0, 0)

glVertex3f(w, 0, w)

glVertex3f(w, w, w)

glVertex3f(w, w, 0)

//top

glVertex3f(0, w, 0)

glVertex3f(w, w, 0)

glVertex3f(w, w, w)

glVertex3f(0, w, w)

//bottom

glVertex3f(0, 0, 0)

glVertex3f(w, 0, 0)

glVertex3f(w, 0, w)

glVertex3f(0, 0, w)

glEnd()2. position the cube

call a glTranslatef prior to the drawing with

glTranslatef(Px, Py, Pz)3.

specify color ... (pay attention to lighting disabled glDisable(GL_LIGHTING))

if one color for the whole cube then

place glColor3f(Cx, Cy, Cz) before glBegin

else specify a color for each face

this will draw a cube with 6 faces If you want smaller quads (e.g. improve lighting) then you have to divide w by NumberOfQuadsPerFace and

draw NumberOfQuadsPerFace per Face each of which has a width/height or depth of NumberOfQuadsPerFace^-1

1. get width W = w;

2. get position P(x,y,z)

3. use one color C or multiple colors

1. draw the cube ... simple way use quads

glBegin(GL_QUADS)

//draw Front/Back/Left/Right/Top/Bottom Face

//front

glVertex3f(0, 0, 0)

glVertex3f(w, 0, 0)

glVertex3f(w, w, 0)

glVertex3f(0, w, 0)

//back

glVertex3f(0, 0, w)

glVertex3f(w, 0, w)

glVertex3f(w, w, w)

glVertex3f(0, w, w)

//left

glVertex3f(0, 0, 0)

glVertex3f(0, 0, w)

glVertex3f(0, w, w)

glVertex3f(0, w, 0)

//right

glVertex3f(w, 0, 0)

glVertex3f(w, 0, w)

glVertex3f(w, w, w)

glVertex3f(w, w, 0)

//top

glVertex3f(0, w, 0)

glVertex3f(w, w, 0)

glVertex3f(w, w, w)

glVertex3f(0, w, w)

//bottom

glVertex3f(0, 0, 0)

glVertex3f(w, 0, 0)

glVertex3f(w, 0, w)

glVertex3f(0, 0, w)

glEnd()2. position the cube

call a glTranslatef prior to the drawing with

glTranslatef(Px, Py, Pz)3.

specify color ... (pay attention to lighting disabled glDisable(GL_LIGHTING))

if one color for the whole cube then

place glColor3f(Cx, Cy, Cz) before glBegin

else specify a color for each face

this will draw a cube with 6 faces If you want smaller quads (e.g. improve lighting) then you have to divide w by NumberOfQuadsPerFace and

draw NumberOfQuadsPerFace per Face each of which has a width/height or depth of NumberOfQuadsPerFace^-1

newasun

05-23-2005, 06:07 AM

Thanx powerpad. Do you have little complex than this one? I mean to find the co-ordiante by angle and drawing by triangular mesh.

powerpad

05-23-2005, 06:43 AM

I am sorry but I don't understand your question.

What do you mean by angle and by mesh ...

The user inputs an angle and you want to calculate a cube or what ...

given a point p(x,y,z) and a length l than you can

calculate a point p'(x', y', z') by using the laws of sine and cosine to get a p' that has angle alpha difference to p

e.g. a circle is defined by

x = r * cos(alpha)

y = r * sin(alpha)

where r is the sphere's radius and x,y defines the center of the sphere. If you want to define a quad(a, b, b', a') by alpha you probably mean

a = (ax,ay,az)

b = (bx,by,bz) - bx = ax, by = ay + r, bz

b' = (bx + r * cos(alpha), by + r*sin(alpha), bz)

a' = (ax + r * cos(alpha), ay + r*sin(alpha), az)

this leads to something like this

-b'

-- |

- |

b |

| -a'

| -- |

| -alpha|

a------------->

you can define rotated points for all the planes you want assuming a radius r or getting it from the user.

What do you mean by angle and by mesh ...

The user inputs an angle and you want to calculate a cube or what ...

given a point p(x,y,z) and a length l than you can

calculate a point p'(x', y', z') by using the laws of sine and cosine to get a p' that has angle alpha difference to p

e.g. a circle is defined by

x = r * cos(alpha)

y = r * sin(alpha)

where r is the sphere's radius and x,y defines the center of the sphere. If you want to define a quad(a, b, b', a') by alpha you probably mean

a = (ax,ay,az)

b = (bx,by,bz) - bx = ax, by = ay + r, bz

b' = (bx + r * cos(alpha), by + r*sin(alpha), bz)

a' = (ax + r * cos(alpha), ay + r*sin(alpha), az)

this leads to something like this

-b'

-- |

- |

b |

| -a'

| -- |

| -alpha|

a------------->

you can define rotated points for all the planes you want assuming a radius r or getting it from the user.

powerpad

05-23-2005, 06:46 AM

I am sorry but I don't understand your question.

What do you mean by angle and by mesh ...

The user inputs an angle and you want to calculate a cube or what ...

given a point p(x,y,z) and a length l than you can

calculate a point p'(x', y', z') by using the laws of sine and cosine to get a p' that has angle alpha difference to p

e.g. a circle is defined by

x = r * cos(alpha)

y = r * sin(alpha)

where r is the sphere's radius and x,y defines the center of the sphere. If you want to define a quad(a, b, b', a') by alpha you probably mean

a = (ax,ay,az)

b = (bx,by,bz) - bx = ax, by = ay + r, bz

b' = (bx + r * cos(alpha), by + r*sin(alpha), bz)

a' = (ax + r * cos(alpha), ay + r*sin(alpha), az)

this leads to something like this

-b'

-- |

- |

b |

| -a'

| -- |

| -alpha|

a------------->you can define rotated points for all the planes you want assuming a radius r or getting it from the user.

What do you mean by angle and by mesh ...

The user inputs an angle and you want to calculate a cube or what ...

given a point p(x,y,z) and a length l than you can

calculate a point p'(x', y', z') by using the laws of sine and cosine to get a p' that has angle alpha difference to p

e.g. a circle is defined by

x = r * cos(alpha)

y = r * sin(alpha)

where r is the sphere's radius and x,y defines the center of the sphere. If you want to define a quad(a, b, b', a') by alpha you probably mean

a = (ax,ay,az)

b = (bx,by,bz) - bx = ax, by = ay + r, bz

b' = (bx + r * cos(alpha), by + r*sin(alpha), bz)

a' = (ax + r * cos(alpha), ay + r*sin(alpha), az)

this leads to something like this

-b'

-- |

- |

b |

| -a'

| -- |

| -alpha|

a------------->you can define rotated points for all the planes you want assuming a radius r or getting it from the user.

powerpad

05-23-2005, 06:48 AM

I am sorry but I don't understand your question.

What do you mean by angle and by mesh ...

The user inputs an angle and you want to calculate a cube or what ...

given a point p(x,y,z) and a length l than you can

calculate a point p'(x', y', z') by using the laws of sine and cosine to get a p' that has angle alpha difference to p

e.g. a circle is defined by

x = r * cos(alpha)

y = r * sin(alpha)

where r is the sphere's radius and x,y define the points on the sphere for alpha 0..2PI. If you want to define a quad(a, b, b', a') by alpha you probably mean

a = (ax,ay,az)

b = (bx,by,bz) - bx = ax, by = ay + r, bz

b' = (bx + r * cos(alpha), by + r*sin(alpha), bz)

a' = (ax + r * cos(alpha), ay + r*sin(alpha), az)

this leads to something like this

-b'

-- |

- |

b |

| -a'

| -- |

| -alpha|

a------------->you can define rotated points for all the planes you want assuming a radius r or getting it from the user.

What do you mean by angle and by mesh ...

The user inputs an angle and you want to calculate a cube or what ...

given a point p(x,y,z) and a length l than you can

calculate a point p'(x', y', z') by using the laws of sine and cosine to get a p' that has angle alpha difference to p

e.g. a circle is defined by

x = r * cos(alpha)

y = r * sin(alpha)

where r is the sphere's radius and x,y define the points on the sphere for alpha 0..2PI. If you want to define a quad(a, b, b', a') by alpha you probably mean

a = (ax,ay,az)

b = (bx,by,bz) - bx = ax, by = ay + r, bz

b' = (bx + r * cos(alpha), by + r*sin(alpha), bz)

a' = (ax + r * cos(alpha), ay + r*sin(alpha), az)

this leads to something like this

-b'

-- |

- |

b |

| -a'

| -- |

| -alpha|

a------------->you can define rotated points for all the planes you want assuming a radius r or getting it from the user.

newasun

05-23-2005, 06:50 AM

yeah something like that for cube how can i draw by just taking input length(l) from user. or for cylinder what can i do.

powerpad

05-23-2005, 08:23 AM

I hope that someone can delete my 3 posts (don't know how this could happen :( )

well the case with taking only length is the cube

that I have described above.

A cylinder takes 2 inputs the radius r for the base surface - a circle and the length l of the outer surface (the coat or how one calls it)

I would draw the cylinder in a brute force way by

approximating the sphere e.g. (this places the sphere at 0,0 and generates for one point on the

base sphere all points on a line

from x,y to x, y + l

the thing left is to connect those points to proper triangles ... and recall it is brute force

(but it should work although I did not test it)

for(i = 0; i < 360°; i += 360 / Steps)

{

x = radius * cos(i)

y = radius * sin(i)

for(j = 0; j < l; j += l / steps)

y' = y + j;

}

well the case with taking only length is the cube

that I have described above.

A cylinder takes 2 inputs the radius r for the base surface - a circle and the length l of the outer surface (the coat or how one calls it)

I would draw the cylinder in a brute force way by

approximating the sphere e.g. (this places the sphere at 0,0 and generates for one point on the

base sphere all points on a line

from x,y to x, y + l

the thing left is to connect those points to proper triangles ... and recall it is brute force

(but it should work although I did not test it)

for(i = 0; i < 360°; i += 360 / Steps)

{

x = radius * cos(i)

y = radius * sin(i)

for(j = 0; j < l; j += l / steps)

y' = y + j;

}

newasun

05-23-2005, 08:40 AM

thanx again.

Well can you clarify the cube eqn. and how can i get 'z' plane.

Well can you clarify the cube eqn. and how can i get 'z' plane.

newasun

05-23-2005, 08:48 AM

i tried like below but the program is crashing.

for(int i=0; i < 360; i += 360 / steps)

{

x = r* cos(i);

y = r* sin(i);

glBegin(GL_POINTS);

for(int j = 0; j < 2; j += 2 / steps)

{

y = y + j;

glVertex2d(x,y);

}

glEnd();

} i'm confused with steps variable isnt it for to getting no of circles.

for(int i=0; i < 360; i += 360 / steps)

{

x = r* cos(i);

y = r* sin(i);

glBegin(GL_POINTS);

for(int j = 0; j < 2; j += 2 / steps)

{

y = y + j;

glVertex2d(x,y);

}

glEnd();

} i'm confused with steps variable isnt it for to getting no of circles.

powerpad

05-23-2005, 10:19 AM

here is how you could draw the base circle

float PI2 = 6.283185307179586476925286766559f;

float d = 0.0f;

float steps = 180;

float s = PI2 / (float)steps;

float r = 10.0f;

float x = 0.0f;

float y = 0.0f;

float z = 0.0f;

int iI = 0;

Gl.glBegin(Gl.GL_TRIANGLE_FAN);

Gl.glVertex3f(0.0f, 0.0f, 0.0f);

for(iI = 0; iI <= steps; iI++)

{

d += s;

x = r * (float)Math.Cos(d);

y = r * (float)Math.Sin(d);

Gl.glVertex3f(x, y, 0.0f);

}

Gl.glEnd();and this is a brute force way to draw a cylinder with radius r and height h

float PI2 = 6.283185307179586476925286766559f;

float d = 0.0f;

float steps = 45;

float s = PI2 / steps;

float r = 20.0f;

float x0 = 0.0f;

float y0 = 0.0f;

float z0 = 0.0f;

float x1, z1;

int iI = 0;

float h = 5.0f;

Gl.glBegin(Gl.GL_TRIANGLES);

for(iI = 0; iI <= steps; iI++)

{

d += s;

x0 = r * (float)Math.Cos(d);

x1 = r * (float)Math.Cos(d + s);

z0 = r * (float)Math.Sin(d);

z1 = r * (float)Math.Sin(d + s);

//bottom circle

Gl.glColor3f(1.0f, 0.0f, 0.0f);

Gl.glVertex3f(0.0f, y0, 0.0f);

Gl.glVertex3f(x0, y0, z0);

Gl.glVertex3f(x1, y0, z1);

//coat

Gl.glColor3f(0.0f, 1.0f, 0.0f);

Gl.glVertex3f(x0, y0, z0);

Gl.glVertex3f(x1, y0, z1);

Gl.glVertex3f(x1, y0 + h, z1);

Gl.glVertex3f(x1, y0 + h, z1);

Gl.glVertex3f(x0, y0 + h, z0);

Gl.glVertex3f(x0, y0, z0);

//top circle

Gl.glColor3f(0.0f, 0.0f, 1.0f);

Gl.glVertex3f(0.0f, y0 +h, 0.0f);

Gl.glVertex3f(x0, y0 + h, z0);

Gl.glVertex3f(x1, y0 + h, z1);

}

Gl.glEnd();

float PI2 = 6.283185307179586476925286766559f;

float d = 0.0f;

float steps = 180;

float s = PI2 / (float)steps;

float r = 10.0f;

float x = 0.0f;

float y = 0.0f;

float z = 0.0f;

int iI = 0;

Gl.glBegin(Gl.GL_TRIANGLE_FAN);

Gl.glVertex3f(0.0f, 0.0f, 0.0f);

for(iI = 0; iI <= steps; iI++)

{

d += s;

x = r * (float)Math.Cos(d);

y = r * (float)Math.Sin(d);

Gl.glVertex3f(x, y, 0.0f);

}

Gl.glEnd();and this is a brute force way to draw a cylinder with radius r and height h

float PI2 = 6.283185307179586476925286766559f;

float d = 0.0f;

float steps = 45;

float s = PI2 / steps;

float r = 20.0f;

float x0 = 0.0f;

float y0 = 0.0f;

float z0 = 0.0f;

float x1, z1;

int iI = 0;

float h = 5.0f;

Gl.glBegin(Gl.GL_TRIANGLES);

for(iI = 0; iI <= steps; iI++)

{

d += s;

x0 = r * (float)Math.Cos(d);

x1 = r * (float)Math.Cos(d + s);

z0 = r * (float)Math.Sin(d);

z1 = r * (float)Math.Sin(d + s);

//bottom circle

Gl.glColor3f(1.0f, 0.0f, 0.0f);

Gl.glVertex3f(0.0f, y0, 0.0f);

Gl.glVertex3f(x0, y0, z0);

Gl.glVertex3f(x1, y0, z1);

//coat

Gl.glColor3f(0.0f, 1.0f, 0.0f);

Gl.glVertex3f(x0, y0, z0);

Gl.glVertex3f(x1, y0, z1);

Gl.glVertex3f(x1, y0 + h, z1);

Gl.glVertex3f(x1, y0 + h, z1);

Gl.glVertex3f(x0, y0 + h, z0);

Gl.glVertex3f(x0, y0, z0);

//top circle

Gl.glColor3f(0.0f, 0.0f, 1.0f);

Gl.glVertex3f(0.0f, y0 +h, 0.0f);

Gl.glVertex3f(x0, y0 + h, z0);

Gl.glVertex3f(x1, y0 + h, z1);

}

Gl.glEnd();

Powered by vBulletin® Version 4.2.3 Copyright © 2017 vBulletin Solutions, Inc. All rights reserved.