Hi all and Ilkka:
I am having a big trouble to find out the world coord of a point which has been done by certain transformations.
I think i am hopeless if i can’t get any help from you.
Please and thanks, liuya
below is somwhat of my main loop for render
int DrawGLScene(GLvoid)
{
glClearColor(0.0,0.0,0.0,0.0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //
glLoadIdentity();
//below some stuff for the viewer walking around the world, don’ care it much*/ float xtrans = -xpos;
float ztrans = -zpos;
float ytrans = -0.25f-ypos;
float sceneroty =360.0f-yrot;
glRotatef(lookupdown,1.0f,0,0);
glRotatef(sceneroty,0,1.0f,0);
glTranslatef(xtrans, ytrans, ztrans);
/!!!here i call a functoin to draw a cylinder!!!/
drawcylinder(0.1,1,1,1,2,2,2);
//!!!now i want to know the location, in world coord,of those points on the base/top of the cylinder/
}
//**********************************************************************************************
void drawcylinder(float r,float x1,float y1,float z1,float x2,float y2,float z2)
{
//r=radius
//x1,y1,z1, the center of the base
//x2,y2,z2, the center of the top
//DTOR=3.1415/180.0f
float len, angleA,angleB;
len=sqrt((x1-x2)(x1-x2)+(y1-y2)(y1-y2)+(z1-z2)(z1-z2));
angleA=atan((x2-x1)/(z2-z1));
angleB=asin((y2-y1)/len);
glPushMatrix();
glTranslatef(x1,y1,z1);
glRotatef(angleA/DTOR,0.0f,1.0f,0.0f);
glRotatef(-angleB/DTOR,1,0,0);
glColor3f(0.3,0.0,0.9);
gluCylinder(obj,r,r,len,8,1);
glColor3f(1,1,1);
glBegin(GL_LINES);
//below i make some points on the plane of both base and top and draw a line between them(the base and top)/
for(int i=0;i<10;i++)
{
float x=0.005*sin(DTOR*36*i);
float y=0.005*cos(DTOR*36*i);
glVertex3d(x,y,0);
glVertex3d(x,y,len);
}
glEnd();
glPopMatrix();
}
//**********************************
There has been some help from Ilkka which can be found in my post “a math probelm, how to find a point”. you can see it also as below. I just can’t figure out where i should put glGetFloatv(i tried putting it everywhere, the ouptput never made any sense)
and what the XYZ is, are they the world coord of the point (which i want to find) before transformatoin?
quote:
Originally posted by JustHanging:
Ok, maybe I could write it open, assuming you have the modelview matrix (after the rotations) in a glFloat array,
w = xm[3]+ym[7]+m[15];
worldx = (xm[0]+ym[4]+m[12])/w;
worldy = (xm[1]+ym[5]+m[13])/w;
worldz = (xm[2]+ym[6]+m[14])/w;
Totally untested. Good luck!
-Ilkka
Hi Ilkka:
Thanks a lot.
this formula seems to be specific to my question since there is no Z. What shall i read if i want to fully understand and handle it myself? now i know there is a lot to learn about opengl. well i will try it first!