Qt 3D的研究(六):Toon Shader

原创 2015年03月05日 16:00:37

Qt 3D的研究(六):Toon Shader

       在上次的实验中,我们实现了Gooch Shader,并给出了通过调色板进行个性化的Gooch Shader设置。Toon Shader又称Cell Shader,是以离散的颜色来表示光照的强弱。很多动画片的渲染方式都是使用Toon Shader的。下面这样图就可以使用Toon Shader实现。

蒋彩阳原创文章,首发地址:http://blog.csdn.net/gamesdev/article/details/44084021。欢迎同行前来探讨。


       下面是Toon Shader的代码:

// Toon.vert
#version 100

// Qt 3D默认提供的参数
attribute vec3 vertexPosition;
attribute vec3 vertexNormal;
uniform mat4 modelView;
uniform mat4 modelNormalMatrix;
uniform mat4 mvp;

// 自己提供的参数
uniform vec3 lightPosition;
varying vec3 reflectVec;
varying vec3 viewVec;
varying float NdotL;

void main( void )
{
    vec3 ecPos = ( modelView * vec4( vertexPosition, 1.0 ) ).xyz;
    vec3 normal = normalize( modelNormalMatrix * vec4( vertexNormal, 1.0 ) ).xyz;
    vec3 lightVec = normalize( lightPosition - ecPos );
    reflectVec = normalize( reflect( -lightVec, normal ) );
    viewVec = normalize( -ecPos );
    NdotL = ( dot( lightVec, normal ) + 1.0 ) * 0.5;

    gl_Position = mvp * vec4( vertexPosition, 1.0 );
}
// Toon.frag
#version 100

// 自己提供的参数
varying vec3 reflectVec;
varying vec3 viewVec;
varying float NdotL;
uniform sampler2D texPalette;

float grayTexture( vec4 color )
{
    return dot( color.xyz, vec3( 0.299, 0.587, 0.114 ) );
}

void main( void )
{
    gl_FragColor = texture2D( texPalette, vec2( NdotL, 1.0 ) );
}

我们使用的离散纹理如下所示:

       程序运行结果如下所示:

使用ADO操作SQL SERVER 通过'OLE DB 访问 ACCESS 数据库 ,实现数据交换

使用的存储过程简介1、sp_addlinkedserver --- 为SQL SERVER 添加一个Link Server2、sp_addlinkedsrvlogin --- 为Link Server...
  • DeD
  • DeD
  • 2001-02-08 09:52:00
  • 1363

Qt下使用Shader绘制三角形

在Qt下使用可编程管线编写OpenGL的流程是怎样的呢? 下面演示了Qt下使用可编程管线的基本代码:(绘制三个不同的三角形,并做些旋转变换) 在Qt中,我们从QGLWidget继承,来实现OpenG...
  • fuyajun01
  • fuyajun01
  • 2012-11-29 16:14:58
  • 7256

Qt 3D的研究(十):描边渲染(轮廓渲染)以及Silhouette Shader

之前写了两篇文章,介绍了我在边缘检测上面的研究,实际上,使用GPU对渲染图像进行边缘检测,前提是需要进行两遍渲染,前一遍渲染的结果作为后一遍结果的输入纹理,接着在第二遍渲染的时候,对二维图像做一些图像...
  • jiangcaiyang123
  • jiangcaiyang123
  • 2015-03-19 13:28:56
  • 2994

QtQuick3D-例子-shaders-爆炸效果

代码片段: shaders.qml mport QtQuick 1.0 Rectangle { property int current : 0 //当前tab页 width...
  • sgcc_zhs
  • sgcc_zhs
  • 2012-10-29 16:44:01
  • 1117

Toon shader desktop

  • 2014年08月17日 07:35
  • 31.83MB
  • 下载

UnityShader实例05:Toon(卡通)材质

卡通材质 卡通着色也叫Non-photorealisticrendering非真实渲染,通常一些3D游戏用来做一些卡通风格的游戏,一般来说特点主要有两点,一是描边,二是风格化着色,表现为明暗渐变过...
  • u011047171
  • u011047171
  • 2015-07-02 10:53:06
  • 9525

Unity自带Shader(一)(卡通着色)

前言:最近有必要系统的学习下shader了,虽然平时也用着,原理什么的都懂,而且觉得应用层的shader特别简单,真的难的是隐藏在shader后面的算法,这里准备了一个系列,这个系列是对unity 标...
  • pdw_jsp
  • pdw_jsp
  • 2017-01-07 15:12:28
  • 3326

非真实渲染(二)——Toon Shading

       Toon Shading是一种简单、基本的卡通着色方式,其着色的主要效果是用大块、突变的色调来代替正常情况中的渐变色调,从而表现出卡通效果。使用这种渲染方法,然后再结合轮廓边界线的勾勒,...
  • BugRunner
  • BugRunner
  • 2010-04-02 22:09:00
  • 6370

卡通(Toon)着色

CPU端代码设置: // This function does any needed initialization on the rendering // context. void SetupR...
  • huangzhipeng
  • huangzhipeng
  • 2012-09-07 21:53:08
  • 2242

Unity3d shader之卡通着色Toon Shading

卡通着色也叫Non-photorealisticrendering非真实渲染 可以让3d的建模用卡通的效果实现,在日本的游戏中比较常见, 让我们看看在u3d中怎么实现...
  • wolf96
  • wolf96
  • 2015-01-22 15:00:45
  • 5575
收藏助手
不良信息举报
您举报文章:Qt 3D的研究(六):Toon Shader
举报原因:
原因补充:

(最多只允许输入30个字)