我正在尝试使用 Collada 对象将基本的鼠标集成到一个小型演示中。我能够获得正确的鼠标 x 和 y,但我不知道如何将它们转换为用于对象的坐标。
我希望 GLGE 函数duck.setLoc(mousepos.x, mousepos.y)
可以从像素转换,但事实并非如此。
我需要做什么才能将 2D mousepos 像素转换为 3D 点?
如果您有屏幕坐标 (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 。