Hi everyone,
I am absolutely newbie to opengl. I have just started learning opengl es 1.1 & 2.0 on iPhone platform using a book. So here is problem:
I created a simple project. It contains a 2D triangle. What I want to do is that whenever user touches the iphone screen, triangle’s head (top) should start pointing towards the finger touch location. I calculate angle from touch x,y coordinates and rotate triangle with that angle. But triangle doesn’t rotate correctly. Some of the code is in objective-c, but understandable. Below are relevant functions…
=====================================
-(void) touchedAt:(CGPoint)point{
float radius;
float dX,dY,cX,cY;
float pX=2*(point.x/320)-1; //normalize to opengl coordinates (left corner is -1, right corner is +1)
float pY=2*(point.y/480)-1; //similarly, bottom is -1, top is +1
//below, I calculate center point of triangle.
cX=(vertices[0].position[0]+vertices[1].position[0]+vertices[2].position[0])/3;
cY=(vertices[0].position[1]+vertices[1].position[1]+vertices[2].position[1])/3;
pY=-pY; //opengl’s y coordinate is inverted relative to iphone’s
dX=pX-cX;
dY=pY-cY;
radius=sqrtf(dX*dX+dY*dY); //calculate distance between center & touch position
float theta=acosf(pX/radius); //calculate angle of touch position.
theta = theta*180/3.14; //convert to degrees
NSLog(@"ThetaDegree: %f",theta);
if(pX>0) //if touch is in right-half of screen then make angle negative
theta=-1*theta;
destAngle=theta;
}
======================
-(void) render{
glClearColor(0.5f, 0.5f, 0.5f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
glPushMatrix();
glRotatef(destAngle, 0, 0, 1);
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_COLOR_ARRAY);
glVertexPointer(2, GL_FLOAT, sizeof(float)*6, &vertices[0].position[0]);
glColorPointer(4, GL_FLOAT, sizeof(float)*6, &vertices[0].color[0]);
GLsizei count=sizeof(vertices)/(sizeof(float)*6);
glDrawArrays(GL_TRIANGLES, 0, count);
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_COLOR_ARRAY);
glPopMatrix();
============================================
Please help me. I have always wanted to do this stuff. But never found it easy. I have another doubt about this code. Answer this: triangle is in object-space. Touch happens in screen space. How can I translate between these two. Touch angle is an absolute value. But triangle is rotated relatively to its previous position. I only need guidance.