首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算鼠标位置到3d空间- OpenGL

计算鼠标位置到3d空间- OpenGL
EN

Stack Overflow用户
提问于 2021-04-10 05:39:59
回答 1查看 80关注 0票数 1

我正在尝试创建一条将鼠标坐标转换为3d世界坐标的光线。

代码语言:javascript
复制
Cx = Mx / screenWidth * 2 - 1
Cy = -( My / screenHeight * 2 - 1 )

vNear = InverseViewProjectionMatrix * ( Cx, Cy, -1, 1 )
VFar = InverseViewProjectionMatrix * ( Cx, Cy, 1, 1 )

vNear /= vNear.w
vFar /= vFar.w

在测试之后,光线的vFar似乎总是来自相同的大致方向

似乎我需要添加相机透视图,因为我希望vFar总是在我的相机后面。

我不完全确定应该如何添加它。这是我的测试代码。

代码语言:javascript
复制
public void mouseToWorldCordinates(Window window,Camera camera, Vector2d mousePosition){
    float normalised_x = (float)((mousePosition.x / (window.getWidth()*2)) -1);
    float normalised_y = -(float)((mousePosition.y / (window.getHeight()*2)) -1);

    Vector4f mouse = new Vector4f(normalised_x,normalised_y,-1,1);

    Matrix4f projectionMatrix = new Matrix4f(transformation.getProjectionMatrix()).invert();
    Matrix4f mouse4f = new Matrix4f(mouse,new Vector4f(),new Vector4f(),new Vector4f());
    Matrix4f vNear4f = projectionMatrix.mul(mouse4f);
    Vector4f vNear = new Vector4f();
    vNear4f.getColumn(0,vNear);

    mouse.z = 1f;

    projectionMatrix = new Matrix4f(transformation.getProjectionMatrix()).invert();
    mouse4f = new Matrix4f(mouse,new Vector4f(),new Vector4f(),new Vector4f());
    Matrix4f vFar4f = projectionMatrix.mul(mouse4f);
    Vector4f vFar = new Vector4f();
    vFar4f.getColumn(0,vFar);

    vNear.div(vNear.w);
    vFar.div(vFar.w);

    lines[0] = vNear.x;
    lines[1] = vNear.y;
    lines[2] = vNear.z;

    lines[3] = vFar.x;
    lines[4] = vFar.y;
    lines[5] = vFar.z;

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-10 14:24:39

normalised_xnormalised_y的计算错误。归一化设备坐标的范围为-1.0、1.0

代码语言:javascript
复制
float normalised_x = 2.0f * (float)mousePosition.x / (float)window.getWidth() - 1.0f;
float normalised_y = 1.0f - 2.0f * (float)mousePosition.y / (float)window.getHeight();
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67028615

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档