纹理
要在片段着色器中定义一个全局纹理采样器 uniform sampler2D yourTexture;
- 在使用着色器后,设置纹理单元 Shader.setInt("yourTexture", 0); 意思是把这个采样器采样的东西输出到指定纹理单元内。需要注意的是,如果一个着色器中要用到多个纹理,那么这里要按顺序绑定好这些采样器的纹理单元 2. 激活要绘制的纹理单元 glActiveTexture(GL_TEXTURE0); //只有一个纹理单元的话不激活也没事,默认就是0
- 绑定创建过的纹理到刚才激活的纹理单元上 glBindTexture(GL_TEXTURE_2D, 任意创建过的纹理); //注意这里的第二个参数是创建过的纹理名称,即在主函数中自己创建的纹理
法线贴图
我们可以用公式、三角形的两条边以及纹理坐标计算出切线向量 T 和副切线 B,计算出切线空间的法向量,从而使用简单的矩阵变换,就可以将切线空间的变换到世界空间
当一个顶点被多个三角形共享时,通常会计算每个三角形的切线和副切线,并将这些向量平均化,以便获得一个更平滑的过渡。这是因为在高细节的模型中,法线贴图通常需要光滑的表面过渡,否则会出现不自然的光照效果。