问题标签 [webgl2]
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.
webgl - webgl2中(dx11)结构化缓冲区的等价物是什么?
我正在将 directx hlsl 脚本移植到 webgl 2,但我找不到结构化缓冲区的等价物。我只能看到一个限制为 64k 大小并使用对齐的常量缓冲区。我应该将结构化缓冲区拆分为常量缓冲区吗?
javascript - 如何在 WebGL 上下文之外访问深度缓冲区的值?
DEPTH_ATTACHMENT
给定一个 WebGL 场景(从 THREE.js 创建),您将如何从给定的帧缓冲区访问浮点值(作为 WebGL 上下文之外的数据数组)已使用framebufferTexture2D
.
到目前为止,我已经收集了一种解决方案,即使用自定义着色器覆盖将场景渲染到纹理目标,该着色器覆盖访问深度纹理信息,然后将其编码为 RGB 格式。使用的代码与此处的 THREE.js 示例非常相似:Depth-Texture-Example。
一旦渲染完成,我就可以使用readPixels
将特定像素读取到数组中。但是,此选项的精度非常低,仅限于 256 个给定的离散值vec3(float) = vec3(float, float, float)
。有没有办法从这种特定方法或替代方法中获得更高的精度?
最终,我想要的是在 WebGL 上下文之外以一种有效的方式访问深度缓冲区作为浮点值数组。我有一个自定义光栅化器,可以创建一个相当好的深度缓冲区,但我不想浪费任何时间重做已经完成的步骤。
glsl - Vector组件中s,t,p,q的含义是什么?
在WebGL 参考卡片中,有关于 Vector 组件的文档。
虽然在我看来我也可以使用 {x, y, z, w},但我无法理解从纹理读取时是否必须使用 {s, t, p, q}。
在访问表示纹理坐标的向量时使用
{s, t, p, q} 字母的含义是什么?这只是可读代码的约定问题,还是我缺少更多内容?
javascript - 为什么 gl.drawArraysInstanced 在后续调用中无法绘制多个形状?
我正在使用 WebGL2 并尝试调用 gl.drawArraysInstanced 来绘制多个形状。gl.drawArraysInstanced 的第一次调用可以绘制 2 个或更多元素。
gl.drawArraysInstanced(gl.TRIANGLES, 0, numVertices, 3);
然后我在 3 秒后调用相同的函数,但它只绘制一个三角形。(见下面的例子)
另外,调用gl.drawArraysInstanced 是否应该比gl.drawArrays更有效?谢谢
framebuffer - Webgl2 - 帧缓冲区中 COLOR_ATTACHMENTS 的数量
根据这里的文档,看起来COLOR_ATTACHMENTS
我们可以使用16 个webgl2
。但是,当我打印时:
它8
在控制台中返回。
我在互联网上搜索以了解是否有允许我们使用 16 的扩展程序COLOR_ATTACHMENTS
,但我找不到任何扩展程序。有谁知道这里有什么问题?
先感谢您。
canvas - 多图像渲染:webgl vs canvas2d
我想在屏幕的不同位置多次渲染 20 张图像。我想知道在这种情况下哪个 canvas2d 或 webgl 更快。
我知道Overally webgl比canvas好,但在这种情况下,webgl需要从2dtexture数组获取像素颜色并从另一个纹理获取要渲染的图像的大小),这不是从纹理读取数据使它慢于帆布?
而画布只需要调用drawImage()
提前致谢
javascript - webGL2 片段着色器收到错误值
我正在尝试渲染 3D 纹理,但片段着色器有问题。我应该收到映射在 0 和 1 之间的纹理值,但我只收到 0 和其他东西。我的意思是下一个代码(片段着色器)只在我的形状中打印红色和灰色:
编辑
我在创建纹理之前检查纹理的值(应该有更多的颜色,因为数字从 -32k 到 32k),并使用以下参数创建纹理:
任何建议将不胜感激!
编辑
正如您在图像中看到的那样,我没有收到任何错误。
webgl - 通过 twgl.js 更新 webgl 中的 texture_2d_array
我正在使用 twgl 在 webgl 中渲染一些图像。我需要动态地将图像添加到这个二维纹理数组中。我一直在使用twgl.createTexture
函数来执行此操作,直到知道但有问题。在我将一些新图像推送到我的图像数组并调用twgl.createTexture
将其传递给 webgl 并在渲染我的对象之后,图像将无法正确显示,而不是图像会出现一个蓝色方块。当我再次手动渲染它时,它会变得正确,并且在twgl.createTexture
再次使用之前不会中断。
我认为这是因为这个函数会创建一个新的 webglTexture 而不是更新前一个
我想知道有没有办法用最后一个特殊数组更新最后一个纹理,该数组已经将一些新图像推入其中?
** 当我说图像时,我的意思是 base64 字符串或加载和缓存的 url **
javascript - 如何生成平行于相机视图平面的平面?
我正在尝试使用 3D 纹理进行基于纹理的体积渲染。我只是将此纹理映射到一堆平面,但我需要让这些平面与相机平行,以避免在移动相机时出现不良的可视化。基本上我想制作一个视口对齐的切片。我一直在尝试,但我不知道如何开始。首先,我只想要一个平行切片。
任何建议将不胜感激!
three.js - 从简单的射线投射转换为 X 射线渲染
我指的是Lebarba的体积渲染代码。我想做的是 X 射线渲染而不是射线投射。
这是使用代码进行 Ray 投射的结果
光线投射
X 射线模式
我不确定我在做什么是对还是错,因为我是这个领域的新手。如果有人可以指出错误(如果有),那将是非常有帮助的。