Ogre中实现 几何面正反面不同纹理贴图

 

    首先,我的实现是在OpenGL平台下的。主要是借助GLSL shader语言,在shader中判断是几何面的正面还是反面,然后贴上不同的纹理。最初是在RenderMonkey里实现的,要实现此,需要设置Render State的GL_CullMode为NONE。下面给出很简单shader代码,超级简单,不要见笑。

   首先,顶点shader:

varying vec2 Texcoord;

void main( void )

{
     Texcoord = gl_MultiTexCoord0.xy;  

     gl_Position = ftransform();

}

然后是片段shader:


uniform sampler2D baseMap;

uniform sampler2D baseMap1;

varying vec2 Texcoord;

void main( void )

 if(gl_FrontFacing)  

 gl_FragColor=texture2D( baseMap1, Texcoord );    

else  

 gl_FragColor=texture2D(baseMap,Texcoord);

}

   怎么样,确实够简单吧,这里代码本身不做过多解释。这里主要借助了GLSL的只读内置变量gl_FrontFacing,这个变量当是多边形正面的时候值为true,反面的时候为false,至于什么时候是正面还是反面主要看你的顶点顺序了。。

   开始也说了是在Ogre中实现的,我的做法是将shader写入Ogre的材质脚本。

   上面的顶点shader保存为Twotexture.vert (当然名字你可以自己指定,,,后面的材质脚本里做相应更改就是了),片段shader保存为TwoTexture.frag。然后在写一个Ogre的材质脚本,可命名为TwoSideTexTure.material,脚本的全部内容如下:


vertex_program GLSL/TwoTextureVS glsl
{
 source TwoTexture.vert
 default_params
 {
 }
}

fragment_program GLSL/TwoTextureFS glsl
{
 source TwoTexture.frag
 default_params
 {
   param_named baseMap int 0
      param_named baseMap1 int 1
 }
}

material TwoTexture
{
 technique
 {
  pass
  {
     cull_hardware none
   vertex_program_ref GLSL/TwoTextureVS
   {
   }

   fragment_program_ref GLSL/TwoTextureFS
   {
   }

   texture_unit
   {
    texture T1.jpg
    filtering linear linear none
    tex_address_mode wrap
   }
   texture_unit
   {
    texture T2.jpg
    filtering linear linear none
    tex_address_mode wrap
   }

  }

 }

}

当然media里你要提供两张图片T1.jpg,T1.jpg(也可以其他命名,material里做相应的更改)

 然后程序里你将此材质entityPtr->setMaterialName("TwoTexture");(entityPtr为你实体,或者平面什么的的指针)就行了。

   我这里是程序里做了一个平面,效果如下:

(正面效果图)(背面效果图)

。。。。以后慢慢来。。。。。。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值