去哪里寻找,油腻的师姐。
广告总是在脑子里绕来绕去。
转自http://blog.csdn.net/huutu http://www.thisisgame.com.cn
虽然说师姐是油腻的,但是原画们也不会把全身都弄成油腻的效果。皮肤是油腻的,可能是涂多了护肤品精油,但是头发和衣服也油腻的话,那就可能这个人是修汽车的。
所以对同一个物体,有些地方需要 Specular Ligting 镜面高光,有些地方却只要 Diffuse Lighting 漫反射光。
在上一篇
struct Material //替换顶点色
{
vec3 ambient;
vec3 diffuse;
vec3 specular;
float shininess;
};
uniform Material m_material;
转自http://blog.csdn.net/huutu http://www.thisisgame.com.cn
那么在这一篇里面,我用 一个纹理 替代 diffuse 颜色值,来模拟更真实的 木箱子 的效果。
因为 ambient 颜色值 绝大多数情况下都是和 diffuse 颜色值相同,所以这里 ambient 就不再单独用一个纹理。
注意:
GLES 2.0 的 GLSL版本是 1.0 版本,该版本不支持 sample2D 放在 struct 中。
转自http://blog.csdn.net/huutu http://www.thisisgame.com.cn
在 Vertex Shader 中添加 UV ( GLProgram_Cube.h Line 87 )
attribute vec2 m_uv;
varying vec2 m_outUV;
在 Fragment Shader 中添加 sample2D ( GLProgram_Cube.h Line 118 )
uniform sampler2D m_diffusetexture;
//传入UV;
glVertexAttribPointer(m_programCube.m_uv, 2, GL_FLOAT, false, sizeof(glm::vec2), uv);
//传入纹理
glUniform1i(m_programCube.m_diffusetexture, 0);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, m_diffusetexture2D->m_textureId);
添加到箱子上的光发亮了!这里只使用了一个 diffuse 贴图。
转自http://blog.csdn.net/huutu http://www.thisisgame.com.cn
但是注意到,箱子本体是木质的,只是外面有一层铁皮。 铁皮是会发光的,但是木头是不会发光的。
所以需要对 木箱 分两部分处理,一部分是 diffuse 贴图,没有 镜面高光效果,一部分是 specular 贴图,有镜面高光效果。
首先来去掉 镜面高光效果,只需要 设置 材质中的 specular 为 0 ( MyApp.h Line 105 )
glUniform3f(m_programCube.m_matSpecular, 0.0f, 0.0f, 0.0f);
运行程序效果
再添加一个 specular 贴图。转自http://blog.csdn.net/huutu http://www.thisisgame.com.cn
在 Fragment Shader 中添加 ( GLProgram_Cube.h Line 119 )
uniform sampler2D m_speculartexture;
//传入纹理
glUniform1i(m_programCube.m_diffusetexture, 0);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, m_diffusetexture2D->m_textureId);
glUniform1i(m_programCube.m_speculartexture, 1);
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, m_speculartexture2D->m_textureId);
示例工程下载:
http://pan.baidu.com/s/1kUtB7z5