标签: webgl2

OpenGL和WebGL2中的顶点数组是什么?

我已经使用WebGL1一段时间了,但是现在我对WebGL2有了更多的了解,我对Vertex Array实际的工作感到困惑。例如,在下面的示例中,我可以删除对其的所有引用(例如,创建,绑定,删除),并且该示例继续运行。

opengl-es webgl webgl2

1
推荐指数
1
解决办法
587
查看次数

绑定多个统一缓冲区对象

使用WebGL 2,我们现在可以使用统一缓冲区对象.

它们看起来是个好主意,不必将常见的制服附加到每个程序(如每个被渲染对象共有的投影和视图矩阵).

我创建了一个帮助器类,每次我想绑定一个统一的缓冲区对象时都会调用它.

class UniformBuffer {
    constructor(gl, data, boundLocation = 0) {
        this.boundLocation = boundLocation;

        this.data = new Float32Array(data);

        this.buffer = gl.createBuffer();
        gl.bindBuffer(gl.UNIFORM_BUFFER, this.buffer);
        gl.bufferData(gl.UNIFORM_BUFFER, this.data, gl.DYNAMIC_DRAW);
        gl.bindBuffer(gl.UNIFORM_BUFFER, null);
        gl.bindBufferBase(gl.UNIFORM_BUFFER, this.boundLocation, this.buffer);
    }

    update(gl, data, offset = 0) {
        this.data.set(data, offset);

        gl.bindBuffer(gl.UNIFORM_BUFFER, this.buffer);
        gl.bufferSubData(gl.UNIFORM_BUFFER, 0, this.data, 0, null);
        gl.bindBuffer(gl.UNIFORM_BUFFER, null);
        gl.bindBufferBase(gl.UNIFORM_BUFFER, this.boundLocation, this.buffer);
    }
};
Run Code Online (Sandbox Code Playgroud)

想要创建像这样的统一缓冲区的想法

const perScene = new UniformBuffer(gl, [
    ...vec4.create(),
    ...vec4.create(),
], 0); // and bind it to bind location 0?

const perObject = new UniformBuffer(gl, …
Run Code Online (Sandbox Code Playgroud)

glsl webgl2

0
推荐指数
1
解决办法
1038
查看次数

是否可以仅使用顶点着色器创建 WebGL 程序?

当我尝试链接仅附加顶点着色器的 WebGL2 着色器程序时,出现“缺少着色器”错误。我正在尝试使用变换反馈,并且我认为由于顶点着色器的输出已写出,因此不需要片段着色器。

从这篇博文:链接看来您应该能够做到这一点。我缺少的 WebGL 有什么特别之处吗?

webgl2

0
推荐指数
1
解决办法
311
查看次数

WebGL2 有自动内置的抗锯齿功能吗?

我一直在阅读这些示例的源代码,我继续看到这个选项,但是,我无法在任何地方找到这是否是受支持的功能。你只是antialias通过打开这个标志来获得吗?有关此功能的更多详细信息?

opengl-es webgl webgl2

0
推荐指数
1
解决办法
3269
查看次数

在 WebGL2 中,布局限定符如何比 getAttribLocation 更好?

随着我对 WebGL2 的了解越来越多,我在着色器中遇到了这种新语法,您可以通过以下方式在着色器中设置locationlayout (location=0) in vec4 a_Position;。这attribute与使用传统gl.getAttribLocation('a_Position');. 我认为它更快?还有其他原因吗?另外,将位置设置为整数会更好还是也可以使用字符串?

opengl-es webgl webgl2

0
推荐指数
1
解决办法
1740
查看次数

如何从纹理格式属性中选择WebGL GLSL采样器类型?

WebGL具有、、 和用于从着色器内部的纹理读取、GLSL、和。创建纹理时,我们指定纹理、和。根据OpenGL Sampler Wiki Page,对于给定纹理使用类型不兼容的采样器可能会导致未定义的值。 sampler2Disampler2Dusampler2Dfloatintunsigned intWebGL1/2InternalFormatFormatType

是否有一个简单的规则来确定如何将纹理的InternalFormatFormatType明确映射到正确的 GLSL 采样器类型?

(不失一般性,我重点关注了,?sampler2D 但当然也有 3D、立方体等纹理,我假设它们遵循完全相同的规则)

webgl webgl2

0
推荐指数
1
解决办法
2589
查看次数

标签 统计

webgl2 ×6

webgl ×4

opengl-es ×3

glsl ×1