问题标签 [mouse-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 回答
9456 浏览

opengl - 使用光线投射的对象拾取

我的光线投射算法在检测盒子内的鼠标命中时一直存在不准确的问题。我完全不知道如何正确解决这个问题,而且它已经困扰了我好几个星期。

这个问题最容易用一张图片来描述(以 [0, 0, -30] 为中心的框):

问题截图

黑线代表实际绘制的命中框,绿框代表实际看起来被命中的地方。注意它是如何偏移的(如果框离原点更远,它似乎会变大)并且比绘制的碰撞框略小。

这是一些相关的代码,

光线盒演员表:

鼠标到射线:

我尝试将实际光线绘制为一条线,它似乎正确地与绘制的框相交。

我通过框位置减去所有点和射线原点/方向来部分解决了偏移问题,但我不知道为什么会这样,并且命中框的大小仍然不准确。

有什么想法/替代方法吗?如果需要,我还有其他代码可以提供。

0 投票
2 回答
2624 浏览

opengl - 数百万个基元的鼠标选择策略是什么?

我正在使用 VBO 渲染基于数百万个(最多十个)三角形的模型,我需要检测用户可以点击哪些三角形。

我尝试阅读并理解“名称堆栈”和“唯一颜色”是如何工作的。我发现名称堆栈最多只能包含 128 个名称,而唯一颜色最多可以有 2^(8+8+8) = 16777216 种可能的不同颜色,但有时可能会有一些近似值,所以它可以得到修改的..

哪种策略最适合我的情况?

0 投票
2 回答
2026 浏览

opengl - 如何使 opengl 对象出现在鼠标单击时?

我需要做的是在我的 OpenGL 视口上单击某处并在该位置渲染一个对象。我已经知道基本的东西,即创建窗口、检测鼠标点击、获取点击坐标和绘制对象。我缺少的链接是正确的坐标。我需要确定我在屏幕上单击的 (X,Y) 点意味着什么是 openGL 世界坐标。我知道一个名为 gluUnProject 的 GLUT 函数,但由于技术原因,我不能使用 GLUT。我检查了许多算法来手动制作我自己的 unproject 函数:

http://schabby.de/picking-opengl-ray-tracing/ http://collagefactory.blogspot.mx/2010/03/gluunproject-source-code.html OpenGL 数学 - 将屏幕空间投影到世界空间坐标

和其他人,但没有工作,当我点击屏幕时,对象被绘制在奇怪的地方。我什至不确定我在这里寻找什么,我不知道我要实现的是 Picking,还是 Raycasting 或 Raypicking 或其他东西。有谁知道我正在寻找的算法?

编辑:我正在添加一个屏幕截图,我标记了我单击的位置,如您所见,球体正在另一个位置绘制。 http://img23.imageshack.us/img23/4738/proofxd.jpg 我还添加了我的opengl源代码:

0 投票
3 回答
1476 浏览

opengl - 3d 线鼠标采摘

我有数千行的 3d 场景。我希望能够在鼠标光标的 10 像素邻域中选择所有 3d 线(使用透视投影)。我尝试使用基于独特颜色的方法。但是这种方法不适合我,因为我不能选择所有行 - 只能选择最接近的行。我的问题有什么可以接受的解决方案吗?OpenGL 或 DirectX - 没关系。

0 投票
1 回答
1153 浏览

java-3d - java3d 拾取对象

我正在构建一个 java3d GUI,用户可以使用它创建自定义场景图,而无需知道代码,我想使用鼠标选择特定的框,并且我希望能够移动它们......所以我需要选择..

我的场景图中有 2 个盒子和 2 个球体。我只想选择其中一个,并知道选择了哪一个。我可以找出单击了哪种类型的对象,例如,如果我单击特定的球体或框,我可以找到它,但是我不知道如何找出它是哪个对象,因此我可以对其进行处理。

谁能建议我解决这个问题?我只想知道选择了哪个对象。就这样。

0 投票
1 回答
593 浏览

image-processing - C++/CLI:用于应用 Alpha 阈值的 ColorMatrix

有谁知道如何指定 ColorMatrix(特别是 C++/CLI 中的 System::Drawing::Imaging::ColorMatrix)来设置 alpha 阈值?例如,如果我使用 10 (10/255) 作为阈值,那么任何 RGBA Alpha 为 10 或更低的像素都将具有 0.0f Alpha,并且上面的每个像素都会得到 1.0f。

我正在尝试在 2D 场景编辑器中实现 ColorID 拾取,因为我厌倦了使用当前笨拙的方法来反转我的绘图转换来确定鼠标指向给定位图的哪个像素。所以我想做的是像这里描述的那样在 OpenGL 中进行 ColorID 渲染传递http://content.gpwiki.org/index.php/OpenGL_Selection_Using_Unique_Color_IDs但是我不能像大多数人一样只比较屏幕上位图的位置包括大量我不想被鼠标拾取的空白空间,这让我不得不选择颜色。

现在我的 ColorMatrix 看起来像

遵循 Hans 对 GDI+ 的回答:将所有像素设置为给定颜色,同时保留现有的 alpha 值,但我希望它也将阈值应用于 Alpha 组件(假设甚至可以使用 ColorMatrix)

0 投票
1 回答
457 浏览

webgl - 在 Three.js Picking Ray 中,对象如何仅移动 X、Z?不是Y

现在对象向各个方向移动。但我想对象只移动 X 或 Z,而不是 Y。

我试试这个。但结果并不好。

在鼠标移动

我怎么解决这个问题?

0 投票
1 回答
4423 浏览

c# - OpenTK 鼠标拾取

我开发了一个小的 C# 示例,通过使用 OpenTK 和 winforms 来挑选要点

有一种方法可以绘制正方形,还有另一种方法可以选择三角形。不知何故,我没有得到任何点击。Readpixel 方法有什么问题吗?因为我刚刚使用正确的方法将 Tao 采摘样本转换为 OpenTK?你能告诉我我的方法有什么问题吗?

0 投票
1 回答
5677 浏览

c++ - 使用`gluUnProject`在opengl中选择鼠标

我有一个场景,我正在使用 openGL 在其中渲染几个立方体(程序结构不使用 GLUT,它在 win32 程序结构中,但我只是用 绘制立方体glutSolidCube)现在我想通过鼠标选择这些立方体。这就是我正在做的事情:首先,当用户在场景上单击鼠标按钮时,我得到鼠标位置并尝试在场景坐标中找到它的坐标(templateSkeletons 是我用立方体创建的骨架,仅此而已):

这是GerOGLPos我在场景中检索坐标的函数(请注意,我有自己的 camrea 和它自己的投影矩阵,但我只是通过调用在这个函数中获取投影矩阵这glGetDoublev (GL_PROJECTION_MATRIX, projmatrix);是错误的,我应该得到我自己的 camrea 的投影矩阵 ? ) :

现在我想我有两个点指示我在场景中的拾取射线。现在,当我渲染立方体时,我尝试计算由射线和立方体创建的线的距离,如果它小于某个值,我会更改立方体的颜色以知道我选择了它(jointsOfSkeleton 表示每个立方体创建骨架仅此而已,在这里我只测试数组中的 6 号立方体):

当我单击窗口上不相关的位置时,我看到立方体的颜色发生了变化,它无法正常工作,我正在查看调试器上的距离并且距离看起来不正确。这是我用来查找线点距离的函数:

0 投票
1 回答
4007 浏览

opengl - 如何在没有 gluUnProject 的情况下在现代 OpenGL 中进行挑选?

在不使用 gluUnProject 的情况下,如何在现代 OpenGL 中将屏幕坐标转换为世界坐标?