问题标签 [floatbuffer]

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 投票
0 回答
340 浏览

java - 从 ByteBuffer 的一部分有效地填充 FloatBuffer

目前我正在通过以下方式从映射字节缓冲区填充 FloatBuffer:

但我怀疑有更好的方法来做到这一点,而不是遍历所有位置。缓冲区中可以有很多顶点(最多 65536)。

这似乎有效:

但是,OpenGL 中的这个函数会向 GPU 发送太多数据吗?还是只是从当前位置到极限?

0 投票
0 回答
126 浏览

java - FloatBuffer.put 的绝对版本是线程安全的吗?

java.nio.FloatBuffer有多种put方法。据我所知,它们中的大多数(全部?)都依赖于缓冲区的内部状态,因此它们不是线程安全的。我的问题是这是否也适用于以下方法?

文档说

绝对 put 方法(可选操作)。

将给定的浮点数写入此缓冲区的给定索引处。

在我手头的情况下,如果不时丢失/覆盖更新不会有问题,但如果写入发生在完全不同的索引上,那将是致命的(因为在放置值之前内部位置被覆盖或其他东西像那样)。

0 投票
1 回答
498 浏览

android - 为什么我们在 OpenGL (ES) android 中以字节而不是浮点数分配块,尽管我们大部分时间都使用浮点数

这就是我如何制作一个三角形数组

这就是我在本地环境中分配块的方式

0 投票
1 回答
466 浏览

java - 为什么我们可以直接在ByteBuffer中分配字节而不在FloatBuffer中分配浮点数

在使用openGL(ES)的java中,我们可以直接分配ByteBuffer

但是如果 FloatBuffer 不可用,我们就不能这样做,这是为什么呢?

我想知道是不是因为:

字节可在硬件级别访问(因为 OpenGL 与 delvik 不同,它在硬件之上工作)并且硬件中的寄存器(GPU 的硬件)以字节为单位,即使浮点数也应存储在 4 字节寄存器中,这可能不可用,因此我们无法直接分配,而是我们应该告诉缓冲区为给定大小的块分配内存,然后将数据放入这些块中并再次将其视为 FloatBuffer。

0 投票
1 回答
198 浏览

buffer - 如何创建只读 FloatBuffer 的副本?

我正在尝试编辑缓冲区,但输入的副本(原始)是只读的。结果具有相同的值,但与原始结果不同;我不确定有什么不同。为什么会这样?

0 投票
1 回答
268 浏览

android - 是否可以通过引用 FloatBuffer 的内容来修改?

FloatBuffer用一次数组初始化了 my 的内容Float。然后修改Floats我输入的,我希望它也会修改中的值,FloatBuffer但我得到一个奇怪的结果。

我做错了吗?有可能这样做吗?

编辑:我的错误,我知道 Float 是不可变的,所以这是正常行为。所以我的问题是,有没有办法用可变的浮动包装器填充 FloatBuffer 以便我可以通过引用轻松修改我的 FloatBuffer 内容?或者对于 OpenGL 数据传输有更好的替代 FloatBuffer 吗?

0 投票
1 回答
293 浏览

android - 我无法打印此数组。应用程序在此行后停止工作

我必须将其打印floatbufferarray文档中的功能,但该功能不起作用。我不明白我做错了什么?

我试过使用,floatBuffer.toString()但它确实打印array了文档(ARCore)所描述的。因此不是正确的结果。

根据文档(ARCore),每个点floatBuffer都有 4 个值:x、y、z 坐标和置信度值。

0 投票
1 回答
471 浏览

android-studio - 如何将 .glb (gltf) 二进制数据模型加载到 AndroidStudio (OpenGLES20)

我尝试从文件中加载模型.glb(Blender)

执行以下操作:

但我无法获得正确的坐标bufferXYZ

而类似于坐标的东西只能通过排序ByteOrder.BIG_ENDIAN获得(文档说LITTLE_ENDIAN)

如何正确地将 BIN 部分加载到 Floatbuffer 中OpenGLES20

0 投票
1 回答
96 浏览

java - 绘制动态 GL_TRIANGLE_STRIP 的最快方法

经过一番努力,我设法使用 OpenGL 绘制了动态的飞机轨迹。您可能会在下面看到我的部分代码:

使用上面的代码,我可以绘制一条动态的 3D 带状轨迹。但我需要提高代码的性能。

我的第一个问题:如何在不创建新值的情况下动态更改 FloatBuffer 的值。我问这个,因为在每一帧中,一个新的 Vec4 (x,y,z) 被添加到位置列表中,我想使用我现有的 FloatBuffer。因为随着位置的增加,trail的长度越来越长,所以getTrailVertices方法中的循环越来越大。例如,当程序运行 10 分钟后,positionList 变为 15,000 位置的 ArrayList。这很可能会降低性能。除了创建一个新的 FloatBuffer 之外,我可以从末尾删除最后 2 个顶点并将另外 2 个顶点添加到 FloatBuffer 的开头而不创建一个新顶点吗?

第二个问题:这种动态绘图可以使用VBO吗?如果是这样,我该如何使用 VBO?

第三个问题:如何动态改变 FLoatBuffer 的容量。我问这个是因为我想在飞行中增加或减少路径的长度。这意味着,如果我增加轨迹的长度,我将需要更多的顶点和更高容量的 FloatBuffer,如果我减少轨迹的长度,这意味着我将需要更少的顶点和更低容量的 FloatBuffer。

最后一个问题:我怎样才能在轨迹上放置纹理。或者让我这样问;我怎样才能在小径的尽头画一条褪色的小径。我想我需要使用 alpha fading?

3D 飞机轨迹

0 投票
1 回答
38 浏览

opengl - 添加> = 2 ^ 16个数字时的OpenGL缓冲区问题

我在使用 OpenGL 缓冲区时遇到了一些奇怪的困难。我试图将问题缩小到最少的源代码,所以我创建了在每次迭代中递增 FloatBuffer 的每个数字的程序。当我向 FloatBuffer 添加少于 2^16 个浮点数时,一切正常,但是当我添加 >= 2^16 个数字时,这些数字不会增加,并且在每次迭代中都保持不变。

渲染器:

计算缓冲区