flash 3d flash3d 研究所 pv3d 共享资源  | 经典范例  | 视频教程  | 友情链接  | 联系我们
登陆 | 注册  flash 3d 研究所
讨论区





最近更新:
● ck47阁下在讨论区里 发表新主题“新手问题...”(07:49:50)
● 无语瓶阁下在教程区里 回复“《超简易papervision3D基础 ...”(18:09:44)
● payday loan阁下在教程区里 回复“《pv3d, sandy, away3d...”(05:56:23)
浏览主题:总结重问:PV3D中,如何在不透明的墙上绘制一个透明窗户,能看到房子里面

总结重问:PV3D中,如何在不透明的墙上绘制一个透明窗户,能看到房子里面
YYuan (2009-10-23 13:03:04)

DDM君,各位Flash3D大侠,大家好,我把前面问题总结重述一下:我在做一个简单的房屋设计软件,二维设计,三维查看。三维下房子是可以随着鼠标拖动缩放和旋转的,房子的墙是可以用鼠标拖动的,墙上的窗户也随墙移动,也可以由鼠标拖动窗子单独在墙上移动。屋子里面可能会添加一些三维物件,所以需要窗子透明,才能看到屋里的三维的东西。摄像机在房间外面,要能透过窗户看到屋里的东西。

现在的问题是,如何在一面不透明的墙上绘制一个矩形透明的窗子,透过透过窗子看到屋里的东西。我现在墙和窗都用plane表示,请问用PaperVision3D怎么做,能否讲一下思路。

刚才DDM君将的DAE到人PNG贴图的方法,我不太懂,我想这种可能不能动态随鼠标移动透过窗子看到屋子里面的东西,我想这是不是还不能解决这个问题。

我想的一个笨办法一个办法是把墙分为几个块绘制,把窗子那一块空出来作为透明的Plane,这样就可以透过该Plane看到屋子里面了。但这个方法不方便,特别是移动墙时,因为我们这里主要是墙要作为一个整体能够进行移动缩放等操作。或者用鼠标移动窗子到墙上的其他位置,这时用这种方法就重绘墙窗子就计算比较复杂了。


flash 3d 研究所 akdcl
(2009-10-23 13:24:31)
窗户还能在墙上移动是吧,窗户有点类似遮罩室内的感觉对吧?

我觉得用你说的方法确实可行,就是墙拼接而成,中间是透明窗户。
也可以用一个bitmapData,根据窗户的移动,动态的改变bitmapData来实现贴图的变化,但怎么想都觉得挺麻烦的。

要不你就用遮罩吧?

墙,室内,窗户,三者是分层的,窗户遮罩室内。

flash 3d 研究所 YYuan
(2009-10-23 14:00:53)
谢谢akdcl。
你说的动态的改变bitmapData来实现贴图的变化,那贴图部分怎么能够动态显示出潼关窗子看到的室内的景象呢。
另外不好意思,有些低级的问题,遮罩是什么意思,有没有参考资料。用遮罩会影响对墙和窗作为整体的鼠标拖动吗。

flash 3d 研究所 akdcl
(2009-10-23 16:16:37)
一个贴图是墙,一个贴图是窗户的边
窗户的边跟着鼠标移动,
然后matrix要包含窗户的x,y偏移量,
墙.draw(方块,matrix,colorTf,BlendMode.ERASE);
其实这个叙述我也叙述不清,有图会方便些,额我不会放图

flash 3d 研究所 YYuan
(2009-10-24 01:29:32)
麻烦稍微解释一下你说的这个函数:
墙.draw(方块,matrix,colorTf,BlendMode.ERASE);
你说的这个墙是用什么类实现。
参数“方块”是不是对应墙上的窗户。
matrix是窗户的偏移量坐标吗。
colorTf是贴图吗,它怎么动态显示透过窗户显示的屋子里的景象呢。
谢谢。

flash 3d 研究所 YYuan
(2009-10-24 11:37:39)
我尝试用BitmapData.draw(BitmapData方块,matrix,colorTf,BlendMode.ERASE)方法,好像还是不行,不能消除BitmapData上的那个BitmapData方块。不知道怎什么因。akdcl君能否解释详细一些。程序如下:
var winBMP:BitmapData = new BitmapData(800, 800,true);
 
var myBitmapData:BitmapData = new BitmapData(1500, 1500,false,0x00FF00);

myBitmapData.draw(winBMP,null,null,BlendMode.ERASE);

var bpmaterial:BitmapMaterial = new BitmapMaterial(myBitmapData, true);

plane = new Plane(bpmaterial, 1500, 1500);

plane.material.doubleSided = true;

scene.add(plane)
 


不知道其他大侠有没有别的什么好办法,望不吝赐教。先谢谢了。

flash 3d 研究所 akdcl
(2009-10-26 10:22:25)
恩好的,就是矩阵,和颜色矩阵不能是null,一定要有值;
myBitmapData.draw(winBMP,new Matirx(),new ColorTransform(),BlendMode.ERASE);

flash 3d 研究所 YYuan
(2009-10-27 00:36:26)
谢谢。我试验了,但还是不行。

flash 3d 研究所 akdcl
(2009-10-27 09:11:00)
……
这种方法,我用得也不是一次两次了,肯定能用……

flash 3d 研究所 DDM君
(2009-10-27 09:47:28)
这种方法是可以用的,但是注意bitmap里面的图位置有时候有些变化。

flash 3d 研究所 YYuan
(2009-11-04 13:26:53)
谢谢大家,我用MovieMaterial上绘制矩形并用BlendMode.ERASE模式,解决这个问题了。

评论人:
邮   箱: (填入邮箱,博客地址均可)

内   容: (广告和垃圾内容可能会被删除,望理解)
链接地址

验证码:(为防止机器人骚扰,请麻烦输入验证码^_^)
  

(目前需登陆方可发表)


不想添加了