游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2447|回复: 4

新人的DDRAW的问题2!!

[复制链接]

3

主题

9

帖子

9

积分

新手上路

Rank: 1

积分
9
发表于 2009-1-13 19:45:00 | 显示全部楼层 |阅读模式
请问一下如果已经用HBITMAP 和BITMAP得到位图以后,如何用DDRAW里面的函数将图显示到LPDIRECTSURFACE7的页面上呢?
因为自己学程序才几个月~~有很多的地方不懂,请各位高手能给我讲讲方法吗?
如果有?]说对的地方请指出
谢谢

9

主题

39

帖子

43

积分

注册会员

Rank: 2

积分
43
发表于 2009-1-13 20:21:00 | 显示全部楼层

Re:新人的DDRAW的问题2!!

用一个中间量LPDIRECTDRAWSURFACE7过渡,LPDIRECTDRAWSURFACE7有一个成员GetDC可以得到HDC,然后你就可以用GDI方式绘图,结束后ReleaseDC,最后把这个中间量Blt过去就好了。注意这个中间量的色深要与系统色深相同。
如果HBITMAP的色深与系统色深相同,并且这个中间量是在系统内存而不是显存中创建中创建的话,可能直接用memcpy复制位图数据还要快一点。

3

主题

9

帖子

9

积分

新手上路

Rank: 1

积分
9
 楼主| 发表于 2009-1-13 20:32:00 | 显示全部楼层

Re:新人的DDRAW的问题2!!

如果用memcpy复制的话如何复制呢?
是复制BITMAP里面的bmBits到LPDIRECTDRAWSURFACE7的lpSurface吗?
能举个例子吗?

顺便问一下做2D游戏是先学DDRAW好还是直接进入D3D好呢?

42

主题

115

帖子

141

积分

注册会员

Rank: 2

积分
141
发表于 2009-1-19 20:33:00 | 显示全部楼层

Re:新人的DDRAW的问题2!!

别学directdraw了,连微软也扔掉了,除了镂空以外什么都得用CPU,还不如用GDI,用direct3d吧,有个辅助库d3dxsprite,能非常方便地绘制图像

2

主题

38

帖子

44

积分

注册会员

Rank: 2

积分
44
发表于 2009-1-21 22:39:00 | 显示全部楼层

Re:新人的DDRAW的问题2!!

无论是什么 基本原理都是一样的
有了接口 可以建立一个带后备表面的主表面 然后给你的位图建立一个辅助表面 将位图的表面内容使用DD的方法Blit到辅助表面上 然后再把辅助表面的内容写到主表面上。。。
给你看一段代码吧 是一本书里的

//下面这段是建立一个有后备缓冲的主表面
DDRAW_INIT_STRUCT(ddsd);

ddsd.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT;

ddsd.dwBackBufferCount = 1;

ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | DDSCAPS_COMPLEX | DDSCAPS_FLIP;

if (FAILED(lpdd->CreateSurface(&ddsd, &lpddsprimary, NULL)))
   return(0);

ddsd.ddsCaps.dwCaps = DDSCAPS_BACKBUFFER;

if (FAILED(lpddsprimary->GetAttachedSurface(&ddsd.ddsCaps, &lpddsback)))
  return(0);
以下是建立一个辅助表面
lpddsbackground = DDraw_Create_Surface(640,480,0,-1);

剩下的过程就是把位图使用类似于
UCHAR *dest_ptr = image_buffer; //目标的BUFFER
UCHAR *src_ptr  = bitmap.buffer;//源BUFFER
memcpy((void *)image_buffer, (void *)bitmap.buffer, SCREEN_WIDTH*SCREEN_HEIGHT);
复制到那个辅助表面上。。。当然 这个过程还要考虑很多问题 比如步长是否相等之类的
建议你看一下一些相关的书籍 比如 那本 游戏编程大师技巧 讲的是比较详细的



您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-20 11:05

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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