opengl卡通渲染之逐顶点渲染与逐像素渲染
来源:互联网 发布:软件开发电脑配置 编辑:程序博客网 时间:2024/05/17 07:38
逐顶点渲染效果:
逐像素渲染效果
逐顶点渲染顶点shader
attribute vec3 pos;attribute vec2 texcoord;attribute vec3 normal;uniform mat4 M;uniform mat4 P;uniform mat4 V;uniform mat4 NM;uniform vec3 U_LightPos;uniform vec3 U_EyePos;uniform vec4 U_DiffuseLightColor;uniform vec4 U_DiffuseMaterial;uniform vec4 U_SpecularLightColor;uniform vec4 U_SpecularMaterial;varying vec4 V_Color;void main(){//光线方向vec3 L=U_LightPos;L=normalize(L);//法向量转换到世界空间vec3 n=normalize(mat3(NM)*normal);//计算光照强度float intensity=max(0.0,dot(L,n));//根据不同的光照强度,计算出不同的颜色if (intensity > 0.95) V_Color = vec4(1.0,0.5,0.5,1.0); else if (intensity > 0.5) V_Color = vec4(0.6,0.3,0.3,1.0); else if (intensity > 0.25) V_Color = vec4(0.4,0.2,0.2,1.0); else V_Color = vec4(0.2,0.1,0.1,1.0); gl_Position=P*V*M*vec4(pos,1.0);}
片元shader
uniform vec4 U_AmbientLightColor;uniform vec4 U_AmbientMaterial;varying vec4 V_Color;void main(){vec4 ambientColor=U_AmbientLightColor*U_AmbientMaterial;gl_FragColor=ambientColor+V_Color;}
逐像素渲染顶点shader
attribute vec3 pos;attribute vec2 texcoord;attribute vec3 normal;uniform mat4 M;uniform mat4 P;uniform mat4 V;uniform mat4 NM;varying vec3 V_Normal;varying vec3 V_WorldPos;void main(){V_Normal=mat3(NM)*normal;vec4 worldPos=M*vec4(pos,1.0);V_WorldPos=worldPos.xyz;gl_Position=P*V*worldPos;}
片元shader
uniform vec3 U_LightPos;uniform vec3 U_EyePos;uniform vec4 U_AmbientLightColor;uniform vec4 U_AmbientMaterial;uniform vec4 U_DiffuseLightColor;uniform vec4 U_DiffuseMaterial;uniform vec4 U_SpecularLightColor;uniform vec4 U_SpecularMaterial;varying vec3 V_Normal;varying vec3 V_WorldPos;void main(){//计算环境光vec4 ambientColor=U_AmbientLightColor*U_AmbientMaterial;//光线方向vec3 L=U_LightPos;L=normalize(L);//法向量转换到世界空间vec3 n=normalize(V_Normal);//根据不同的光照强度给出不同颜色值float diffuseIntensity=max(0.0,dot(L,n));vec4 diffuseColor; if (diffuseIntensity > 0.95) diffuseColor = vec4(1.0,0.5,0.5,1.0); else if (diffuseIntensity > 0.5) diffuseColor = vec4(0.6,0.3,0.3,1.0); else if (diffuseIntensity > 0.25) diffuseColor = vec4(0.4,0.2,0.2,1.0); else diffuseColor = vec4(0.2,0.1,0.1,1.0); gl_FragColor=ambientColor+diffuseColor;}
阅读全文
0 0
- opengl卡通渲染之逐顶点渲染与逐像素渲染
- opengl光照之镜面光逐顶点渲染与逐像素渲染
- opengl光照之漫反射逐顶点渲染与逐像素渲染
- 顶点渲染
- 顶点渲染
- OpenGL之渲染优化
- 卡通渲染最新进展汇报
- ShaderSimpler(3) : 卡通渲染
- 卡通渲染效果脚本
- NPR-卡通渲染
- 【NPR】卡通渲染
- 卡通渲染简报
- Unity卡通渲染之描边处理
- Opengl RC(Render context,渲染上下文)与像素格式(转)
- BufferedImage 与像素级渲染
- 渲染
- 渲染
- 渲染
- ubuntu16上传文件到服务器
- flask 调试模式自动加载修改后代码
- String中substring方法内存泄漏问题
- Linux从入门到无法自拔
- 如何将多sheet Excel 导入到超级表格中
- opengl卡通渲染之逐顶点渲染与逐像素渲染
- 第三届讯飞测试技术嘉年华视频上线
- KMP基本模板理解
- day25之布隆过滤器的实现和优缺点以及扩展
- 浅析Spring事务传播行为和隔离级别
- [C++] 右值引用:移动语义与完美转发
- 探索Tachyon的内存数据存储
- Just a Hook(区间更新)
- 线程安全与不安全