VBGood网站全文搜索 Google

搜索VBGood全站网页(全文搜索)

VB爱好者乐园(VBGood)

 找回密码
 立即注册
搜索
查看: 13375|回复: 18

[再问问题] 如果BackBuffer大小和窗口大小不一样,怎么不拉伸显示?

[复制链接]
 楼主| 发表于 2009-8-20 17:52:11 | 显示全部楼层 |阅读模式
我的一个图形处理程序里面有两个可以改变大小的PictureBox用来显示D3D内容,窗口大小也可变,D3D创建的时候只创建了一个BackBuffer,大小和屏幕的一样……然后用Present的时候发现整个BackBuffer拉伸成PictureBox的大小显示进去了……我只想BackBuffer的左上角一部分不改变大小直接显示到PictureBox里面去,但是不知道怎么编,Present的那两个Rect设了也没用……
 楼主| 发表于 2009-8-28 14:00:24 | 显示全部楼层
半天都没有人懂……自己查DX9SDK解决了……

原来要设置D3DSWAPEFFECT_COPY,而不是D3DSWAPEFFECT_DISCARD……再设置Present的那两个Rect就可以了……
回复 支持 反对

使用道具 举报

发表于 2009-8-29 03:27:19 | 显示全部楼层
呵呵,我也经常是这样,发个帖提问后智力顿时提高。。。
不发帖自己总解决不了。。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-8-29 11:13:41 | 显示全部楼层
……
回复 支持 反对

使用道具 举报

发表于 2009-9-1 22:25:13 | 显示全部楼层
呵呵,我也经常是这样,发个帖提问后智力顿时提高。。。
不发帖自己总解决不了。。。
VBProFan 发表于 2009-8-29 03:27


我也是,都不好意思了
回复 支持 反对

使用道具 举报

发表于 2010-4-24 12:23:14 | 显示全部楼层
2# acme_pjz

实在没完全弄明白,能给段代码么?谢谢
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-4-25 00:18:56 | 显示全部楼层
6# djrm_yb

……你初始化D3D的时候不是要填一个结构体么??那个结构体里面有个参数就是这个……
回复 支持 反对

使用道具 举报

发表于 2010-4-25 04:04:15 | 显示全部楼层
终于搞定,初始化里:
D3DWindow.SwapEffect = D3DSWAPEFFECT_DISCARD 'D3DSWAPEFFECT_COPY_VSYNC '这个参数好像影响不大,能否解释一下??

D3DWindow.BackBufferWidth = Screen.Width / 15
D3DWindow.BackBufferHeight = Screen.Height / 15

结束渲染的时候:

Dim a As RECT
a.Right = Form1.ScaleWidth
a.Bottom = Form1.ScaleHeight
D3DDevice.Present ByVal a, ByVal 0, ByVal 0, ByVal 0

不知道用的对不??还请多多指教啊。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-4-25 16:37:01 | 显示全部楼层
你那个好像也拉伸了……我的意思是把DISCARD换成COPY……好像COPY_VSYNC运行得慢一点……
回复 支持 反对

使用道具 举报

发表于 2010-4-25 17:01:17 | 显示全部楼层
本帖最后由 djrm_yb 于 2010-4-25 17:07 编辑

9# acme_pjz

没有拉伸,也许是因为参数设置的刚刚好,比例正好=1吧
好像不管D3DWindow.SwapEffect如何设置,,如果后面那个rect的宽高跟窗体宽高不一致的话,就会出现拉伸的效果。。

唯一不好的就是这个拉伸出来的效果实在是太差了,要不绘制的时候就不用重新计算坐标了。。。就像gdi+一样,设置好矩阵,按原坐标绘图就行了
回复 支持 反对

使用道具 举报

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

本版积分规则

文字版|手机版|小黑屋|VBGood  

GMT+8, 2022-7-4 22:19

VB爱好者乐园(VBGood)
快速回复 返回顶部 返回列表