听起来像你正在寻找的是一个非项目方法.glut库附带一个,但它在OpenGL ES上不可用.这是可能的重写过剩代码自己是iPhone兼容 你也可以写自己的代码来unproject,这将涉及到需要的接触点扩展到视口,通过你的投影*模型视图矩阵的逆相乘,再除以w ^得到一个3D矢量.
拾取模式在 openGL ES 中不可用。但是使用从当前 openGL 状态检索的投影矩阵可以轻松计算任何 3d 点的屏幕坐标。这是我的做法(IMPoint2D 和 IMPoint3D 是基本的 (x,y) 和 (x,y,z) 结构)
+ (IMPoint2D) getScreenCoorOfPoint:(IMPoint3D)_point3D
{
GLfloat p[16]; // Where The 16 Doubles Of The Projection Matrix Are To Be Stored
glGetFloatv(GL_PROJECTION_MATRIX, p); // Retrieve The Projection Matrix
/*
Multiply M * point
*/
GLfloat _p[] = {p[0]*_point3D.x +p[4]*_point3D.y +p[8]*_point3D.z + p[12],
p[1]*_point3D.x +p[5]*_point3D.y +p[9]*_point3D.z + p[13],
p[2]*_point3D.x +p[6]*_point3D.y +p[10]*_point3D.z+ p[14],
p[3]*_point3D.x +p[7]*_point3D.y +p[11]*_point3D.z+ p[15]};
/*
divide by scale factor
*/
IMPoint2D _p2D = {_p[0]/_p[3], _p[1]/_p[3]};
/*
get result in screen coordinates. In this case I'm in landscape mode
*/
return (IMPoint2D) {_p2D.x*240.0f + 240.0f, (1.0f - _p2D.y) *160.0f};
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4292 次 |
| 最近记录: |