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

mouseover - 将鼠标 X 和 Y 转换为 3D 模型坐标

我正在构建一个简单的 3D 拖放界面进行处理,并希望检测鼠标何时滑过一个对象。我想我需要对 3D 模型坐标进行一些矩阵转换,以将它们放入屏幕空间等等......

我有这个工作的简单版本,问题是当相机在场景中移动时,我得到的坐标会变得混乱。

那么如何将平铺坐标转换为屏幕空间(因为 screenX 和 screenY 无法正常工作)?

更新: 我最终从处理站点中找到了两个关于如何执行此操作的示例。感谢villintehaspam

http://processing.org/hacks/hacks:picking

0 投票
3 回答
4527 浏览

iphone - OpenGL ES (iPhone) 触摸拾取

希望在 ES 中进行经典的 OpenGL 鼠标拾取。我宁愿不使用第三方库,GLU 端口和 OpenGL 名称堆栈等都已淘汰。这几乎留下了逆视图变换和光线相交,对吗?

在以下帮助下,我已经走得很远了:http: //trac.bookofhook.com/bookofhook/trac.cgi/wiki/MousePicking http://eigenclass.blogspot.com/2008/10/opengl-es-picking-使用-ray-boundingbox.html

. . .但我还没到。这也让人觉得必须有更简单的方法!!

这是一些代码:

0 投票
1 回答
394 浏览

directx - 如何为游戏关卡编辑器实现平移和旋转小部件

我正在开发游戏编辑器。为了检测 3D 模型上的鼠标点击,我正在使用鼠标拾取概念。但我想像其他游戏编辑器一样实现平移和旋转小部件,在模型中心在三个方向上使用实际箭头。如何实现这一目标..?任何人都可以建议相同的示例代码吗?

0 投票
3 回答
4348 浏览

c# - XNA 2D鼠标拾取

我正在使用 XNA 开发一个简单的 2D 实时战略游戏。现在我已经到了需要能够单击单元或建筑物的精灵并能够引用与该精灵关联的对象的地步。从我过去三天所做的研究中,我发现了许多关于如何在 3D 中进行“鼠标选择”的参考,这似乎不适用于我的情况。我知道另一种方法是简单地拥有一个世界上所有“可选”对象的数组,当玩家点击一个精灵时,它会根据数组中所有对象的位置检查鼠标位置。我对这种方法的问题是,如果单元和建筑物的数量增长到更大的数量,它会变得相当缓慢。(它看起来也不是很优雅)所以我还有其他方法可以做到这一点。(请注意,我还研究了使用哈希表将对象与精灵位置相关联的想法,并使用二维数组,其中数组中的每个位置代表世界上的一个像素。再一次,它们看起来更像笨拙的做事方式。)

0 投票
1 回答
1607 浏览

c++ - OpenGL中的颜色编码拾取问题

我正在为我的一个班级项目制作一个游戏,实际上是 Minecraft 的一个非常基本的复制品。我现在被困在挑选过程中,这将使我能够在游戏环境中破坏和创建块。

我一直在尝试使用 OpenGL 自己的拾取模式,但没有成功,使用数学库构建我自己的光线拾取器似乎对于这种规模的项目来说是一项很大的工作。所以,我决定使用颜色编码的拾取方法,它包括用不同的颜色渲染每个可拾取对象,然后在鼠标位置获取颜色并使用它来识别拾取的对象。

我当前的界面只是许多堆叠的盒子的 3D 渲染,创建了一个类似地形的结构。由于我还没有进行纹理映射,所有的框都是灰色阴影(启用照明)。

现在,是时候写一些实际的代码了:

这是初始化部分,启用纹理、照明等。

单击鼠标按钮时,我尝试通过以下方式获取鼠标光标位置(实际上始终是窗口中间)的颜色:

问题是,禁用不起作用,我总是在我的pixels数组中获得不同灰度的 RGB 值。

可能是什么问题呢?

0 投票
1 回答
1922 浏览

opengl - OpenGL鼠标拾取策略

我正在使用 OpenGL 渲染在给定平面中旋转对称的对象模型,并且我希望用户能够滚动模型(可能在旋转、缩放等之后)并确定世界坐标鼠标当前指向的模型。

我提到对称性的原因是我使用单个组件的VBO构建模型以便于使用。与我正在做的事情的类比是自行车车轮 - 我将有一个 VBO 用于辐条,一个用于轮毂,一个用于车轮/轮胎,我会多次重复使用辐条 VBO(之后合适的平移和旋转)。我的第一个问题是,这种安排是否有利于我正在尝试做的那种挑选?例如,我希望生成的模型中的每个人都可以“挑选”。我是否需要为网格中的每个四边形/三角形使用单独的 VBO 来进行我想要做的那种选择?我真的希望不是这样...

另外,最好的挑选算法是什么?我只听说过关于 OpenGL 内置选择模式的负面消息。提前致谢!

0 投票
1 回答
757 浏览

opengl - glTranslate / glRotated 之后的openGL拾取

我写了一个pick函数,从opengl画布中挑选场景对象。

如果我在绘制对象时不使用 glTanslate 或 glRotated ,这将非常有效,即,我可以在绘制时选择线条,

但当我这样做时,

我错过了什么?

0 投票
1 回答
263 浏览

3d - 世界空间视图向量与世界点的交集

从屏幕坐标计算世界空间视图矢量(使用 Click to zoom in WebGL)后,给定一个顶点数组,我如何找到世界空间中最近的交点?

0 投票
2 回答
1245 浏览

java - Java鼠标在钻石平铺地图上拾取

好吧,我束手无策。我正在尝试创建一个比屏幕更大的小的等距平铺地图,我可以通过鼠标拖动来修改视点。我画对了(我认为),我得到了拖动工作,只是似乎无法正确选择鼠标。到目前为止,我已经做到了几乎正确的瓷砖,但它偏离了大约一半的瓷砖尺寸,我找不到弥补偏移的方法。

这是代码:

我在 click 方法中有一些公式我试过了,但它们不起作用(x 和 y 轴以这种方式倒置,还没有试图找出原因)。如果有人能指出我正在犯的错误,我将不胜感激。

0 投票
1 回答
1782 浏览

opengl - 如何设置和使用持久帧缓冲区对象来进行独特的颜色选择?

自从第一次提出这个问题以来,这个问题发生了很大变化,因为我不明白我对自己所问的内容知之甚少。还有一个问题,关于调整大小,使我无法理解创建和使用帧缓冲区的更大问题。如果您只需要一个帧缓冲区跳转到答案......对于历史,我已经完好无损地保留了原始问题。


新手问题。我有一个正在处理的 GL 项目,并正在尝试使用独特的颜色制定选择策略。大多数讨论/教程都围绕在后台缓冲区中绘制可选实体并在用户单击某处时计算选择进行。我希望选择缓冲区是持久的,因此我可以快速计算任何鼠标移动的命中,并且不会重绘选择缓冲区,除非显示或对象几何形状发生变化。

似乎最好的选择是专用的帧缓冲区对象。这是我的问题。除了对帧缓冲区对象完全陌生之外,我很好奇。我最好是在窗口大小事件上删除和重新创建帧缓冲区对象,还是以最大屏幕分辨率创建一次,然后使用可能只是其中的一小部分。我已经让我的事件正常工作,只为可能是许多调整大小事件的流调用一次帧缓冲区例程,但我担心 GPU 内存碎片或其他问题,可能多次重新创建缓冲区。

此外,帧缓冲区对象(纹理和深度)在仅使用其中一部分时是否会连贯地表现。

想法?我完全离谱吗?

编辑:我已经设置好我的帧缓冲区对象,现在可以在窗口尺寸下工作,我用窗口调整它的大小。我认为我的问题是经典的“过度思考”。虽然确实应该尽可能避免在 GPU 上删除/重新创建对象。只要处理得当,调整大小相对较少。

我发现有效的是在窗口调整大小时设置一个标志并将缓冲区标记为脏,然后在调整缓冲区大小之前等待正常的鼠标事件。正常的鼠标进入或移动表明您已完成将窗口拖动到合适的大小并准备好重新开始工作。缓冲区重新创建一次。此外,由于主帧缓冲区的大小通常会针对管道中的每个窗口大小事件进行调整,因此调整帧缓冲区的大小不会在您的笔记本电脑上烧毁一个洞是有道理的。

危机解除,继续!