关于离屏的问题

winlyf 2008-07-17 10:58:07
请问下离屏技术具体方法步骤是什么?他有什么缺点?
我在网上查了下,没有比较详细的介绍。
...全文
220 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
tp906 2008-08-08
  • 打赏
  • 举报
回复
都这么久了,不知道LZ还想不想要答案。
其实那个 离屏surface的叫法,只是某些人用来唬人的。原理很简单。看到pygame(python版的SDL)教程里面就有很生动的解释。
原文如下:
http://www.pygame.org/docs/tut/MoveIt.html

小弟献丑中文解释下:
2D游戏中角色的位置常用pos坐标表示,而地图就是全直角坐标。
这里用个数组进行简化,
实际中背景地图screen[x,y]全坐标简化成一维数组screen[0~5],而角色坐标pos所占的位置也就成了screen[pos]。

实际操作中首先画背景地图,这里是生成一个screen[0~5]的数组。比如是
screen = [1, 1, 2, 2, 2, 1] #其中1和2代表构成地图的不同图块 tiles
screenold=screen #保留一个副本
print screen

然后将角色画上,比如角色的tiles是8,我们把一个8画在screen[3]上。
screen[3] = 8
这时再print screen 得到是[1,1,2,8,2,1]。也就是说那个2现在被8占据了。

现在要让角色8移动一下。[1,1,2,2,8,1],我们希望被8占据的2要还原过来。要实现就要分两步。
先把screen[3] 改成2。实际的操作经常是保留原来的screen=[1,1,2,2,2,1],覆盖现在的.
screen=screenold
再把screen[4]改成8
screen[4]=8
这时就得到了新的screen, 即移动之后的[1,1,2,2,8,1]

基于以上原理。所谓的离屏的surface也就是这里保留的副本screenold。

图形引擎中把最终要显示在屏幕的surface一般叫做screen 。 游戏主体每循环一次也就是每一帧,显卡就读取screen中的内容并显示在屏幕上。

通常,要显示的东西都要先转化加工成surface。比如bitmap一张位图,实际是将所给的位图文件转成一个surface,其间还可以做些加工像透明色。

image_a = bitmap('xxx.bmp',……)
要显示的时候,就将image_a通过blit这种方式添加到screen中去,这样就可以显示在屏幕上了。

而所有的除screen之外的surface都是离屏surface。这也就是所谓的离屏技术。

小弟只熟悉SDL,DIREXT中是不是指定的screen不大清楚,但是原理是正确的。

另由于JPG格式是经过压缩的,想要生成surface就必须先对文件格式进行处理。你可以找到一些扩展API直接读取JPG生成表面,或者把资源换成位图格式的。

扬扬洒洒一篇,换你20分,怎么样你也值了。欢迎交流!
winlyf 2008-07-29
  • 打赏
  • 举报
回复
这么久都没有人来
谁能给我个离屏的例子或者基本的方法,显示文件是JPG格式的
winlyf 2008-07-18
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 gaoteng1984 的回复:]
楼主可以查查"VC DirectX",DirectX应该用到了这个双缓存绘图技术
[/Quote]
我想问下 双缓存是不是就是离屏技术?或者什么其他的?
AliasKavin 2008-07-18
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 AliasKavin 的回复:]
离屏渲染, offscreen rendering 渲染到纹理, Render to texture~~~
将物体或场景渲染到纹理的~~~ 见下面,不过例子还在准备中~~~~
http://www.csinx.org/IBlog/DirectX9/
[/Quote]
是对DX9的离屏渲染~~~ 不是DDRAW~
gaoteng1984 2008-07-18
  • 打赏
  • 举报
回复
楼主可以查查"VC DirectX",DirectX应该用到了这个双缓存绘图技术
winlyf 2008-07-18
  • 打赏
  • 举报
回复
不知道该怎么实现,假如图已经画好了,我再加幅图上去,应该也不会闪烁吧
winlyf 2008-07-17
  • 打赏
  • 举报
回复
我使用的是VC
winlyf 2008-07-17
  • 打赏
  • 举报
回复
另外是不是只有位图文件才可以读到离屏表面?
flysec 2008-07-17
  • 打赏
  • 举报
回复
在内存中另外建立一块虚拟的DC
在这个DC上画,其实也就是本来应该画到屏幕上的东西,先一起画到一个内存中BMP上
最后等所有的都绘制完成后,一次性贴到屏幕上去。免得你老是往屏幕上帖东西,一会一个人,一棵树,什么地图的来回折腾
AliasKavin 2008-07-17
  • 打赏
  • 举报
回复
离屏渲染, offscreen rendering 渲染到纹理, Render to texture~~~
将物体或场景渲染到纹理的~~~ 见下面,不过例子还在准备中~~~~
http://www.csinx.org/IBlog/DirectX9/
winlyf 2008-07-17
  • 打赏
  • 举报
回复
没有人会?

8,304

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧