《火炬之光》貌似是最近挺惹人注目的游戏了。我所高兴的是这个游戏是Ogre做的,那么按老外的习惯,里面的模型材质纹理等都是暴露的了。下了一个果不其然。不过真正让我注目的是,这款游戏确实挺不错,一个非商业图形引擎能做成这样是很不错的了,其中我关注到了这样一个效果:

即人物被遮挡后的透视效果。

想了很久不知道如何下手,天一给我发了个博客,立马茅塞顿开。

http://blog.csdn.net/xoyojank/archive/2009/11/09/4791555.aspx

引用这篇文章的步骤:

1. 先画场景

2. 画被遮挡的部分, ZWrite=False; ZFunc=Greater; 开启Alpha混合, 光照亮度做为alpha值输出, 颜色由参数传入.

3. 还原正常的渲染状态, 绘制原模型(为了显示未被遮挡的部分)

在Ogre中实现也是不难的。

在材质的通道里加上两行设置就可以实现透视效果,再用正常材质绘制一次模型即可。

我改了下1.6SDK Sample里的DemoTransparency项目,代码如下

[cpp] view plain copy print ?
  1. //创建要遮挡的"墙",在这里就用一个平面代替
  2. Entity *planeEnt = mSceneMgr->createEntity("Plane", SceneManager::PT_PLANE);
  3. //设置平面的材质
  4. planeEnt->setMaterialName("Examples/RustySteel");
  5.   //创建透视模型
  6. Entity* entityMask = mSceneMgr->createEntity("entityMask", "OgreHead.mesh");
  7. entityMask->setMaterialName("Examples/TransparentTest");
  8.   //创建正常模型
  9.   Entity* entity = mSceneMgr->createEntity("normalEntity", "OgreHead.mesh");
  10.   //将这3个物体附着到场景节点上
  11. SceneNode* rootNode = mSceneMgr->getRootSceneNode();
  12. rootNode->attachObject(planeEnt);
  13. rootNode->attachObject(entityMask);
  14.   SceneNode* node = rootNode->createChildSceneNode();
  15.   node->attachObject(entity);

//创建要遮挡的"墙",在这里就用一个平面代替 Entity *planeEnt = mSceneMgr->createEntity("Plane", SceneManager::PT_PLANE); //设置平面的材质 planeEnt->setMaterialName("Examples/RustySteel"); //创建透视模型 Entity* entityMask = mSceneMgr->createEntity("entityMask", "OgreHead.mesh"); entityMask->setMaterialName("Examples/TransparentTest"); //创建正常模型 Entity* entity = mSceneMgr->createEntity("normalEntity", "OgreHead.mesh"); //将这3个物体附着到场景节点上 SceneNode* rootNode = mSceneMgr->getRootSceneNode(); rootNode->attachObject(planeEnt); rootNode->attachObject(entityMask); SceneNode* node = rootNode->createChildSceneNode(); node->attachObject(entity);

这些都是基本代码,主要是"Examples/TransparentTest"这个材质

我修改了Ogre自带的这个材质,代码如下

material Examples/TransparentTest
{
  technique
  {
    pass
    {
      ambient 0.2 0.2 0.2
      scene_blend add

      //重点是这两行
      depth_write off       //使像素不更新深度缓冲
      depth_func greater       //检测深度值的函数,greater参数即将要写入

                         //的像素的深度大于现在缓冲区内容的深度,则写入

                           //通俗来说就是只显示被遮盖的部分

                         //使用这条设置的前提是深度检测是打开的,即depth_check on
                         //不过它默认就是这样的,所以再次就不用再写一次了

      //下面的两个纹理单元起的效果是旋转的材质效果,不是本文重点

      //需要研究可参看Ogre手册

      texture_unit
      {
        texture Water01.jpg
        scroll_anim 0.25 0  

      }

      texture_unit
      {
        texture Water01.jpg
        wave_xform scroll_y sine 0 0.1 0 0.5
      }
    }

  }
}

最终效果如下

火炬之光中人物被遮挡效果在Ogre中的实现方法相关推荐

  1. 3D游戏中人物换装解决方案

    换装基本上是每个网游都必须有的一个功能,每种网游的做法都各有不同,有些是换掉整个模型,有些则是通过可以换掉模型的一个部分完成.前者属于整体换,相对简单些:后者则是通过部分替换实现,目前用的比较多,本文 ...

  2. 西游记中人物对应PMP项目管理中的角色分析

    西游记中人物对应PMP项目管理中的角色分析 一.引子 近期我一直在学习PMP(Project Management Professional),PMP指的是项目管理专业人士资格认证.经过4天的强度训练 ...

  3. 一种新型分割图像中人物的方法,基于人物动作辨认

    想要进行图像分割,传统方法是先检测图中物体,在进行分离.在本文中,来自清华大学.腾讯AI研究室和英国卡迪夫大学的研究者们提出了一种新型分割图像中人物的方法,基于人物动作辨认.以下是论智对原文的编译. ...

  4. 统计中文文本中人物出现次数

      大家好,今天跟大家介绍一下如何统计文本中人物出现的次数? 共现关系 统计人物出现次数和人物关系输出到文件 一.共现关系:   在文献计量学中,关键词的共词方法常用来确定该文献集所代表学科中各主题之 ...

  5. 【全球品牌】圣经中人物的名字有哪些?

    以前学英语死不想学,还任性.现在为了生存,英语大把的学,为了了解全球消费心理学,不得不关注很多东西.真是人都是逼出来的.你要是不成功,只能你没遇到逼你的事情.本文之后的内容就不是原创了. /**< ...

  6. 数据分析金庸武侠经典人物,我们喜欢江湖中的这群人

    致敬金庸,数据分析小说人物. 2018年10月30日,一代大侠金庸辞世,享年94岁. 飞雪连天射白鹿,笑书神侠倚碧鸳,再加一部<越女剑>.17年,15部小说,所有的刀光剑影,所有的柔肠百转 ...

  7. Ogre中SDL转为OIS相关内容

    Xcode Ogre1.10中加入OIS库实现SDL和OIS切换 一.         关于OIS库以及头文件的引用 关于OIS库及头文件我自己引用的Ogre1.9中的库及文件, 首先将文件导入Ogr ...

  8. 视频中人物识别--tensorflow介绍

    在开始写视频中人物的识别时用到的知识点有cnn与tensorflow,在此首先介绍一下其中应用到深度学习框架tensorflow. 1 深度学习框架介绍前的"废话" 到目前为止深度 ...

  9. CNN实现摄像头中人物的识别

    在此之前我已经大概说过tensorflow的简单流程,中间应用函数我会在例子中加以注释(更详细的可以查阅tensorflow中的函数讲解).应用cnn实现的视频中人物识别,本想先讲一下cnn的原理,但 ...

最新文章

  1. .NET简谈脚本引擎系列(一:认识脚本引擎)
  2. Leetcode 349. 两个数组的交集 (每日一题 20211014)
  3. Livemesh文件同步功能--使用图解
  4. CentOS最小化安装后AR8151网卡驱动未安装解决办法
  5. 阿里P9谈程序员程序员的青春饭
  6. Angular JS 增删改查(弹框修改)
  7. 页面发送请求到后台报错“Empty or invalid anti forgery header token.”问题解决
  8. 【数组】牛客网:调整数组顺序使奇数位于偶数前面(一)
  9. python json格式和csv文件转换
  10. UIFont 设置字体
  11. 小程序自定义下拉刷新
  12. javascript计算两个时间差
  13. 卷积神经网络之“浅层特征”与“深层特征”
  14. MySQL中通过经纬度查询地址
  15. Python爬取天气数据及可视化分析!这是秋天该有的气温?
  16. 手机对红外探头发送数据和接受
  17. 快递鸟 物流跟踪订阅 即时查询快递 预约取件(在线下单)
  18. 讨论帖:如果只有两个数据中心,使用 Raft 协议还有意义吗?
  19. HTML5页面元素figure与figcaption标记的应用
  20. 面包板入门电子制作 学习笔记6

热门文章

  1. 汪国真的诗《热爱生命》
  2. ctfshow-web爆破(web21-28)
  3. python_浅谈python多线程
  4. animation扩展2——scale放大之后再缩小
  5. 纯js封装一个无缝轮播
  6. systemverilog 宏定义 `define 用法。
  7. 新的晚间工作时间表。。。
  8. linux编译安卓需要多大内存,8G运存已经过时了?手机运存到底要多大才够用?...
  9. 鬼谷分数2-99,和给庞涓,积给孙膑. python 程序实现
  10. 工业平板电脑在智慧工厂中的4大应用分享【触想智能】