游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2426|回复: 2

请问如何实现3D桌面精灵的效果?

[复制链接]

5

主题

10

帖子

10

积分

新手上路

Rank: 1

积分
10
发表于 2009-12-29 13:21:00 | 显示全部楼层 |阅读模式
就是一个无标题栏的透明窗口,里面是用Ogre实时渲染的模型。我的关键问题是无法将窗口背景透明化,Ogre中只能设置背景色:mMainViewport->setBackgroundColour( ColourValue::White );
我用如下代码,完全无用,背景仍然存在:
SetWindowLong(hRenderWnd,GWL_STYLE,GetWindowLong(hRenderWnd,GWL_STYLE)&(~(WS_OVERLAPPED|WS_CAPTION|WS_BORDER|WS_THICKFRAME)));
SetWindowLong(hRenderWnd, GWL_EXSTYLE, GetWindowLong(hRenderWnd,GWL_EXSTYLE)|WS_EX_LAYERED);
SetLayeredWindowAttributes(hRenderWnd,RGB(1,1,1),0,LWA_ALPHA/*LWA_COLORKEY*/);

我现在想到个方法,就是使用渲染到纹理,并且进行了尝试,但结果不行。比如我将场景渲染到texture(Ogre::TexturePtr)上,那么背景色仍然存在……
请问哪位大侠有好的解决方案吗?貌似这种问题没有人遇到过啊

31

主题

257

帖子

1752

积分

金牌会员

申城谍影

Rank: 6Rank: 6

积分
1752
QQ
发表于 2010-1-2 21:19:00 | 显示全部楼层

Re:请问如何实现3D桌面精灵的效果?

如果只是看,不接受输入,可以把桌面保存成位图,用作背景。

要同时操作桌面,只能把动画保存成系列2维图片,就可以自定义窗口了。

5

主题

10

帖子

10

积分

新手上路

Rank: 1

积分
10
 楼主| 发表于 2010-1-3 12:23:00 | 显示全部楼层

Re:请问如何实现3D桌面精灵的效果?

可以通过修改将背景的渲染从渲染队列中删除来实现吗?就是实现只渲染除背景外的对象,然后使用WinAPI来实现透明窗口。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-16 15:01

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表