问题标签 [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 投票
2 回答
6628 浏览

ios - iOS 上的 OpenGL ES 2.0 对象拾取

选择已在 OpenGL ES 2.0 (iOS) 中绘制的对象的最佳方法是什么?

我在画点。

0 投票
1 回答
359 浏览

xcode - 将拾取的光线与 OpenGL 中的形状相交

我正在尝试在 OpenGL 中进行挑选,并且在 1 中有 3 个问题。

  1. 我使用了两次 Unproject 命令,一次使用 0,一次使用 1 作为近/端平面。有些文章说 0 和 1 都可以,有些文章说我应该使用计算出的深度。我应该拿哪一个?

  2. 然后,假设我可以减去两个结果,这给了我一条射线(射线从我的“相机”到指示为 x、y、z 的方向,对吗?x、y、z 是绝对值或相对于我的“相机” ?

  3. 现在我有了射线,我怎样才能将它与形状相交?顺便说一句,我如何列出现有形状并计算它们与射线的坐标?

0 投票
4 回答
3008 浏览

c++ - 在实施 openGL 拾取时遇到了困难

我已经能够找到我单击的地方的世界坐标,并且它还使用深度缓冲区检查它。为此,使用以下代码:

x_cursor 和 y_cursor 是我的光标坐标。

到目前为止一切都很好,在打印 x,y,z 时它们似乎很好!

但是现在......在解析了包含所有多边形/三角形的文件之后。我把所有东西都放在了 openGL 显示列表中。所以我的程序基本上只是调用列表,并翻译/旋转它们。每个对象都有一个唯一的名称。所以我只保留列表,我不保留每个对象的点/三角形

我的问题 :

所以我有我点击位置的世界坐标,但我怎样才能确定哪个对象与该位置匹配!?

0 投票
1 回答
4647 浏览

colors - iOS 5 + GLKView:如何访问像素 RGB 数据以进行基于颜色的顶点拾取?

我一直在转换我自己的个人 OGLES 2.0 框架以利用新的 iOS 5 框架添加的功能GLKit

在获得令人满意的结果之后,我现在希望实现此处描述的基于颜色的拾取机制。为此,您必须访问后台缓冲区以检索触摸的像素 RGBA 值,然后将其用作顶点/图元/显示对象的唯一标识符。当然,这需要对所有顶点/基元/显示对象进行临时唯一着色。

我有两个问题,我将非常感谢您的帮助:

  1. 我可以访问GLKViewController, GLKView, CAEAGLLayer( 的GLKView) 和EAGLContext. 我还可以访问所有与 OGLES 2.0 缓冲区相关的命令。如何结合这些来识别我在屏幕上点击的 EAGLContext 中像素的颜色?

  2. 鉴于我正在使用顶点缓冲区对象进行渲染,是否有一种巧妙的方法来覆盖提供给我的顶点着色器的颜色,它首先不涉及修改缓冲顶点(颜色)属性,其次不涉及添加IF 语句进入顶点着色器?

我假设 (2) 的答案是“否”,但出于性能和不费力的代码修改的原因,我认为与更有经验的人核实是明智的。

任何建议将不胜感激。感谢您的时间

更新

好吧,我现在知道如何使用glReadPixels从活动帧缓冲区读取像素数据。所以我想我只需要对后台缓冲区进行特殊的“独特颜色”渲染,短暂切换到它并读取像素,然后再切换回来。这将不可避免地产生视觉闪烁,但我想这是最简单的方法;CGImageContextRef当然比从屏幕快照创建并以这种方式分析更快(也更明智) 。

尽管如此,关于后台缓冲区的任何提示将不胜感激。

0 投票
1 回答
761 浏览

opengl - 光线拾取 - 从俯仰和偏航中获取方向

我正在尝试从屏幕中心投射光线并检查与物体的碰撞。

渲染时,我使用这些调用来设置相机:

但是,我在创建射线时遇到了麻烦。这是我到目前为止的代码:

我的问题是:我应该在问号点上放什么?即如何从俯仰和滚动创建射线方向?

0 投票
0 回答
1541 浏览

c# - SkinnedModel 上的 XNA 三角形拾取

我的游戏使用 SkinnedModel 管道和 AnimationPlayer 来加载和显示模型。我通过从管道中构建顶点和索引列表来实现使用三角形的光线拾取。这可行,但是索引是静态的,仅适用于模型的初始姿势(当它走路时,手臂来回移动,它不够好,因为拾取只看到模型在一个位置)

我通过在运行时获取顶点和索引将其更改为使用三角形进行光线拾取,然后它能够​​通过 AnimationPlayer 提供的 boneTransforms 转换顶点。我现在遇到的问题是我不太清楚在收集顶点时如何转换它们

我将在下面发布代码,但我很确定它与以下行有关:Matrix worldMatrix = Orientation * Matrix.CreateTranslation(Position); 然后稍后在获取特定顶点时: vert = Vector3.Transform(vert, boneTransforms[mesh.ParentBone.Index] * worldMatrix);

我发现省略 *Matrix.CreateTranslation(Position) 会使顶点接近,但不太正确。我不太擅长处理 3d 空间和变换,因此将不胜感激。

代码:

//这是我从类模型中获取顶点的函数

//这里是获取pick ray的函数

//这里有两个检查交叉点的函数。

//最后,如果有帮助的话,我的更新部分使这一切发生

0 投票
2 回答
1637 浏览

opengl - 3D采摘lwjgl

我已经编写了一些代码来执行 3D 选择,由于某种原因不能完全正确地工作!(我正在使用 LWJGL,所以你知道。)

这是代码的样子:

我只是不明白出了什么问题,光线正在射击,我确实击中了被移除的东西,但光线的结果非常奇怪,它有时会移除我点击的东西,有时它会移除甚至不接近我的东西点击,有时它什么也没有删除。

编辑:

好的,所以我继续寻找错误并通过调试射线(通过在它移动的地方绘制小点)我现在可以确定我发出的射线有什么明显的错误......它起源于世界中心附近无论我将相机指向哪里,总是拍摄到相同的位置......

我最初的想法是我计算 viewMatrix 的方式可能存在一些错误(因为无法从 lwjgl 中的 glulookat 方法获取 viewmatrix;我必须自己构建它,我猜这就是问题所在) ...

编辑2:

这是我目前的计算方式:

如果有人能验证这是对还是错,以及是否错了,那就太好了;为我提供正确的方法......我已经阅读了很多关于这个的线程和文档,但我无法缝合我的头......

0 投票
1 回答
3498 浏览

opengl - openGL 中的颜色选择

我一直在尝试实现颜色选择,但它不能正常工作。问题是,如果最初用用于采摘的不同颜色绘制我的模型(我的意思是,我给每个三角形不同的颜色,这是他的 id 颜色),它可以正常工作(没有纹理或任何东西..),但是如果我放置模型的纹理,并且当单击鼠标时,我通过为每个三角形赋予不同的颜色来绘制模型,它不起作用..这是代码:

私人无效drawTriangle(GL_Triangle t,int i,布尔inPickingMode){

如您所见,我有一个每次单击鼠标时都会调用的选择功能,然后我禁用照明和纹理,然后以独特的颜色再次渲染场景,然后读取像素缓冲区,然后调用: GL11.glReadPixels(x, y, 1, 1, GL11.GL_RGB, GL11.GL_UNSIGNED_BYTE, pixelbuff); 给了我错误的价值观..它让我发疯!顺便说一句,主要的渲染函数是render(mesh m, boolean inPickingMode),你可以看到,你也可以看到鼠标点击之前模型上有纹理..

0 投票
1 回答
139 浏览

javascript - JavaScript if 参数,忽略图像中的透明度

我需要将 if 参数设为可选。如果这是有道理的。

如果您注意到我的两个功能 98% 相同,我需要将这种差异转换为参数,它只是不适合我。

getElement(x, y, class)

新参数类更改了我在代码中标记为 //HERE 的内容

我在想类似的东西

getElement(x, y, "title");

顺便说一句,如果你想看看这只小狗在行动,我在http://untitled.servegame.com 。

谢谢!

0 投票
0 回答
1728 浏览

c# - 用鼠标 XNA 4.0 C# 控制 3D 模型

我正在创建一个 3D 乒乓球游戏,球拍(在 Maya 2012 中创建)由鼠标控制。我已经使用拾取方法来控制球拍,但是光标不在球拍上,它距离球拍大约 10 厘米。

球拍类如下所示,move() 方法进行挑选。

任何帮助将光标放在球拍上的帮助将不胜感激。谢谢!!!:)