Ogre 着色器

先说一句,所谓着色器,就是指那些在渲染时,可以为显卡加载的程序。类似于脚本吧。

书接上回

渲染的第一步是,顶点坐标从local space 转换到 camera space,这里就引出第一种着色器。vertex shaders。其实,vertex shader能控制这个变换过程。
eg

vertex_program MyVertexShader1 cg //vertex_program为关键字,表示顶点着色器。 MyVertexShader1 shader名字。 cg 关键字 表明shader使用cg语言
{
source myShaders.cg //定义着色器的脚本文件
entry_point MyVertexShader1 //shader的名字,与脚本中的那个函数名一致
profiles vs_1_1 arbvp1 //shader的版本号


default_params //定义了一个被Ogre 3D自动传给着色器的参数
{
param_named_auto worldViewMatrix worldviewproj_matrix
//关键字worldviewproj_matrix.这个关键字告诉Ogre 3D我们想要我们的参数拥有WorldViewProjection矩阵的值。
///局部空间的坐标乘以这个矩阵的,得到的坐标就是摄像机空间的顶点坐标。

}
}

渲染的第二、三步是,光栅化和贴图,这里可以加载第二种着色器,fragment shader ,这个着色器,可以控制贴图坐标,映射到模型的坐标。
fragment_program MyFragmentShader1 cg  
{
source myShaders.cg //参数含义同上
entry_point MyFragmentShader1
profiles ps_1_1 arbfp1
}


myShaders.文件如下:


void MyFragmentShader1(out float4 color: COLOR)
{
color = float4(0,0,1,0);
}
void MyVertexShader1(
float4 position : POSITION, // 由ogre传给此着色器的参数 worldViewMatrix ,即局部空间的位置
out float4 oPosition : POSITION, //变换完之后的位置,即摄像机空间的位置
uniform float4x4 worldViewMatrix)//此参数拥有WorldViewProjection矩阵的值
{
oPosition = mul(worldViewMatrix, position);//完成从局部坐标到摄像机坐标的映射,即局部坐标 mul WorldViewProjection矩阵 = 摄像机空间坐标。mul 矩阵相乘
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值