问题标签 [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.
android - android上的颜色选择-glReadPixels舍入错误
我在 android 上的 opengl es 中使用颜色拾取,我正在计算一个颜色键以将其与我从 glReadPixels 获得的值进行比较:
可以使用以下任何颜色手动计算此键:
首先将 float 值转换为 intvalue,然后将 castet 转换为字节。浮点值描述了颜色通道红绿蓝(从 0.0f 到 1.0f)。示例:0.0f 转换为 255(现在是整数),然后从 255 转换为 -1 字节
这工作正常,但 opengl 似乎有时会产生舍入错误。例子:
也许我的计算方法不正确?有谁知道如何避免这些偏差?
opengl - OpenGL GL_SELECT 还是手动碰撞检测?
如图所示
我将一组轮廓(多边形)绘制为 GL_LINE_STRIP。现在我想在鼠标下选择曲线(多边形)来删除,移动..等 3D 。
我想知道使用哪种方法:
1.使用OpenGL拾取和选择。( glRenderMode(GL_SELECT) )
2.使用手动碰撞检测,通过使用pick-ray并检查光线是否在每个多边形内。
opengl - 是否可以在主渲染循环之外渲染到帧缓冲区对象
我正在使用单独的帧缓冲区对象在 opengl 中拾色 2d 对象。我很好奇它是否可以只绘制到帧缓冲区并在需要时读取颜色。
我现在正在做的是在主渲染循环中,我将场景绘制到主帧缓冲区,然后仅将可选对象渲染到“拾取”帧缓冲区。
当用户单击鼠标时,它会绑定“拾取”帧缓冲区并读取像素,我知道选择了哪个对象。这样做的问题是,当用户单击鼠标时,我只需要“挑选”帧缓冲区,因此每帧都这样做效率低下。
当用户单击鼠标然后直接读取时,我尝试渲染到“拾取”帧缓冲区,但我得到的只是白色(背景颜色而不是告诉我它是哪个对象的颜色)。绘制“拾取”帧缓冲区只是将整个事物显示为白色,就像实际上没有渲染任何东西一样。
在渲染到“拾取”帧缓冲区时,我是否需要停止在主循环中绘图?还是我缺少一些东西可以使这成为可能?
编辑:我尝试在渲染到拾取帧缓冲区时不在主循环中绘图,但这也不起作用。
c - 你将如何解决这个 opengl 的必要性(在 c 中),包括知道用户点击了棋盘游戏中的哪个方格?
所以我有了这个棋盘,用来玩棋盘游戏……问题是,我怎么知道用户点击了哪个方格?我知道 x 和 y 坐标,但我如何自动化它,而不需要寻找每个正方形的具体位置。(此外,棋盘的大小是可变的……所以它可以有很多方格,也可以有很少的方格,但棋盘始终具有相同的高度和宽度,即从左到右的方格数与从上到下的正方形数量)。
非常感谢堆栈溢出:)
opengl - 使用 gluUnProject() 进行光线拾取
我在 y = -50 平面上有一个四边形。目前,我想做的就是获得鼠标点击四边形的坐标。我已经设法在有限的范围内做到这一点。问题是我在绘制四边形时应用的转换没有被考虑在内。我可以添加一些常量并使其工作,但是我让用户使用 glRotatef() 围绕 x 和 y 轴旋转场景,因此一旦发生旋转,坐标就会变得混乱。
这就是我现在正在做的事情:
我调用 gluUnProject() 两次,一次是 z = 0,一次是 z = 1。
归一化射线矢量:
参数方程:
其中 (camX, camY, camZ) 是传递给 gluLookAt() 的相机位置。
我希望 planeX、planeY 和 planeZ 成为在四边形上单击的坐标,在我用来绘制四边形的同一坐标系中。我怎样才能做到这一点?
iphone - iPhone:OpenGL ES:检测您是否在屏幕上点击了一个对象(立方体)
我已经问了一个类似的问题,这让我到了现在的位置,但我真的需要一些帮助。这是我完成很酷的事情的最后一件事(在我看来,哈哈)
我有一个可以四处移动的 3d 世界,在这个世界中是简单的立方体。
使用函数 -(CGPoint)getScreenCoorOfPoint:(IMPoint3D)_point3D 我可以计算出这些立方体在 3D 世界中的 X、Y 位置。但它不是基于我在哪里,而是基于他们在 3d 区域中的位置。使用相同的功能,我也可以计算出我在哪里。我还可以找出有人在屏幕上点击的位置。
我到底如何将这些映射在一起,以便我可以计算出我是否单击了其中一个?
当然,我需要一些东西来确定我面临的方向。人们建议将它们从屏幕上渲染出来并做点什么,但这完全超出了我的想象。我想废弃这个功能并基于 3d 坐标构建我自己的功能(不知何故)
代码
我也尝试了 gluUnproject 但没有成功(请参阅我的另一篇文章)
iphone - iPhone OpenGL ES:glReadPixels 不工作
我尝试使用 glReadPixels 实现一个简单的拾取功能,但是当我单击一个颜色为 1 的对象时,我会根据单击该对象的位置返回不同的值?有没有特殊的照明等?这是怎么回事?有时会返回全零。我关掉了所有东西(纹理等),但仍然没有快乐。
我以为这个函数会返回你点击的像素的颜色?
更新:添加了这个来修复它:
jogl - 慢跑采摘示例
大家好,我在 JOGL 项目中添加拾取对象时遇到了麻烦。我知道这可以通过选择缓冲区来完成。但我找不到任何人的例子?
c++ - OpenGL中的颜色编码拾取问题
我正在为我的一个班级项目制作一个游戏,实际上是 Minecraft 的一个非常基本的复制品。我现在被困在挑选过程中,这将使我能够在游戏环境中破坏和创建块。
我一直在尝试使用 OpenGL 自己的拾取模式,但没有成功,使用数学库构建我自己的光线拾取器似乎对于这种规模的项目来说是一项很大的工作。所以,我决定使用颜色编码的拾取方法,它包括用不同的颜色渲染每个可拾取对象,然后在鼠标位置获取颜色并使用它来识别拾取的对象。
我当前的界面只是许多堆叠的盒子的 3D 渲染,创建了一个类似地形的结构。由于我还没有进行纹理映射,所有的框都是灰色阴影(启用照明)。
现在,是时候写一些实际的代码了:
这是初始化部分,启用纹理、照明等。
单击鼠标按钮时,我尝试通过以下方式获取鼠标光标位置(实际上始终是窗口中间)的颜色:
问题是,禁用不起作用,我总是在我的pixels
数组中获得不同灰度的 RGB 值。
可能是什么问题呢?
c++ - Minecraft 克隆的最佳框选择方法
我正在制作一个 Minecraft 克隆作为我的第一个 OpenGL 项目,并且卡在框选择部分。进行可靠的盒子选择的最佳方法是什么?
我一直在研究一些 AABB 算法,但没有一个能很好地解释它们究竟做了什么(尤其是经过超级调整的算法),而且我不想使用我不理解的东西。
由于世界由立方体组成,我使用八叉树来消除光线投射计算的一些压力,基本上我唯一需要的是这个函数:
射线和原点很容易获得
min 和 max 是立方体的对角。
考虑到我必须检查的立方体数量,即使使用八叉树,我什至不确定这是正确的方法。
我也尝试过gluProject
,它可以工作,但非常不可靠,并且没有给我立方体的选定面。
编辑
所以这就是我所做的:用射线计算空间中的位置:
它实际上速度惊人,并在第一个找到的立方体后停止。
如您所见,光线必须经过多个八叉树才能找到立方体(实际上是空间中的一个位置)——屏幕中间有一个十字准线。增量步长越低,选择越精确,但也越慢。