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


        今天新开了博客,甚是喜悦,作为菜鸟,无以为写的东西。恰好今天应友人所托,帮忙在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为你实体,或者平面什么的的指针)就行了。

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

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

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

  • 相关阅读:
    什么是ORM
    ORM优缺点
    Azure 中快速搭建 FTPS 服务
    连接到 Azure 上的 SQL Server 虚拟机(经典部署)
    在 Azure 虚拟机中配置 Always On 可用性组(经典)
    SQL Server 2014 虚拟机的自动备份 (Resource Manager)
    Azure 虚拟机上的 SQL Server 常见问题
    排查在 Azure 中新建 Windows 虚拟机时遇到的经典部署问题
    上传通用化 VHD 并使用它在 Azure 中创建新 VM
    排查在 Azure 中新建 Windows VM 时遇到的部署问题
  • 原文地址:https://www.cnblogs.com/lxzCode/p/1961740.html
Copyright © 2020-2023  润新知