gpt4 book ai didi

opengl - 为什么 golang gomobile basic example 为 vec4 属性设置 3-float 大小?

转载 作者:数据小太阳 更新时间:2023-10-29 03:04:30 27 4
gpt4 key购买 nike

Golang gomobile 基本示例 [1] 使用 VertexAttribPointer 为每个顶点设置 3 x FLOATS。

然而顶点着色器的属性类型是vec4。不应该是vec3吗?

为什么?

在渲染循环中:

glctx.VertexAttribPointer(position, coordsPerVertex, gl.FLOAT, false, 0, 0)

三角形数据:

var triangleData = f32.Bytes(binary.LittleEndian,
0.0, 0.4, 0.0, // top left
0.0, 0.0, 0.0, // bottom left
0.4, 0.0, 0.0, // bottom right
)

常量声明:

const (
coordsPerVertex = 3
vertexCount = 3
)

在顶点着色器中:

attribute vec4 position;

[1] gomobile 基本示例:https://github.com/golang/mobile/blob/master/example/basic/main.go

最佳答案

顶点属性在概念上总是 4 个分量向量。没有要求您在着色器中使用的组件数量与您为属性指针设置的组件数量必须匹配。如果您的数组包含的组件多于着色器消耗的组件,则多余的组件将被忽略。如果您的数组提供的组件较少​​,则该属性将填充为 (0,0,0,1) 形式的向量(这对于同质位置向量和 RGBA 颜色都有意义)。

在通常情况下,无论如何您都希望每个输入位置都有 w=1,没有必要将其存储在数组中。但是在应用变换矩阵时(或者甚至在直接将值作为 gl_Position 转发时),您通常需要完整的 4D 形式。所以你的着色器在概念上可以做

in vec3 pos;
gl_Position=vec4(pos,1);

但这等同于只写

in vec4 pos;
gl_Position=pos;

关于opengl - 为什么 golang gomobile basic example 为 vec4 属性设置 3-float 大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44790847/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com