Cesium中的VaryingType
表示shader中的varying变量类型。
VaryingType
用于描述ShaderProgram
对象中的vertex shader和fragment shader之间传递的数据类型。在渲染过程中,vertex shader的输出通常包括一些varying变量,这些变量的值将会被fragment shader使用。
VaryingType
枚举类型包含以下几种变量类型:
enum VaryingType {
SCALAR,
VEC2,
VEC3,
VEC4,
MAT3,
MAT4
};
SCALAR
表示标量类型;VEC2
表示2维向量类型;VEC3
表示3维向量类型;VEC4
表示4维向量类型;MAT3
表示3x3矩阵类型;MAT4
表示4x4矩阵类型。以下是一个示例,使用VaryingType
枚举类型:
import { ShaderProgram } from "cesium";
const vs =
"attribute vec3 position; \n" +
"attribute vec3 normal; \n" +
"attribute vec2 st; \n" +
"uniform mat4 modelViewProjectionMatrix; \n" +
"uniform mat3 normalMatrix; \n" +
"varying vec3 v_normal; \n" +
"varying vec2 v_st; \n" +
"void main() \n" +
"{ \n" +
" gl_Position = modelViewProjectionMatrix * vec4(position, 1.0); \n" +
" v_normal = normalMatrix * normal; \n" +
" v_st = st; \n" +
"} \n";
const fs =
"precision mediump float; \n" +
"varying vec3 v_normal; \n" +
"varying vec2 v_st; \n" +
"uniform vec3 color; \n" +
"void main() \n" +
"{ \n" +
" float brightness = dot(normalize(v_normal), vec3(0.0, 0.0, 1.0)) + 0.05; \n" +
" gl_FragColor = vec4(color * brightness, 1.0); \n" +
"} \n";
const shaderProgram = new ShaderProgram({
vertexShaderSource: vs,
fragmentShaderSource: fs,
attributes: ["position", "normal", "st"],
uniforms: ["modelViewProjectionMatrix", "normalMatrix", "color"],
varyings: ["v_normal", "v_st"],
vertexShaderVarying: {
v_normal: VaryingType.VEC3,
v_st: VaryingType.VEC2,
},
fragmentShaderVarying: {
v_normal: VaryingType.VEC3,
v_st: VaryingType.VEC2,
},
});
在上面的示例中,我们定义了一个shader program,其中vertex shader中定义了两个varying变量v_normal
和v_st
,它们的类型分别为VEC3
和VEC2
,表示3维向量和2维向量类型。在fragment shader中也需要定义这两个varying变量,并用它们进行计算。