如何从Openscenegraph中的2D鼠标单击屏幕坐标点计算3D点(世界坐标)?

时间:2018-07-11 20:40:07

标签: c++ opengl graphics 3d openscenegraph

我试图从2D屏幕空间上用户选择的点开始在3D空间上放置一个球体。为此,我尝试使用以下技术从2d点计算3d点,而该技术未提供正确的解决方案。

mousePosition.x = ((clickPos.clientX - window.left) / control.width) * 2 - 1;
    mousePosition.y = -((clickPos.clientY - window.top) / control.height) * 2 + 1;

然后Iam将mousePositionInverse of MVP matrix相乘。但是会得到随机数。

用于计算MVP矩阵:

 osg::Matrix mvp =   _camera->getViewMatrix() * _camera->getProjectionMatrix();

我该如何进行?谢谢。

1 个答案:

答案 0 :(得分:1)

在假设鼠标位置在x和y的[-1,1]范围内进行了标准化的情况下,以下代码将根据鼠标坐标投影的世界坐标为您提供2个点:@Override public void onBindViewHolder(@NonNull CardViewHolder viewHolder, int position) { if (mUseLayoutParameters) { int singleScreenWidth = DisplayUtils.getScreenWidth() / 3; Card card = mValues.get(position); if (card.isDoubleSized) { singleScreenWidth = singleScreenWidth * 2; } StaggeredGridLayoutManager.LayoutParams layoutParams = new StaggeredGridLayoutManager.LayoutParams(singleScreenWidth, ViewGroup.LayoutParams.MATCH_PARENT); viewHolder.itemView.setLayoutParams(layoutParams); } viewHolder.bind(mValues.get(position)); } 是3D点位于相机的视锥台附近平面上,nearPoint位于视锥台附近平面上。
比您可以计算一条经过这些点并与飞机相交的线。

farPoint