游戏开发论坛

 找回密码
 立即注册
搜索
查看: 18783|回复: 33

cegui圆形地图

[复制链接]

13

主题

79

帖子

81

积分

注册会员

Rank: 2

积分
81
QQ
发表于 2010-1-8 08:44:00 | 显示全部楼层 |阅读模式
已经实现了方形的游戏小地图,可是cegui好像不支持纹理混合的操作,或者是在同一窗口上渲染两张图片。有高手好像实现过 给一下链接地址。 http://icoder.blog.163.com/blog/static/11264634020092304365644/
下面是摘要:
做法如下:
1.加载一个大地图如图(1)和一个圆形的地图遮罩(黑色部分表示透明)如图(2).
2.根据player所在场景中的位置,计算出大地图中需要显示的小地图的区域.
3.将小地图的RGB数据(注意:这里不包括A通道的数据)传给圆形的地图遮罩.
4.创建一个CEGUI::Imageset,使它的CEGUI::Texture加载圆形的地图遮罩的数据.
5.创建一个StaticImage窗口,设置其属性如下:
   setProperty("FrameEnabled", "false");
   setProperty("BackgroundEnabled", "false");
   setProperty("Image", "set:创建的imageset名称 image:定义的Image名称");
6.重回该窗口.

我不懂其中第3步的详细操作,有高手知道的指点一下。谢谢abc

1

主题

15

帖子

15

积分

新手上路

Rank: 1

积分
15
发表于 2010-1-8 14:39:00 | 显示全部楼层

Re:cegui圆形地图

第三步用到了ogre的图像相关操作,基本原理是:
创建一个ogre纹理,每帧把要绘制的小地图范围绘制到这个纹理,然后绘制遮罩图到这个纹理,把不需要的部分alpha掉,产生圆形的纹理。然后把此纹理映射到cegui中(也就是用此纹理创建一个imageset)
具体代码自己实现吧,给你几个关键字:
Ogre::HardwarePixelBuffer::blit
Ogre::TextureManager::createManual

5

主题

46

帖子

55

积分

注册会员

Rank: 2

积分
55
QQ
发表于 2010-1-8 15:31:00 | 显示全部楼层

Re:cegui圆形地图

拷贝RGB数据到遮罩,我弄过,可以实现任何形状的地图显示
不过效率低了点
后来修改了CEGUIRenderer,直接向它送定点数据来绘制

13

主题

79

帖子

81

积分

注册会员

Rank: 2

积分
81
QQ
 楼主| 发表于 2010-1-8 17:09:00 | 显示全部楼层

Re:cegui圆形地图

谢谢大家的回复啊,这个问题困扰我研究了快2个月了 星期一回公司继续研究大家给的建议。
希望大侠们能继续关注这个帖子啊
3q at first

13

主题

79

帖子

81

积分

注册会员

Rank: 2

积分
81
QQ
 楼主| 发表于 2010-1-11 20:14:00 | 显示全部楼层

Re:cegui圆形地图

Feiyu还在不?我用Ogre::TextureManager::createManual是可以创建Ogre::Texture的
可是在OgreTexture.h里 OgreTexture::getBuff 是这样声明的:ervirtual HardwarePixelBufferSharedPtr getBuffer(size_t face=0, size_t mipmap=0) = 0;这个函数是纯虚函数,无法得到HardwarePixelBufferSharedPtr。也就导致了无法向HardwarePixelBuffer::blit(const HardwarePixelBufferSharedPtr &src, const Image::Box &srcBox, const Image::Box &dstBox);传入参数。不知道怎么入手.

72

主题

447

帖子

454

积分

中级会员

Rank: 3Rank: 3

积分
454
QQ
发表于 2010-1-16 10:47:00 | 显示全部楼层

Re:cegui圆形地图

其实方法非常简单....

5

主题

46

帖子

55

积分

注册会员

Rank: 2

积分
55
QQ
发表于 2010-1-17 12:51:00 | 显示全部楼层

Re:cegui圆形地图

为什么不行,纯虚函数就不能调用了?
可以用 CEGUIRenderer 加载遮罩 和 地图
小地图每次更新,lock两张纹理, 拷贝地图中要显示区域的RGB到遮罩,保留遮罩的Alpha
然后遮罩作为Image显示到界面上
这个方法就是拷贝像素的效率会慢,不如直接传顶点数据( 相当于一个圆片模型 )快

13

主题

79

帖子

81

积分

注册会员

Rank: 2

积分
81
QQ
 楼主| 发表于 2010-1-18 14:58:00 | 显示全部楼层

Re:cegui圆形地图

我太笨了,我只会
CEGUI::Renderer* pRander;
Texture* pTexMap = pRander->createTexture("Map.jpg");
Texture* pTexMask = pRander->createTexture("Mask.jpg");
不知道用哪个东西lock, 以及lock后的操作
能不能多给点代码提示啊,最好提示一下关键函数 多谢了

2

主题

28

帖子

28

积分

注册会员

Rank: 2

积分
28
发表于 2010-1-20 16:17:00 | 显示全部楼层

Re:cegui圆形地图

Ogre::HardwarePixelBuffer::blit 的话,可能效率不是很好。其他方法谁能告知一下?比如用 Ogre 的 material 方法去渲染这个材质等。

13

主题

79

帖子

81

积分

注册会员

Rank: 2

积分
81
QQ
 楼主| 发表于 2010-1-21 16:39:00 | 显示全部楼层

Re:cegui圆形地图

楼上的救救我啊,我连Ogre::HardwarePixelBuffer::blit也不会
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-6 11:29

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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