4-6立方体贴图

62 阅读1分钟

六个2D纹理面的立方体

创建一个立方体贴图并绑定

unsigned int textureID;
glGenTextures(1, &textureID); 
glBindTexture(GL_TEXTURE_CUBE_MAP, textureID);
GL_TEXTURE_CUBE_MAP_POSITIVE_X
GL_TEXTURE_CUBE_MAP_NEGATIVE_X
GL_TEXTURE_CUBE_MAP_POSITIVE_Y
GL_TEXTURE_CUBE_MAP_NEGATIVE_Y
GL_TEXTURE_CUBE_MAP_POSITIVE_Z
GL_TEXTURE_CUBE_MAP_NEGATIVE_Z

在像素着色器中使用samplerCube来输入天空盒

绘制天空盒时,需要第一个渲染,并禁止深度写入,这样会永远在物体背后,还需要取3*3的左上角矩阵来移除位移

使用提前深度测试,将z值等于w值,即1.0f,将深度改为GL_LEQUAL

反射:

vec3 I = normalize(Position - cameraPos);//观察方向向量
vec3 R = reflect(I, normalize(Normal));//反射向量

折射:

float ratio = 1.00 / 1.52; //折射率
vec3 I = normalize(Position - cameraPos); 
vec3 R = refract(I, normalize(Normal), ratio);//折射向量