问题标签 [ray-picking]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
199 浏览

opengl - 如何计算我的相机的 UP 和位置?

我想在我的游戏中实现
我按照指南来实施它。

为了计算实际光线,我缺少lookAtup向量。

问题

我使用glRotateandglTranslate而不是gluLookAt(eye,target,up)旋转和移动相机。

问题

我如何计算lookAtup从我的旋转和平移/矩阵?

代码片段

使用键盘移动相机

用鼠标旋转相机

更新相机






我的实现

相机

采摘

0 投票
1 回答
349 浏览

javascript - 三J中使用正交相机时如何选择物体

我有一个等距关卡,我正在尝试选择关卡内的对象。

我查看了一些 Stackoverflow 答案,包括这台正交相机和使用光线投射选择对象,但目前似乎没有任何效果。有问题,可能与我的相机设置有关,所以这是我正在使用的相关代码。

当我遍历我的矩阵并添加图块时,我将它们全部添加到 anew THREE.Object3D()然后将该对象添加到场景中。我的onMouseMove活动看起来像这样

现在的问题是,有些东西很不对劲。当光线不在物体附近时,光线会与物体相交,并且似乎同时与多个孩子相交tiles。如果我记录intersects.length它有时会返回 3、2 或 1 个对象。以防万一;我对每个对象网格的材质是一个new new THREE.MeshFaceMaterial()包含 6 个new THREE.MeshBasicMaterial()传入的数组。

有任何想法吗?

0 投票
1 回答
2260 浏览

opengl - 从鼠标坐标创建射线以进行 3D 拾取

我的问题

有人可以链接一篇好文章/教程/任何东西,或者甚至解释如何正确地从鼠标坐标投射光线以选择 3D 对象吗?
我已经有了射线和相交的作品,现在我只需要通过鼠标点击来创建射线。

我只是想要一些我知道实际上应该起作用的东西,这就是为什么我在这里问专业人士,而不是我一开始就不确定它是否正确的东西。


现在状态

我有一个射线类,如果我将原点和方向设置为与相机相同,它实际上可以工作并检测相交,所以当我移动相机时,它实际上选择了正确的东西。

现在我想用鼠标实际进行 3D 拾取,而不是相机移动。
我已经阅读了很多关于此的其他问题,2 个教程,尤其是许多不同的数学内容,因为我真的不擅长它。
但这对我没有多大帮助,因为那里的人经常使用一些“unproject”功能,这些功能似乎实际上已被弃用,我不知道如何使用也无权访问。

现在我将光线原点设置为相机位置,然后尝试从本教程中的计算中获取光线的方向。
有点作用,这意味着当相机指向对象时选择起作用,有时也沿着整个 y 轴,我不知道发生了什么。

如果有人想立即查看我的代码:

0 投票
2 回答
1014 浏览

opengl - 通过 2 个 gluUnproject 调用在世界坐标中获取鼠标以创建射线

我尝试使用许多人似乎找到的好方法,我用不同的 z 值调用 gluUnproject 2 次,然后尝试从这两个向量计算射线的方向向量。

我阅读了这个问题并尝试将那里的结构用于我自己的代码:

但这只会返回同质剪辑坐标(我相信),因为它们在每个轴上的范围仅从 -1 到 1。

如何实际获取可以创建射线的坐标?

编辑:这就是我构造矩阵的方式:

编辑2:

这是函数现在的样子:

}

我正在尝试使用我自己的投影和视图矩阵,但这似乎只会给出更奇怪的结果。
使用 GlGet... 的东西,我在右上角点击一下:
开始:(0.97333336,-0.98,-1.0)
结束:(0.97333336,-0.98,1.0)

当我使用自己的东西时,我会得到相同的位置:
开始:(-2.4399707,-0.55425626,-14.202201)
结束:(-2.4399707,-0.55425626,-16.198204)

现在我实际上需要一个模型视图矩阵而不仅仅是视图矩阵,但我不知道我应该如何获得它,因为它在每个对象的每个显示调用中都被更改并重新创建。
但这真的是问题吗?在教程中,他说“通常,要从眼睛空间进入剪辑空间,我们将向量乘以投影矩阵。我们可以通过乘以该矩阵的逆矩阵来向后退。” 在下一步中,他再次乘以视图矩阵的倒数,所以我认为这就是我应该做的?

编辑 3:
在这里我尝试了 user42813 的建议:

但是现在方向和原点值始终相同:
原点:(-0.04557252,-0.0020000197,-0.9989586)
方向:(-0.04557252,-0.0020000197,-0.9989586)

0 投票
1 回答
175 浏览

opengl-es - 在 OpenGL es 2.0 中将屏幕坐标投影到世界

长期聆听者,第一次来电者。所以我一直在玩Android NDK,我正处于一个我想取消投影到世界坐标的点上,但我无法让它工作。问题是近点和远点的 x 和 y 值相同,这对于透视投影似乎不正确。场景中的一切都画得很好所以我有点困惑为什么它不能正确地取消投影,无论如何这是我的代码请帮助谢谢

0 投票
2 回答
87 浏览

c++ - opengl中的“对象映射”

简而言之:众所周知,opengl 在屏幕上绘制了许多三角形。

我想知道的:

如果opengl画三角形,它必须知道,哪个三角形属于屏幕上的哪个像素,对吧?

我也能得到这些信息吗?例如,在绘制(类似gl_retrieve_object_map()或类似的东西)之后调用一个函数,让我知道哪个像素显示哪个三角形?

就像为每个像素做挑选一样

我正在考虑一个二维数组,告诉我三角形索引或其他什么:

例如,在 10x10 像素的屏幕上:

对于像这样的图像:

有什么我可以用的吗?

0 投票
1 回答
123 浏览

android - 在 openGL ES 中获取用于光线拾取的光线

好的,所以我将此代码用于 opengl ES 的光线,但我遇到了错误

在代码的最后。它说,

无法解析符号

这是代码:

问题是什么?

0 投票
0 回答
1185 浏览

android - 用于android的opengl es中光线拾取的交叉测试

好的,所以我能够获得触摸的 3d 空间中的坐标,现在我需要测试该光线是否与三角形相交。我要求的是帮助理解测试类。顺便说一句,此代码来自http://android-raypick.blogspot.ca/2012/04/first-i-want-to-state-this-is-my-first.html。我知道将射线和一个空的浮点数组传递给 intersectRayAndTriangle() 但测试 T 是 V0[]、V1[] 和 V2[] 但我在哪里可以得到它们?它们是我对象的转换坐标吗?如果是这样,那么我将如何实现一个具有多个三角形的对象?

我的代码是:

表面视图:

然后我的渲染器:

测试类:

0 投票
1 回答
216 浏览

c++ - DirectX中是否有指定的Ray对象

我在 DirectX 项目中使用光线拾取做了一些工作,我只是想知道是否存在实际的“光线”对象类型?(而不仅仅是存储方向/原点变量)

我知道我可以创造类似的东西

但是有什么东西已经存在了吗?我目前在 DX9 工作,但我愿意接受较新版本的 DirectX 中的答案。

0 投票
3 回答
309 浏览

c++ - 用于光线拾取的“Ray”创建未完全正常工作

我正在尝试实现一个“raypicker”来选择我的项目中的对象。我不完全理解如何实现这一点,但我从概念上理解它应该如何工作。我一直在尝试学习如何做到这一点,但是我发现的大多数教程都超出了我的想象。我当前的代码基于我发现的最新教程之一,here。

经过几个小时的修改,我相信我的光线选择器遇到的问题实际上首先是光线的创建。如果我用无可争议地位于三角形区域内的坐标替换/硬编码我的近/远平面,则选择器会正确识别它。

我的问题是:我的光线创建似乎没有完全考虑到我当前的“相机”或视角,因此相机旋转不会影响我的鼠标所在的位置。我相信要解决这个问题,我需要使用 gluUnProject() 之类的东西,但是每当我使用它时,返回的 x、y、z 坐标都会非常小,

我目前的光线创作是一团糟。我尝试使用其他人最初提出的方法,但似乎我尝试的任何方法都不适用于我的选择器/交叉点功能。

这是我的光线创建的代码:

重复一遍,我曾经加载视口、模型和投影矩阵,并取消投影鼠标坐标,但在 1920x1080 窗口中,我得到的只是每个鼠标事件的 xy 和 z 范围为 -2 到 2 的值,这就是我尝试这种方法的原因,但这种方法不适用于相机旋转和缩放。

我不想做像素颜色拾取,因为谁知道我以后可能需要这种技术,而且我宁愿在我到目前为止付出的努力之后不放弃