webgl - WebGL TRIANGLE 与 TRIANGLE_STRIP
问题描述
我使用 gl.TRIANGLE_STRIP 进行了单个三角形渲染,但是当我尝试将其更改为 gl.TRIANGLE 时,面不会渲染。看起来顶点渲染为非常小的点,但面是空的。
我的理解是 TRIANGLE 与 TRIANGLE_STRIP 的顶点格式对于单个三角形应该相同。
// vertex setup
const buffer = gl.createBuffer();
const vertices = new Float32Array([
1, -1, -1, 1, 1.3, 1.5, 1,
1, -1, 1, 1.3, 1, 1.5, 1,
0, 1, 0, 1, 1, 1.75, 1
]);
gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
gl.bufferData(gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW);
const length = vertices.length / 7;
const mode = gl.TRIANGLE_STRIP;
return {buffer, length, mode};
使用以下渲染代码可以按预期工作:
// render frame
gl.bindBuffer(gl.ARRAY_BUFFER, shape.buffer);
gl.vertexAttribPointer(attribs.position, 3, gl.FLOAT, false, 28, 0);
gl.vertexAttribPointer(attribs.color, 4, gl.FLOAT, false, 28, 12);
gl.enableVertexAttribArray(attribs.position);
gl.enableVertexAttribArray(attribs.color);
gl.useProgram(programs.colored);
gl.uniformMatrix4fv(uniforms.projection, false, projection);
gl.uniformMatrix4fv(uniforms.modelView, false, modelView);
gl.drawArrays(shape.mode, 0, shape.length);
但是,如果我将 更改mode
为gl.TRIANGLE
,则不会出现任何面,顶点几乎看不到小点。
我在这里有什么误解?
解决方案
推荐阅读
- c# - 应用新尺寸后保持窗口居中
- android - IOS/Android GPS Spoofing预防
- javascript - 无需单击按钮,函数方法就会在反应中调用
- sql - 在 tsql 中实现 0..1 关系
- c - 如果没有那么多 math.h 函数,那么制作对数函数的更简单方法是什么?
- docker - 码头工人撰写 | 无法连接到 unix:///var/run/docker.sock 上的 Docker 守护程序。docker 守护进程是否正在运行?
- android - Gradle 6.5 AS 4.1 设置 outputFileName got The value for this property cannot be changed any further error
- javascript - 为什么Javascript不能读取占用的Value?TypeError:无法读取未定义的属性“权重”
- javascript - 如何在客户端设置默认 HTTP 标头并使用 Meteor 在服务器方法中访问它们?
- .net - .Net core 3.1 发布后未找到 Antiforgery.dll