三、顶点程序与片断程序

  顶点或者片断程序定义可以被多个材质使用,唯一的前提条件是必须在引用它之前在材质的渲染通路部分中定义。

  一个低级顶点程序示例如下:

 vertex_program myVertexProgram asm
{
source myVertexProgram.asm //资源
syntax vs_1_1    //语法规则
}

  定义一个片断程序,与此相同,只是将vertex_program换成fragment_program。

  默认的程序参数 --- 定义默认参数可以避免重复绑定公用的参数

vertex_program Ogre/CelShadingVP cg
{
source Example_CelShading.cg //资源
entry_point main_vp      //入口
profiles vs_1_1 arbvp1    //语法规则
//默认参数块开始
default_params
{
param_named_auto lightPosition light_position_object_space 0
param_named_auto eyePosition camera_position_object_space
param_named_auto worldViewProj worldviewproj_matrix
param_named shininess float 10
}
//默认参数块结束
}

1、顶点程序中的关键技术

  顶点程序中的骨骼动画的实现

  在程序定义时增加如下属性:includes_skeletal_animation true

  顶点程序中的变形动画的实现

  在程序定义时增加如下属性:includes_morph_animation true

  顶点程序中的姿势动画的实现

  在程序定义时增加如下属性:includes_pose_animation 4

  顶点程序中的顶点纹理拾取的实现

  在程序定义时增加如下属性:uses_vertex_texture_fetch true

2、Cg程序

  为了定义Cg程序,你需要在开始时装载Plugin_CgProgramManager.so/.dll,方式可以通过plugins.cfg也可以通过自己的插件装载代码。代码如下:

 fragment_program myCgFragmentProgram cg
{
source myCgFragmentProgram.cg//资源
entry_point main        //入口
profiles ps_2_0 arbfp1    //规则
}

3、DirectX9 HLSL

  语法与Cg类似,唯一超过Cg的优势就是它只需要DirectX渲染系统插件,不需要其他插件。

 vertex_program myHLSLVertexProgram hlsl
{
source myHLSLVertexProgram.txt//资源
entry_point main        //入口
target vs_2_0          //目标定义
}

4、OpenGL GLSL

  语法比Cg简单好多,比Cg好在只需要OpenGL渲染系统插件,不需其他额外的插件。

 vertex_program myGLSLVertexProgram glsl
{
source myGLSLVertexProgram.txt//资源
}

5、顶点程序与片段程序的连接

 vertex_program_ref myVertexProgram
{
param_indexed_auto 0 worldviewproj_matrix//自动参数
param_indexed 4 float4 10.0 0 0 0 //浮点数组合
}
参数解析:
param_indexed----此命令设置索引参数的数值。 
  格式:param_indexed <index> <type> <value>
  示例:param_indexed 0 float4 10.0 0 0 0
param_indexed_auto---此命令告诉Ogre用源数值自动更新给定的参数。
  格式:param_indexed_auto <index> <value_code> <extra_params>
  示例:param_indexed_auto 0 worldviewproj_matrix
param_named----此命令设置索引参数的数值。   
  格式: param_named <name> <type> <value>
  示例:param_named shininess float4 10.0 0 0 0
param_named_auto---此命令告诉Ogre用源数值自动更新给定的参数。
  格式:param_named_auto <name> <value_code> <extra_params>
  示例:param_named_auto worldViewProj WORLDVIEWPROJ_MATRI

6、材质拷贝  

当新创建的材质脚本与另一个材质脚本仅有微小差别时,就需要用到材质拷贝技术,其实和继承一个道理。

  格式: material <NewUniqueChildName> : <ReferanceParentMaterial>

7、目标通路(Target Passes)

  格式1: target <Name> { }//可以有多个

  格式2: target_output { } //唯一

  input---设置目标的输入模式,告诉目标通路在它的任何通路被渲染以前输入什么。

  格式: input (none | previous)

  默认: input none

  only_initial----如果设置为打开,那么这个目标通路只会在效果已经打开后初始化地执行一次。这可能对只执行一次的渲染是有用的,此后的静态内容可以被剩  余的合成器使用。

  格式: only_initial (on | off)

  默认: only_initial off

  visibility_mask----为这个目标通路中的任意render_scene设置可视掩码。这是一个位掩码(尽管它必须被指定为十进制数,而不是十六进制数)并映射到   SceneManager::setVisibilityMask。

  格式: visibility_mask <mask>

  默认: visibility_mask 4294967295

  lod_bias----为这个目标通路中的任意render_scene设置场景LOD偏向。默认是1.0,所有比1.0低的值意味着更低的质量,越高意味着质量越高。

  格式: lod_bias <lodbias>

  默认: lod_bias 1.0

  material_scheme----为这个目标通路中的任意render_scene设置材质方案。材质方案允许你为场景里所有物体选择渲染路径。

  格式: material_scheme <Name>

  默认: material_scheme Default

8、合成器通路(Compositor Passes)

  格式: 'pass' (render_quad | clear | stencil | render_scene) { }

  总共有四类:

clear
  这类通路将目标内一个或多个缓冲器的内容设置为固定的值。这样就能清空颜色缓冲器为固定的颜色,设置深度缓冲器为特定的一类内容,将一个值填到模板缓冲器中,或者是上述三者的任意组合。
stencil
  这类通路为子通路配置模板操作。它可以为你设置模板函数,操作和引用值来表现你所要的模板效果。
render_scene
  这类通路用于表现常规场景渲染。它会用到来自父目标通路的visibility_mask,lod_bias,和material_scheme。
render_quad
  这类通路使用一个给定的材质渲染一片覆盖整个渲染目标的区域。毫无疑问,你会想要将其它目标通路的结果输入进这个操作里,以表现全屏效果。 

可用的通路属性

  材质material----格式: material <Name>

  输入input----格式: input <sampler> <Name>

  标识符identifier----格式: identifier <number>

  首渲染队列first_render_queue-----格式: first_render_queue <id>

  末渲染队列last_render_queue----格式: last_render_queue <id>

  清空clear----格式: clear {缓冲区buffers /颜色值colour_value /深度值depth_value /模板值stencil_value}

  模板stencil----格式: stencil {模板检测check /比较函数comp_func /引用值ref_value /掩码mask /失败操作fail_op /depth_fail_op /pass_op/two_sided}

ogre3D学习基础2 -- 顶点程序与片断程序的更多相关文章

  1. ogre3D学习基础17 --- 如何手动创建ogre程序

    建立自己的Ogre程序 一直以来都是使用ExampleApplication.h来写程序,现在来看看它到底有什么神奇的地方. 首先,我们新建一个win32空项目 然后配置环境 最后新建define.c ...

  2. ogre3D学习基础9 -- 光源程序实例

    这一章练习一下光源的使用,光源分为三种:点光源,聚光源,有向光.具体内容前面说过,这里就不解释了. 继续在上一章的程序的基础上实现. 1.创建摄像机(Camera) createCamera()函数是 ...

  3. ogre3D学习基础1 -- 核心对象与脚本技术

    一.核心对象介绍1.命名空间 Ogre3d使用了C++的特性--命名空间,可以防止命名混淆.使用方法也简单,using namespace Ogre;或者直接在使用时加上“Ogre::”的前缀,如Og ...

  4. ogre3D学习基础5 -- 阴影与动画

    五.阴影 阴影是渲染一个真实场景的重要组成部分,它可以给场景中的物体提供更加真实的感觉,同时还可以帮助用户更好的了解对象间的空间关系. 启用阴影: 缺省情况下,阴影是关闭的,开启方式如下: 1.建立场 ...

  5. ogre3D学习基础18 -- 材质的使用与脚本的简单书写

    这一节以基础16为基础,练习材质的使用. 第一,看看框架 //material #include "ExampleApplication.h" class TutorialAppl ...

  6. ogre3D学习基础4 -- 网格工具与硬件缓存

    三.网格工具(Mesh) 1.导出器(Exporters)--- 用于从模型生成器中得到数据并且导入到OGRE中去. 导出器是指通过3D模型工具的插件写成网格数据和骨骼动画的文件格式可以在OGRE中被 ...

  7. ogre3D学习基础11 -- 交换两个场景管理器

    这一节,练习一下前几次学习的内容,功能很简单,就是建立两个不同的场景管理器,当按下键盘上某个键时切换镜头. 基本框架不变,这个监听器继承了两个父类,一个是我们的老朋友ExampleFrameListe ...

  8. ogre3D学习基础7---材质详解

    物体着色的基础 --- 四种不同光照作用 1.环境反射 近似的模拟了场景中的全局辐射,也就是用来近似模拟所有光在场景中不断散射的结果.材质中有相应的属性来代表这种环境反射颜色. 2.漫反射 这种颜色是 ...

  9. ogre3D学习基础6---场景管理器的使用

    场景管理器的使用 最常使用的坐标系统空间(同时也是Ogre程序所能提供的)即是世界空间(World).父节点空间(Parent)以及本地空间(Local). 1.世界空间 就是物体所存在的地方,当我们 ...

随机推荐

  1. slfj4 + logback

    slf4j:(Simple Logging Facade for Java,简单日志门面),它不是具体的日志解决方案,只服务于各种各样的日志系统.在使用SLF4J的时候,不需要再代码中或配置文件中指定 ...

  2. linux下 ps命令日常

    要对系统中进程进行监测控制,查看状态,内存,CPU的使用情况,使用命令:/bin/ps (1) ps :是显示瞬间进程的状态,并不动态连续: (2) top:如果想对进程运行时间监控,应该用 top ...

  3. Windows 服务快捷启动命令,可以直接在运行处运行电脑的功能。

    gpedit.msc-----组策略 sndrec32-----录音机 nslookup----- ip地址侦测器 explorer------ 打开资源管理器 logoff-------注销命令 t ...

  4. PHP:php遍历数组each()方法总结

    each()的作用是将数组当前元素的键值对拆成一个新数组,并把下一个元素作为当前元素.比如Array(...,'Robert'=>'Bob',...)中的'Robert'=>'Bob'键值 ...

  5. 【HHHOJ】NOIP2018 模拟赛(二十四) 解题报告

    点此进入比赛 得分: \(100+60+100\)(挺好的,涨了一波\(Rating\)) 排名: \(Rank\ 1\) \(Rating\):\(+115\) \(T1\):[HHHOJ13]金( ...

  6. tensorflow构建CNN模型时的常用接口函数

    (1)tf.nn.max_pool()函数 解释: tf.nn.max_pool(value, ksize, strides, padding, data_format='NHWC', name=No ...

  7. elasticsearch RestHighLevelClient 使用方法及封装工具

    目录 EsClientRHL 更新日志 开发原因: 使用前你应该具有哪些技能 工具功能范围介绍 工具源码结构介绍 开始使用 未来规划 git地址:https://gitee.com/zxporz/ES ...

  8. 什么是SAD,SAE,SATD,SSD,SSE,MAD,MAE,MSD,MSE?

    SAD(Sum of Absolute Difference)=SAE(Sum of Absolute Error)即绝对误差和 SATD(Sum of Absolute Transformed Di ...

  9. 分享12款最佳的Bootstrap设计工具

    设计师总会渴望有一些新奇有趣的设计工具来提高工作效率,而Bootstrap就是您的不二选择.2013年Bootstrap得到了广泛普及, 它是开发者较为常用的框架之一,本文我们将分享12款最佳的Boo ...

  10. JDBC中 mysql数据库的连接工具类 Java登录 及增删改查 整理 附带:Navicat Premium 11.0.12中文破解版.zip(下载)mysql数据库工具

    先写一个工具类,有实现MySQL数据库连接的方法,和关闭数据库连接.关闭ResultSet  结果集.关闭PreparedStatement 的方法.代码如下: package com.swift; ...