问题标签 [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.
3d - 3D 图形选择 - 这种情况的最佳方法是什么
我正在开发一个允许用户在场景中选择 3d 对象的项目,我想知道每个人都认为处理这个特定场景的最佳方法是什么。
基本上我们有一个包含至少 100 个对象的场景(它们是低多边形,但由至少 ~12-15 个三角形组成)和最多约 1000-2000 个对象。
并非所有对象始终都是“可拾取”的,因为某些对象会遮挡其他对象,因此“可拾取”对象可能落在 800-1500 之间(取决于场景的复杂性)。
当一个对象被“拾取”时,我们希望它以某种方式突出显示,因此这意味着以不同的方式渲染它,这很简单,但我们希望不仅通过单击而且拖动来完成拾取 - 这意味着我们想要运行拾取在很短的时间内算法很多。理想情况下,用户会在对象仍处于“拖动”操作时看到突出显示的对象 - (这意味着应该异步完成拾取,以免滞后于主渲染?)。
我尝试过简单的光线追踪拾取,但这显然很慢,因为我们循环遍历场景中的所有三角形以找到对象。
我还尝试过基于 GPU 的拾取 - 使用像素缓冲区渲染场景,为每个对象提供独特的颜色,但通过拖动操作,这意味着多次渲染和 GPU 到 CPU 的数据传输,性能不佳。
我是否可以探索其他可能性来尝试获得我想要的性能和功能?
谢谢你的时间。
ios - opengl iOS glkit 颜色拾取
它是关于使用颜色挑选来挑选 3d 对象的。我将我的网格(更新:它驻留在静态头文件中,并在同一个项目中的屏幕上很好地显示)绘制到一个新的屏幕外帧缓冲区,然后我使用 glReadPixels 来识别用户是否触摸它。
遵循 Erik M.Buck 的“Learning OpenGLES for iOS”一书中的 opengles_ch10_1 项目代码,我编写了以下代码,该代码始终打印以 nslog 拾取(通过点击)像素的颜色 0,0,0。
我的代码是:
ios - opengl glkit 颜色拾取 glreadpixels 总是返回零彩色像素(0,0,0)
下面的代码可以是一个完整的使用 glkit 进行颜色挑选的模板。我只需要了解为什么屏幕外缓冲区中的所有像素都是彩色的(0,0,0),如下面打印到 nslog 中的那样。注意:顶点数组在头文件中定义为 const 数组,它在我项目的另一部分的屏幕上很好地显示(我的问题是屏幕外)。
头文件:
在 viewController 代码中:
iphone - 使用 NinevehGL 或 OpenGL i-phone 进行 3D 光线追踪
我找不到使用光线追踪方法在 3D 中拾取的正确且可理解的表达方式。有没有人用任何语言实现过这个算法?直接分享工作代码,因为伪代码不能编译,所以一般都是缺部分写的。
c++ - 使用深度缓冲区进行光线拾取:非常不准确?
我正在尝试实现一种光线拾取算法,用于绘制和选择块(因此我需要相当高的准确性)。最初我采用了光线投射实现,但我觉得它不够准确(尽管问题可能出在我的相交测试上)。无论如何,我决定尝试使用深度缓冲区进行拾取,并将鼠标坐标转换为世界坐标。下面的实现:
问题是这些值很容易达到 ±3 个单位(块为 1 个单位宽),只有在非常接近近剪裁平面时才足够准确。
不准确性是否源于使用单精度浮点数,或者可能是我计算中的某个步骤?如果我使用双精度值会有帮助吗?OpenGL 甚至支持深度缓冲区吗?
最后,如果这种方法不起作用,我是否最好使用颜色 ID 来准确识别选择了哪个多边形?
webgl - 如何在 Dart WebGL 应用程序中加速波段选择工具
手头的任务是向 Dart WebGL 应用程序添加波段选择工具。该工具将用于通过拖动鼠标在多个对象上绘制一个矩形。因此,可以在单个用户操作中选择/挑选多个对象。我目前正在使用 gl.readPixels() 从屏幕外渲染缓冲区中读取颜色。问题是,当一个大区域被波段选择时, gl.readPixels() 会发出数百万像素。扫描如此大量的颜色会浪费宝贵的时间来定位少数物体。
请任何人指出使用 Dart+WebGL 对多个对象进行波段选择的可能更快的方法。
作为参考,我在下面显示了波段选择工具的当前主要部分。
graphics - 检测光标附近的物体以捕捉到 - 拾取射线的任何替代方法?
在检测鼠标光标附近的对象以捕捉到(在 3d 视图中)的问题中,我们使用了拾取射线方法(它基本上形成光标直接邻域的 3d 区域,然后检测该区域中存在的对象)。
我想知道这是否是解决任务的唯一方法。例如,我可以使用视图矩阵获取对象在视图空间中的 2D 坐标,然后搜索光标附近的任何对象吗?
我对拾取射线方法不满意,因为它相对昂贵,所以问题本质上是关于任何基于空间变换的方法通常是否会更快。我是 3D 编程的新手,所以请给我一个深入研究的方向。
opengl - Trackball issue with Raypicking
I'm trying to develop a 3D raypicking in my OpenGL scene.
I have a working OBJ loader with a trackball.
Here trackball's functions:
If I cast a ray (CTRL + Left_click) at the beginning It works with correct 3D far_point and near_point If I rotate the object (use Trackball), the ray doesn't use real eye/far points and I can't figure out why. I've tried with GluLookAt instead of glRotatef, but I can't figure out how to move camera with mouse like this trackball does.
java - LWJGL 光线拾取 (gluUnProject)
因此,我一直在浏览教程(以及此站点上的问题),但没有找到任何可以解决我的问题的方法。这是我正在尝试实现的当前代码:
我有 mouseX 和 Y 设置我的方式,因为我的鼠标被抓住了。这是一个图像和一些输出给你。(我无法真正解释问题)
位置:0.0、0.0、0.0 旋转:0.0、0.0、0.0 近平面:0.0、0.0、-0.1 远平面:0.0、4.2315264、-99.99771
因此,对于 X:0 Y:0 Z:0 的旋转,Y 坐标的预期输出应该与输入相同。它更高。这是该输出的图片。
谁能给我一些提示或解释为什么会发生这种情况?
编辑:Facepalms猛烈:我在第二个gluUnProject的Y参数中推动mouseX
java - 如何将鼠标坐标转换为世界坐标
我想做的事
挑选一个对象。
要求/条件
- 我的鼠标总是在屏幕中央。
- 只选择第一个/最近的对象
我想知道的
如何将我的鼠标坐标(实际上是 0,0,因为鼠标锁定在中间)转换为世界坐标?
如何获得实际的视图方向?
我认为我必须做的
伪代码