我正在尝试使用Collada对象将基本鼠标集成到一个小型演示中。我能够获得正确的鼠标x和y,但我不知道如何将它们转换为用于对象的坐标。
我希望GLGE函数duck.setLoc(mousepos.x, mousepos.y)
能够从像素转换,但事实并非如此。
如何将2D mousepos像素转换为3D点?
答案 0 :(得分:0)
如果您有屏幕坐标(x0,y0)的点,您可以取消投影它们并在3d中计算它的坐标,例如,将z-coord设置为近剪裁窗格。 就像你想要的那样(x,y,near-z)用投影矩阵得到它们的屏幕坐标,现在你做了逆向处理。
但是如果你想在3d中获得交点的坐标,那么你可以使用上面提到的这个采样点和相机的原点在场景中投射光线并计算交点。
的伪代码:
ray.origin = camera.position; // vec3
ray.direction = samplePoint.position - camera.position; //vec3
check_intersections_with_triangles_in_scene( scene, ray ); // retrieve 3d coord of intersection
例如,如果您正在使用Three.js,所有这些功能都已内置在其中,因此这是一件小事。查看此演示:http://threejs.org/examples/webgl_interactive_draggablecubes.html。