irrlicht引擎:镜子效果

最近在用irrlicht做一个3D试衣间的小项目,为了给项目增添点花样,于是想实现一面镜子。

我记得D3D龙书上有一个使用模板缓冲区实现的例子。网上也有OPENGL实现的例子。 但这一次,我想用irrlicht的RTT实现一面镜子效果。

其实原理和水面反射原理是一样的, 只是没有加扰动而已

 

第一步:渲染反射贴图

反射贴图的渲染,其实就是将摄相机通过镜面镜像即可,irrlicht中我找了半天,没有发现镜像矩阵的算法,倒是在网上搜到了一个。 很是不错。

同时,也翻阅了一下先前公司引擎项目的代码,发现其实就是那个公式。 有兴趣的朋友可以参看这里

 

http://www.cnblogs.com/glshader/archive/2010/11/02/1866971.html

 

通过这个镜面反射矩阵,我们可以将摄相机镜像, 相当于是从镜子里向外看,渲染出一个世界。 在渲染的时候,要记得设置裁剪面。 在我的测试中我没有设置。

第二步:重新渲染世界

重新渲染世界的时候,镜子需要一个特殊的纹理来进行反射贴图。(镜像摄相机空间的投影纹理映射)。 这个贴图方式,就是指忽略镜子的纹理坐标,而通过

镜像摄相机来计算出投影坐标,然后贴在镜子上。在我的测试中,是用SHADER来实现的。 为镜子做了一个特殊的纹理。

 

下面,我贴一下SHADER,很简单,如果实在不清楚的,可以参考一些投影纹理相关的资料。

 

顶点着色器代码 HLSL

float4x4    WorldViewProj;
float4x4    MirrorWorldViewProj;
struct VS_OUTPUT
{
    float4 position    :POSITION; 

    float3 uv: TEXCOORD0;
}; 

struct VS_INPUT
{
    float4 position        : POSITION;
    float4 color        : COLOR0;
    float2 texCoord0    : TEXCOORD0;
}; 

VS_OUTPUT main(VS_INPUT input)
{
    VS_OUTPUT output;
    float4 pos = mul(input.position, WorldViewProj);
    output.position = pos;

    //计算反射纹理的坐标 

    pos = mul(input.position,MirrorWorldViewProj);
    output.uv.x = 0.5 * (pos.w + pos.x);
    output.uv.y = 0.5 * (pos.w - pos.y);
    output.uv.z = pos.w;
    return output;
}

 

 

像素着色器代码 HLSL

sampler2D colorMap;
struct PS_OUTPUT
{
    float4 color : COLOR0;
}; 

struct PS_INPUT
{
    float4 position    : POSITION;
    float3 uv: TEXCOORD0;
};
PS_OUTPUT main( PS_INPUT input )
{
    PS_OUTPUT output;
    float2 uv = saturate(input.uv.xy / input.uv.z);
    output.color = tex2D(colorMap,uv);
    return output;
}

 

RTT相关的操作,irrlicht的RenderToTexture已经很明白了,再此不在敷述。

 

上图,收工

作者:码瘾少年·麒麟子 
出处:http://www.cnblogs.com/geniusalex/ 
蛮牛专栏:麒麟子 
简介:09年入行,喜欢游戏和编程,对3D游戏和引擎尤其感兴趣。 
版权声明:本文版权归作者和博客园共有,欢迎转载。转载必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载:http://www.cnblogs.com/geniusalex/archive/2013/04/05/3000393.html

时间: 2024-07-30 18:45:47

irrlicht引擎:镜子效果的相关文章

irrlicht引擎:硬件蒙皮骨骼动画

这个东西很顺利,仅用了半小时就找到了方法,最应该感谢的还是Super TuxKart(简称STK,下面就都用这三字母了). 如果不明白STK,同时又对它感兴趣的童鞋,可以访问这里 http://supertuxkart.sourceforge.net/ 由于墙的原因,需要各位搭梯子.   上周末,在弄换装的时候,发现irrlicht引擎本身是不支持硬件蒙皮的,多少令人有些失望. 心里就一直寻思着怎么扩展一下,将它弄出来. 值得说明的是STK对irrlicht引擎的用法是很简单的,基本上可以说是裸

irrlicht引擎:实现天龙八部的RPG换装

又是夜深人静时 看了看时间,已经3点过了,突然想写点什么,却又不知从何说起. 那就从今天这个用irrlicht做天龙八部的模型换装说起吧.   也不知道是为什么,最近又捣鼓起了OGRE和irrlicht. 并且,总想用irrlicht实现一些OGRE中的东西. 当然,这不是商业项目,也没有商业目的,纯属蛋疼而已.   一切行动的由来,都来自于vczh那天晚上的举动. 记得有一天晚上在群里聊天,大伙就称赞各位菊苣是多么的厉害. 最后vc发了一个自己的桌面截图说:让你们看看菊苣是如何练成的(这不是原

如何进行内外优化提升搜素引擎营销效果分析

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 很多人把搜索引擎营销等同于搜索排名,认为只要网站的排名上升了,就算是成功的进行了搜索引擎营销,这种观念实际上仅仅说出了搜索引擎的一种功能,其实搜素引擎营销的目的不仅仅是排名,而且还涉及到品牌营销,渠道营销以及提升用户的忠诚度,那么如何进行搜索引擎营销才能够不断放大营销的功效呢?具体的可以从两个方面来开展. 一.注重网站的内部优化提升营销效果

推荐引擎成为新效果广告渠道

以下是2011年服装电子商务年会,浪淘金CEO周杰进行主题发言. 周杰:今天主要想和大家分享一下新的互联网趋势,讲的是新的技术方向"推荐引擎",希望在推荐引擎时代,互联网可以做到比你更懂你. 主要分享一下广告投放和营销之道. 首先讲讲现在的情况.2012年度央视广告的招标,现场招标总额122.57亿元,同比增长21%,比前几年相比总的收入提高了将近6倍,大家知道央视用户的关注度不如十年前,说明广告资源越来越贵,在这样资源很贵的情况下,作为电商来讲该怎么办.在高成本下的营销情况下,最主流

新排版引擎 WPS文字社区体验版评测

看着刚刚接收到的WPS文字社区体验版(版本号6.3.0.1823),笔者充满了期待,对于这款采用了耗时两年多开发的新排版引擎的体验,是否能像WPS Office文字组开发经理朱云峰所说的那样在文件的打开.文档的排版操作上有更高的速度,还要看实际的测试结果. 一.文档处理速度提升 笔者简单的找了四个测试文档,做好测试前的准备工作.在测试文档的选择上本着贴近实际的原则,没有选择太过复杂的文档,而是选择常用的DOC文档和一个TXT文档.测试内容包括文档的打开.粘贴和拼写检查等常规操作. 测试文档 采用

实时预测用户对物品偏好 阿里云推荐引擎帮助你更好的提升业务

现实中有很多企业或创业者,不晓得如何用数据来更好的运营自己的产品或网站,而阿里云推荐引擎(Recommendation Engine)的出现,则很好的解决了这个问题. 阿里云推荐引擎是一款用于实时预测用户对物品偏好的数据工具,能够帮助客户面对众多物品信息时发现令用户感兴趣的物品. 这是怎么做到的?我们来看看它的原理. 推荐系统一般包括展现子系统.日志子系统和算法子系统三个部分,三者互为一体. "展现"部分不仅要负担展现,还是数据采集的窗口,用户在展现系统的所有行为通过日志录入,采集到的

Unity3D在使用上有哪些优点?

  Unity3d个人觉得网页游戏,手机游戏,对于各个平台支持都很好.并且支持flash,网页运行再也不用安装浏览器插件.这块做的不错.开发人员起点比较低.基本的资料文档都很丰富了.缺点就是画面不给力.灯光.画面各方面在这三个引擎里都是最差的,并且对于美术人员来说,做开发不是很好上手.很简单的一个材质.都要去写shader.. UNITY3D现在已经成为了众多团队的首选3D引擎. 并且,随着Unity3D 4.3的发布,原生的2D支持也让人大开眼界.虽然Unity3d的原生2D功能还有很长的路要

IOS开发:Unity3D角色控制器组件研究

  使用它的方法如下,首先打开Unity游戏引擎编辑器,然后在Project视图中右键选择Import Package -> Charactr Controller(角色控制器)把它导入我们的工程中.如下图所示,第一人称与第三人称的组建已经加入Project视图中.3rd Person Controller 表示第三人称控制器,First Person Controller表示第一人称控制器. 开发:Unity3D角色控制器组件研究-"> 如下图所示,我们将FirstPerson C

你该知道的Windows 8安全功能

自从微软启动并积极推进自己的可信赖计算项目之后,微软在推出的每个版本的Windows系统中都加入了新的安全功能并且一次次提升了Windows系统的安全水平.最新发布的Windows 8虽然在全新的UI和视觉效果上受到了褒贬不一的评价,但其安全性能一如既往的得到了全面的提升,这是不争的事实.下面我们就来看看Windows 8系统中新加入的各种安全功能. Windows 8 基础版安全功能 本部分介绍的安全功能包含在Windows 8系统的各个版本中.不论是面向家庭用户的Windows 8系统还是面