游戏开发论坛

 找回密码
 立即注册
搜索
查看: 7690|回复: 10

D3D渲染在窗口模式下的变形问题

[复制链接]

5

主题

27

帖子

33

积分

注册会员

Rank: 2

积分
33
发表于 2006-7-17 14:02:00 | 显示全部楼层 |阅读模式
     本人在用D3D做一个窗口模式下的2D游戏时遇到一个挺郁闷的问题: 如果玩家改变窗口大小,窗口里面渲染的纹理大小也跟着改变,被拉申或缩小,D3D的视口自动跟着窗口大小的改变而改变,我该如何让D3D的视口不跟随窗口而改变呢,或者有些人会说,你建立一个不能改变大小的窗口就行了吧,但项目现在的需求是:窗口可以随意改变

13

主题

978

帖子

978

积分

高级会员

Rank: 4

积分
978
发表于 2006-7-18 12:14:00 | 显示全部楼层 |阅读模式
不允许改变窗口大小不就结了?

5

主题

27

帖子

33

积分

注册会员

Rank: 2

积分
33
 楼主| 发表于 2006-7-17 14:15:00 | 显示全部楼层

Re:D3D渲染在窗口模式下的变形问题

     还有,我在MFC的视图类初始化的同时初始化D3D环境,当要为视图添加一个滚动条时,D3D在此视图中渲染的纹理就会产生变形,例如:我用MFC建立一个800*600的窗口,我也同时建立一个后缓冲表面为800*600的D3D设备,这时,我新建一个滚动条,此时窗口客户区实际大小变成了768*600(一部分被滚动条占去), 而D3D设备的后缓冲表面大小并未跟着改变,就造成了渲染时的变形现像,这个问题跟上一个问题其实本质上是一样的,就是如何让D3D视口不跟随窗口大小改变而改变呢???

35

主题

1735

帖子

1739

积分

金牌会员

Rank: 6Rank: 6

积分
1739
QQ
发表于 2006-7-17 23:18:00 | 显示全部楼层

Re:D3D渲染在窗口模式下的变形问题

在设置后缓冲表面为800*600前,从新计算窗口的尺寸,并用MoveWindow函数更新窗口即可。代码如下:
RECT Client,Wind;
GetClientRect(hWnd,&Client);//获取客户区区域
GetWindowRect(hWnd,&Wind);//获取窗口区域
LONG NewWidth=(Wind.right-Wind.left)+(800-Client.right);//计算新窗口宽
LONG NewHeight=(Wind.bottom-Wind.top)+(600-Client.bottom);//计算新窗口高
MoveWindow(hWnd,Wind.left,Wind.top,NewWidth,NewHeight,TRUE);//更新窗口大小

5

主题

27

帖子

33

积分

注册会员

Rank: 2

积分
33
 楼主| 发表于 2006-7-18 09:51:00 | 显示全部楼层

Re:D3D渲染在窗口模式下的变形问题

但如果后缓冲表面确定下来之后,窗口大小又被人为改变呢,D3D会自动识应窗口大小的改变,纹理会产生变形

18

主题

971

帖子

982

积分

高级会员

Rank: 4

积分
982
发表于 2006-7-18 11:42:00 | 显示全部楼层

Re:D3D渲染在窗口模式下的变形问题

重新设置投影矩阵!

5

主题

27

帖子

33

积分

注册会员

Rank: 2

积分
33
 楼主| 发表于 2006-7-18 12:08:00 | 显示全部楼层

Re:D3D渲染在窗口模式下的变形问题

我正在用D3D渲染2D画面,用的是LPD3DXSPRITE,好像不能够通过改变投影矩阵的方法解决问题

5

主题

686

帖子

697

积分

高级会员

Rank: 4

积分
697
QQ
发表于 2006-7-18 12:21:00 | 显示全部楼层

Re:D3D渲染在窗口模式下的变形问题

resize的时候会设备丢失的吧?重置设备的时候按照当前窗口大小重置就可以了啊

35

主题

1735

帖子

1739

积分

金牌会员

Rank: 6Rank: 6

积分
1739
QQ
发表于 2006-7-18 21:40:00 | 显示全部楼层

Re: Re:D3D渲染在窗口模式下的变形问题

tw_fabric: Re3D渲染在窗口模式下的变形问题

但如果后缓冲表面确定下来之后,窗口大小又被人为改变呢,D3D会自动识应窗口大小的改变,纹理会产生变形


老大呀老大,你把我前面的代码里的800和600给改成变量不就完了吗,以后人为改变时,直接改变这两个变量不就结了吗。

30

主题

357

帖子

388

积分

中级会员

Rank: 3Rank: 3

积分
388
QQ
发表于 2006-7-19 09:19:00 | 显示全部楼层

Re:D3D渲染在窗口模式下的变形问题

程序是很灵活的东西啊,换个方式思考就会得到答案,楼主太关注怎样使贴图不变形,却没想过与窗口变形同步变化,运动是相对的,变形也是如此,有点类似在3DsMax中玩UVMap的感觉,玩玩那个就知道什么叫变形了哈哈!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-24 23:07

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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