纹理如何映射到3D对象?

时间:2015-04-28 15:04:35

标签: c++ opengl 3d textures texture-mapping

我目前正在学习C ++和OpenGL,并想知道下面的代码如何能够将纹理映射到场景中的3D对象。该代码目前有效,但我很难理解它。

//In the Pixel Shader.
float pi = 3.14159265359;
vec3 N = normalize (Normal);
vec3 L = normalize (vec3 (EyeSpaceLightPosition - EyeSpacePosition));
vec3 R = reflect (L, N);
vec3 V = normalize (vec3 (EyeSpacePosition) - vec3 (0, 0, 0));


//Specifically these parts here.
float theta = acos (dot ( N, L )) / pi;
float phi = acos (dot ( -R, V )) / pi;
fragColor = vec4 (texture (texture1, vec2 ( theta, phi ))); 

1 个答案:

答案 0 :(得分:2)

acos (dot ( N, L ))获取向量NL之间的角度,这将以弧度为单位,因此需要除以pi才能得到范围{{1}期待。

所有实际的纹理魔法都发生在这里

texture()

fragColor = vec4 (texture (texture1, vec2 ( theta, phi ))); 将在第一个参数的第二个参数定义的位置对纹理进行采样,并将颜色值作为包含颜色成分(红色,绿色,蓝色和alpha)的vec4返回。