卡通(Toon)着色
来源:互联网 发布:js实现点击收缩和展开 编辑:程序博客网 时间:2024/04/19 06:22
CPU端代码设置:
// This function does any needed initialization on the rendering// context. void SetupRC(void){// BackgroundglClearColor(0.025f, 0.25f, 0.25f, 1.0f );glEnable(GL_DEPTH_TEST); shaderManager.InitializeStockShaders(); viewFrame.MoveForward(4.0f); // Make the torus gltMakeTorus(torusBatch, .80f, 0.25f, 52, 26);toonShader = gltLoadShaderPairWithAttributes("ToonShader.vp", "ToonShader.fp", 2, GLT_ATTRIBUTE_VERTEX, "vVertex",GLT_ATTRIBUTE_NORMAL, "vNormal");locLight = glGetUniformLocation(toonShader, "vLightPosition");locMVP = glGetUniformLocation(toonShader, "mvpMatrix");locMV = glGetUniformLocation(toonShader, "mvMatrix");locNM = glGetUniformLocation(toonShader, "normalMatrix"); locColorTable = glGetUniformLocation(toonShader, "colorTable");glGenTextures(1, &texture);glBindTexture(GL_TEXTURE_1D, texture);GLubyte textureData[4][3] = { 32, 0, 0, 64, 0, 0, 128, 0, 0, 255, 0, 0};glTexImage1D(GL_TEXTURE_1D, 0, GL_RGB, 4, 0, GL_RGB, GL_UNSIGNED_BYTE, textureData);glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);}
顶点着色器:
// Cell lighting Shader// Vertex Shader// Richard S. Wright Jr.// OpenGL SuperBible#version 130// Incoming per vertex... position and normalin vec4 vVertex;in vec3 vNormal;smooth out float textureCoordinate;uniform vec3vLightPosition;uniform mat4mvpMatrix;uniform mat4mvMatrix;uniform mat3normalMatrix;void main(void) { // Get surface normal in eye coordinates vec3 vEyeNormal = normalMatrix * vNormal; // Get vertex position in eye coordinates vec4 vPosition4 = mvMatrix * vVertex; vec3 vPosition3 = vPosition4.xyz / vPosition4.w; // Get vector to light source vec3 vLightDir = normalize(vLightPosition - vPosition3); // Dot product gives us diffuse intensity textureCoordinate = max(0.0, dot(vEyeNormal, vLightDir)); // cos(theta), 值越大说明夹角越小, 对应的颜色越亮 // Don't forget to transform the geometry! gl_Position = mvpMatrix * vVertex; }
片断着色器:
// Cell lighting Shader// Fragment Shader// Richard S. Wright Jr.// OpenGL SuperBible#version 130uniform sampler1D colorTable;out vec4 vFragColor;smooth in float textureCoordinate;void main(void) { vFragColor = texture(colorTable, textureCoordinate); }
截图:
- 卡通(Toon)着色
- Unity3d shader之卡通着色Toon Shading
- Cg Programming/Unity/Toon Shading卡通着色
- Shader toon 卡通效果
- 卡通着色
- 卡通渲染(Toon Shading/Cel Shading)
- UnityShader实例05:Toon(卡通)材质
- GLSL 卡通着色
- GLSL 卡通着色
- unity中Toon(卡通)材质的下载与实现
- 用Cg实现卡通着色
- opengles之卡通着色算法
- 【GLSL教程】(五)卡通着色
- 【GLSL教程】(五)卡通着色
- 【GLSL教程】(五)卡通着色
- 【GLSL教程】(五)卡通着色
- 【GLSL教程】(五)卡通着色
- 【GLSL教程】(五)卡通着色
- XML的序列化和反序列化
- C++ 中初学者的一些问题
- 软件开发推荐书籍
- malloc源码
- Trie 树 及Java实现
- 卡通(Toon)着色
- MySQL_03
- [转载]计算机视觉研究群体及专家主页汇总
- 结构体成员的引用
- 最近因为工作关系,开始接触一些JAVA
- 扩展Outlook 用户显示信息!
- Unix环境高级编程学习笔记(十二) 高级进程间通信
- 设计模式—工厂模式
- POJ 1190 生日蛋糕 估计最小答案dfs剪枝