我试图从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将mousePosition
与Inverse of MVP matrix
相乘。但是会得到随机数。
用于计算MVP矩阵:
osg::Matrix mvp = _camera->getViewMatrix() * _camera->getProjectionMatrix();
我该如何进行?谢谢。
答案 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