将Shader嵌入Ogre(固定渲染管线到可编程渲染管线)
来源:互联网 发布:原型软件网址转换软件 编辑:程序博客网 时间:2024/05/13 00:49
引言:一般的,ogre是使用固定渲染管线,嵌入可编程管线,可借助GPU,提供更多更丰富的效果。 //-----------------使用脚本加入shader(.material或者.programe使用.hlsl etc)---------- //ogre使用的片段程序定义 //名字( Ogre/CelShadingVP)后面说明是什么shader语言(cg,hlgl,glsl最常用) 3、在材质通道中使用定义好的顶点程序和片段程序 //--------------------------------先声明顶点和片段程序------------------------------ vertex_program GLSL/TestVS glsl //使用glsl程序 //-------------------------材质中使用顶点和片段程序()-------------------------------- .... //这儿也可提供自己专属的传入参数,写法和申明顶点程序时写的一样,如 param_named baseMap int 0 texture_unit //纹理单元10 ...... 通过上面几步(最简单的运用),把脚本载入程序使用即可(脚本就是这么方便) 可以尝试把ogre自带嵌入了顶点(片段)程序的脚本导入程序中,我开始用的是材质脚本Examples/BumpMapping/MultiLight,凸凹贴图,还蛮好用的... 转自: http://blog.csdn.net/pizi0475/archive/2011/04/24/6358555.aspx
1、声明(不是写shader程序)
这儿声明的意思:不是写Shader程序(这个着色程序一般在.hlsl/.glsl/.cg后缀的文件里面),而是用于设置ogre与Shaer的桥梁,内容就是shader文件源和一些传递参数等。
程序定义可以被嵌套在.material脚本内(在这种情况下,它必须位于任何对它的引用之前,即必须先定义后引用)或者如果你希望跨多个.material脚本使用同一个程序,你可以在一个外部的.program脚本中定义。程序定义的方式与在.program或者.material脚本中一样,唯一的区别是所有.program脚本都肯定会在.material脚本之前被处理,因此确保你的程序肯定在任何.material脚本之前被定义。正像.material脚本一样,.program脚本可以从你指定的资源路径上的任意位置读取,并且你可以在一个脚本中定义多个程序。(可以打开Examples.material和Example.programe看看)
示例:
vertex_program Ogre/CelShadingVP cg //vertex_program这个表示顶点程序,片段程序相应为fragment_program ,
{
source Example_CelShading.cg //指定顶点程序的源(也就是shader程序,可以在ogreSDK的programs文件夹下找到)
entry_point main_vp //cg程序和Hlsl程序有程序入口,但GLSL没有程序入口(相当于C语言中的main)
profiles vs_1_1 arbvp1 //使用的语法规则,目前不咋管(可参考ogre.chm.3.1.4节)
//默认参数块开始,后面再详细说传给shader的参数
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
}
//默认参数块结束
}
2、传递参数
一共有四种类型的参数传递:
param_indexed
param_indexed_auto
param_named
param_named_auto
前面两个只能用于“编译程序(如:asm)”,所以先不用管。
后面两种用于高级程序(HLSL,GLSL,Cg)下面细讲
param_named
格式: param_named <name> <type> <value>
示例:param_named shininess float4 10.0 0 0 0
param_named_auto
格式:param_named_auto <name> <value_code> <extra_params>
示例:param_named_auto worldViewProj WORLDVIEWPROJ_MATRIX
参考:
<type>的值可以是float4,matrix4x4,float<n>,int4,int<n>。注意'int'参数只可用于某些更为高级的程序语法中,细节请检查D3D或者GL顶点/片断程序有关文档。一般最有用的是float4和matrix4x4。注意如果你使用了一个不是4的倍数的类型,那么剩余的值会被填充为0(因为GPU总是使用4个浮点数一组表示常量,尽管只用了其中的一个)。
<value>简单地是由空格或者tab制表符分割的数值列表,这些数值可以被转换成你指定过的类型。
<value_code>这个参考Ogre.chm.3.19节(贴不上来,太长了,超过文章字数限制)
{
source TwoTexture.vert //这个是glsl的顶点程序(后缀名自己定义亦可),这是我用RenderMonkey导出来的
default_params
{
}
}
fragment_program GLSL/TestFS glsl //片段程序
{
source TwoTexture.frag
default_params
{
param_named baseMap int 0 //向纹理取样器传递纹理单元( texture_unit)的索引,0表示第一个纹理单元
param_named baseMap1 int 1
}
}
pass
{
vertex_program_ref GLSL/TestVS //通道中引用申明好的程序(vertex_program_ref,注意引用标识)
{
}
fragment_program_ref GLSL/TestFS
{
}
texture_unit //纹理单元0
{
texture T1.jpg
}
{
texture T2.jpg
}
}
- 将Shader嵌入Ogre(固定渲染管线到可编程渲染管线)
- 将Shader嵌入Ogre(固定渲染管线到可编程渲染管线)
- 将Shader嵌入Ogre(固定渲染管线到可编程渲染管线)
- 将Shader嵌入Ogre(固定渲染管线到可编程渲染管线)
- 将Shader嵌入Ogre(固定渲染管线到可编程渲染管线) .
- opengl从固定渲染管线到可编程渲染管线
- 固定渲染管线与可编程渲染管线
- 固定渲染管线与可编程渲染管线
- 固定渲染管线与可编程渲染管线
- 固定渲染管线与可编程渲染管线
- 固定渲染管线与可编程渲染管线
- 固定渲染管线与可编程渲染管线
- 固定渲染管线Shader
- 固定渲染管线与可编程渲染管线的区别
- 可编程图形渲染管线
- Fixed Function Shader(固定渲染管线)
- shader渲染管线
- D3D固定渲染管线
- java中runtime异常
- 个性网名
- 一种自定义网络通信协议
- Ogre的官僚主义批判
- 海贼王感人的场面和经典的语录
- 将Shader嵌入Ogre(固定渲染管线到可编程渲染管线)
- [转]C#.net同步异步SOCKET通讯和多线程总结
- Shader学习心得
- binder详解(四)_getService
- 图书管理程序-完美控制台c++(cpp)
- 将boa移植到Android平台上
- 《观音山》的文艺范儿
- 分布式程序的自动化回归测试
- C中遇到的段错误