屏幕到javascript webgl中的世界坐标

如何解决屏幕到javascript webgl中的世界坐标

| 我正在尝试使用以下代码(基于单击以放大WebGL)在我的数据中找到一个点(屏幕到世界坐标):
    var world1 = [0,0] ;
    var world2 = [0,0] ;
    var dir    = [0,0] ;
    var w      = event.srcElement.clientWidth ;
    var h      = event.srcElement.clientHeight ;
    // calculate x,y clip space coordinates
    var x      = (event.offsetX-w/2)/(w/2) ;
    var y      = -(event.offsetY-h/2)/(h/2) ;
    mat4.inverse(pvMatrix,pvMatrixInverse) ;
    // convert clip space coordinates into world space
    mat4.multiplyVec4(pvMatrixInverse,[x,y,1],world1) ;
为简单起见,我设置了一系列顶点,其中z坐标始终为0: 我正在绘制的坐标:
0.0 0.0 0.0
1.0 1.0 0.0
1.0 0.0 0.0
0.0 1.0 0.0
0.5 0.5 0.0
然后,我将world1中的值与我的顶点进行比较。 world1中的值与我所单击的位置不匹配。有人能帮忙吗?     

解决方法

        请参阅如何从鼠标单击坐标获取WebGL 3d空间中的对象的类似答案。 TL; DR:我认为您的unproject功能不完整。看看jax / camera.js#L568中的另一个实现源。另请参见glhUnProjectf C实现,前者(宽松地)基于该实现。 最后一件事。注意HTML canvas元素。通常,它不在您认为的位置,并且使像素位置准确的唯一方法是向上遍历DOM。有关示例,请参见jax / events.js#L6和jax / events.js#L100。或者使用jQuery
$(\'#canvas\').offset()
函数并完成它。 :)     ,        通常,当您“取消投影”一个像[x,y,z,1]这样的剪辑空间点时,您会在从视点发出的光线上得到一个点(在您的情况下,它穿过您单击的顶点)。 z的值将确定您在该射线上的位置。几乎可以保证您不会得到您点击的点。 因此,您要做的就是计算该光线(例如,通过取消投影[x,y,0,1]和[x,y,1,1]之类的两个点并计算未投影点所在的线),然后测试您的哪个顶点位于该射线上。 编辑:另外,您还要确保已将
world1
的前三个坐标除以第四个坐标。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?