六个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);//折射向量