24小时热门版块排行榜    

查看: 2368  |  回复: 2

fandai5911

荣誉版主 (文坛精英)

优质资源一枚——小翔

文献杰出贡献优秀版主文献杰出贡献

[求助] Matlab如何实现消隐算法(Z-Buffer算法)

小弟Matlab三维建模绘制三维图时涉及到实体的遮挡问题,需要用消隐算法Z-buffer算法或其他消隐算法,但在Matlab中不知道该如何实现,求哪位高手指教一下。

    问题具体描述: 使用Matlab进行三维建模,由大量的离散点构成的网格围成一三维实体,现需判断这些离散点对于三维实体外部的一点(类似于光源)的可见性。如果这些网格节点对于光源点可见,那么其可见度标记为1;如果节点对于光源消隐(被遮蔽),那么那么其可见度标记为0.

   请问这种问题该通过什么算法实现?能否使用Z-buffer算法? 程序该怎么编?   求助大神帮解答一下,万分感谢!
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

一朝成为小木虫,千金散尽还复来
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

libralibra

至尊木虫 (著名写手)

骠骑将军

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
fandai5911: 金币+25, ★★★很有帮助, 谢谢您的回复 2012-12-07 12:25:28
csgt0: 金币+2, 多谢指导 2012-12-07 15:24:21
你要可见性是为了自己作图吗?如果调用matlab的画图,自动设置消隐的.
就你这个问题和物体形状,有个思路,
貌似只有参考点不够,还需要一个向量(视线)或者参考平面,
然后将物体向参考平面投影,得到左右边距(最左端和最右端)
然后判断物体上的点,在左右端之内且距离参考点近的,就可以,否则被遮挡.
不过这个办法好像只适用于物体上没有孔洞的情况
matlab/VB/python/c++/Java写程序请发QQ邮件:790404545@qq.com
2楼2012-12-06 17:27:38
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

xiaohuasuper

铁虫 (小有名气)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
fandai5911: 金币+25, ★★★很有帮助, 谢谢您的回复 2012-12-07 12:25:41
csgt0: 金币+2, 多谢指导 2012-12-07 15:24:57
这个问题是计算机图形学考虑的问题。
Z-Buffer算法是这样的:首先,把光源点看成一个眼里或相机,有两种投影方式:透视投影和平行投影。平行投影是一个长方体,方向由眼睛视线方向和头的方向决定。其次,将这个长方体里的物体坐标转换到眼里(或相机)坐标系里。然后,光栅化,指将组成物体的三角行,离散成像素点。最后,新建两个二维的Buffer,一个是Pixel-Buffer,一个是Z-Buffer,大小是屏幕的大小,将离散好的像素点根据它的X-Y坐标往Pixel-Buffer中放,放的规则是:如果像素的Z值大于Z-Buffer中的值,则写入Pixel-Buffer,同时替换Z-Buffer值,否则丢掉这个像素。
Z-Buffer不是这么容易实现的,Matlab肯定实现了这些功能,并且可能是调用了OpenGL的接口来实现数据的可视化的。
楼主如果只是应用而已,不用自己造车,如果想研究就看计算机图形学。

[ 发自手机版 http://muchong.com/3g ]
感兴趣的方向:计算机图形学,计算数学,计算流体力学
3楼2012-12-07 00:22:32
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 fandai5911 的主题更新
信息提示
请填处理意见