opengl es - iPhone : Moving in 3D Space (stepping sideways using gluLookAt) -



opengl es - iPhone : Moving in 3D Space (stepping sideways using gluLookAt) -

i have written 3d environment in opengl can move forward/backwards , around (up/down left/right) cant work out how can side step left of right.

i using glulookat , moving forwards code is

glfloat v[] = {[self centeratindex:0] - [self eyeatindex:0],[self centeratindex:1] - [self eyeatindex:1], [self centeratindex:2] - [self eyeatindex:2]}; [self seteye:[self eyeatindex:0] + v[0] * speed_move atindex:0]; [self seteye:[self eyeatindex:2] + v[2] * speed_move atindex:2]; [self setcenter: [self centeratindex:0] + v[0] * speed_move atindex:0]; [self setcenter: [self centeratindex:2] + v[2] * speed_move atindex:2];

and

glulookat(eye[0], eye[1], eye[2],center[0], center[1], center[2], 0.0, 1, 0.0);

anyone got thought how side step or seen example?

solution

float up[3] = {0, 1, 0}; float forward[3] = { center[0] - eye[0],center[1] - eye[1],center[2] - eye[2] }; float left[3]; left[0] = forward[1] * up[2] - forward[2] * up[1]; left[1] = forward[2] * up[0] - forward[0] * up[2]; left[2] = forward[0] * up[1] - forward[1] * up[0]; // translate eye position [self seteye:[self eyeatindex:0] - left[0] * speed_move atindex:0]; [self seteye:[self eyeatindex:2] - left[2] * speed_move atindex:2]; [self setcenter: [self centeratindex:0] - left[0] * speed_move atindex:0]; [self setcenter: [self centeratindex:2] - left[2] * speed_move atindex:2]; if (([self eyeatindex:2] >= mapsizez || [self eyeatindex:0] >= mapsizex || [self eyeatindex:2] <= 1 || [self eyeatindex:0] <= 1) || [self checkcollisionwithpoint:cgpointmake([self eyeatindex:0] ,[self eyeatindex:2])] ){ [self seteye:[self eyeatindex:0] + left[0] * speed_move atindex:0]; [self seteye:[self eyeatindex:2] + left[2] * speed_move atindex:2]; [self setcenter: [self centeratindex:0] + left[0] * speed_move atindex:0]; [self setcenter: [self centeratindex:2] + left[2] * speed_move atindex:2]; }

to move sideways have translate eye position along camera's right vector.

to find right vector, remember cross product of 2 vectors gives perpendicular vector. so, cross product of forwards vector , vector give right vector.

your forwards vector v[3], utilize 'forward' here clarity.

// find right vector. (forward cross product up) float right[3]; right[0] = forward[1] * up[2] - forward[2] * up[1]; right[1] = forward[2] * up[0] - forward[0] * up[2]; right[2] = forward[0] * up[1] - forward[1] * up[0]; // translate eye position [self seteye:[self eyeatindex:0] + right[0] * speed_move atindex:0]; [self seteye:[self eyeatindex:2] + right[2] * speed_move atindex:2];

you should note glu library not available opengl es, have reimplement lookat function, straightforward, question.

iphone opengl-es 3d

Comments

Popular posts from this blog

iphone - Dismissing a UIAlertView -

intellij idea - Update external libraries with intelij and java -

javascript - send data from a new window to previous window in php -