在OpenGL中,Normalize函数是由GLSL语言提供的一个内置函数。它的使用非常简单,只需将需要归一化的向量作为参数传入即可。Normalize函数会返回一个归一化后的向量。例如,如果我们有一个向量v,我们可以使用Normalize(v)来获得归一化后的向量。需要注意的是,如果向量的长度接近于0,Normalize函数可能会产生错误的结果,因此在...
} tangent=normalize(tangent); binormal=cross(v_nglNormal,tangent); binormal=normalize(binormal); 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 法线,切线,副切线函数实现 Vector3Math::calculateTangentSpaceVector( constVector3&position1,constVector3&position...
vec3 lightDir = normalize(lightPos - FragPos); vec3 viewDir = normalize(viewPos - FragPos); vec3 halfwayDir = normalize(lightDir + viewDir); 接下来,镜面光分量的实际计算只不过是对表面法线和半程向量进行一次约束点乘(Clamped Dot Product),让点乘结果不为负,从而获取它们之间夹角的余弦值,之后我...
float3 N = mul(worldMatrix_IT, posIn.objectNormal).xyz; N = normalize(N); //计算入射光方向\视线方向\半角向量 float3 L = normalize(lightPosition - worldPos); float3 V = normalize(eyePosition - worldPos); float3 H = normalize(L + V); // 计算漫反射分量 float3 diffuseColor = Kd ...
第四个参数定义我们是否希望数据被标准化(Normalize)。如果我们设置为GL_TRUE,所有数据都会被映射到0(对于有符号型signed数据是-1)到1之间 第五个参数步长(Stride),它告诉我们在连续的顶点属性组之间的间隔 最后一个参数的类型是void*,数据在缓冲中起始位置的偏移量(Offset)*/glVertexAttribPointer(0,3, GL_FLOA...
vec3 R = reflect(I, normalize(Normal)); FragColor = vec4(texture(skybox, R).rgb, 1.0); } 折射:环境映射的另一种表现形式便是折射,和反射很相似。是由于光线在传播的过程中从一种介质进入另一种介质,传播方向发生改变。在常见的类水表面上产生的现象就是折射。折射是通过斯涅尔定律(Snell’s Law)来...
5、normalize(x) 归一化操作,即x / length(x) 五、矩阵函数 1、matrixCompMult(mat x, mat y) 矩阵x与y相乘 2、outerProduct(vec3 a, vec3 b) 向量a与b的外积 3、transpose(mat3 m) 矩阵的转置 4、inverse(mat3 m) 矩阵的反转 六、矢量关系函数 ...
s = normalize(vec3(Light.Direction)); else s = normalize(vec3(Light.Direction - position)); vec3 v = normalize(vec3(-position)); vec3 r = reflect(-s, norm); returnLight.Intensity * (Material.Ka Material.Kd*max(dot(s,norm), 0.0) ...
(location=2)out vec4 gAlbedoSpec;invec2 TexCoords;invec3 FragPos;invec3 Normal;uniform sampler2D diffuse;uniform sampler2D specular;voidmain(){//保存位置信息gPosition=FragPos;//保存法线信息gNormal=normalize(Normal);//保存漫反射颜色信息,漫反射是物体的表面颜色gAlbedoSpec.rgb=texture(diffuse,...
vec3 v = normalize(-position.xyz); vec3 r = reflect(-s, norm); amb = Light.intensity * Material.Ka; floatsDotN = max(dot(s, norm),0.0); diff = Light.intensity * Material.Kd * sDotN; spec = vec3(0.0); if(sDotN > 0.0) ...