游戏开发论坛

 找回密码
 立即注册
搜索
查看: 6454|回复: 8

SetViewPort函数的问题

[复制链接]

36

主题

109

帖子

111

积分

注册会员

Rank: 2

积分
111
发表于 2007-10-7 16:45:00 | 显示全部楼层 |阅读模式
          D3DVIEWPORT9 viewport;
        p_device->GetViewport(&viewport);
        viewport.Width=100;
        viewport.Height=100;
        viewport.X=0;
        viewport.Y=0;
        viewport.MinZ=0.0f;
        viewport.MaxZ=1.0f;
        if(FAILED(p_device->SetViewport(&viewport)))
        {
                MessageBox(0,L"SETVIEW",L"SETVIEW",0);
                      return 0;

        }
我在initd3d(HWND hwnd)中初始化视口,然后在render()函数中画了一个三角形,用g_pd3dDevice-&gtresent( NULL, NULL, NULL, NULL )进行显示,但是我发现画面上有两个三角形,一个在viewport视口中的三角形,一个是原先屏幕上的三角形,我就纳闷了,为什么是两个哪,不是后台缓冲区的内容都应该画到我新设置的viewport中吗, 怎么原来的屏幕位置也画了一个?或者我把这个函数用错了,还请大家指点下 [em7]

5

主题

31

帖子

31

积分

注册会员

Rank: 2

积分
31
发表于 2007-10-7 17:05:00 | 显示全部楼层

Re: SetViewPort函数的问题

可能是没有调用clear这个函数
一般的用法是

initialize new_viewport
clear()
GetViewport(old_viewport)
SetViewport(new_viewport)
draw
Present()
SetViewport(old_viewport)

36

主题

109

帖子

111

积分

注册会员

Rank: 2

积分
111
 楼主| 发表于 2007-10-7 20:08:00 | 显示全部楼层

Re:SetViewPort函数的问题

哦,我说哪,我是在clear()前设置的viewport,所以导致我刚才说的奇怪的现象,不过我发现假如我按照楼上的方法设置后,当我拉大或者朔小主窗口的时候,发现我所画的三角形的位置也会随着主窗口的大小动态的调整相对主窗口的位置和大小,这是为什么哪,我视口设置的是左上角在(0,0),宽200,高200,这样的结果是当我的主窗口被我拉的还剩一点大的时候,也能看到三角行,不知道这种现象是否正常,按照我的正常理解是无论主窗口放大或者变小,视口的大小和位置是不变的,而不是随着主窗口做相对变化,不知道事实上应该是什么样的。

5

主题

31

帖子

31

积分

注册会员

Rank: 2

积分
31
发表于 2007-10-8 17:05:00 | 显示全部楼层

Re:SetViewPort函数的问题

当窗口改变大小的时候,你应该处理WM_SIZE消息,把视口相应地变换为新的窗口的宽和高

36

主题

109

帖子

111

积分

注册会员

Rank: 2

积分
111
 楼主| 发表于 2007-10-10 14:30:00 | 显示全部楼层

Re:SetViewPort函数的问题

其实我就是不想图象显示整个客户区才这么做的, 我只想在窗口上开个小的窗口(也就是视口显示),所以我才设置为(0,0,200,200),按照道理这个视口应该不会随着窗口朔放而朔放的,除非我指定的宽读是相对宽度,不知道怎么回事

66

主题

223

帖子

223

积分

中级会员

Rank: 3Rank: 3

积分
223
发表于 2007-10-11 22:17:00 | 显示全部楼层

Re:SetViewPort函数的问题

拉条板凳看...等高人解答

1

主题

8

帖子

26

积分

注册会员

Rank: 2

积分
26
发表于 2010-12-13 11:07:00 | 显示全部楼层

Re: SetViewPort函数的问题

不错哦,不过我想建立多个viewport,每个viewport有独立的camera!如何实现呢

1

主题

8

帖子

26

积分

注册会员

Rank: 2

积分
26
发表于 2010-12-13 11:08:00 | 显示全部楼层

Re:SetViewPort函数的问题

拉个沙发给你做。

0

主题

398

帖子

577

积分

高级会员

Rank: 4

积分
577
发表于 2010-12-13 17:41:00 | 显示全部楼层

Re: Re:SetViewPort函数的问题

li574000: Re:SetViewPort函数的问题

哦,我说哪,我是在clear()前设置的viewport,所以导致我刚才说的奇怪的现象,不过我发现假如我按照楼上的方...


窗口尺寸改变时,后台缓冲的大小还是你原来客户区的,Viewport是针对后台缓冲的设置,不是针对你窗口的.
Present函数默认情况下是将后台缓冲按照客户区的大小缩放到客户区的,所以就出现了你描述的问题.正确的做法是:
1.在窗口改变时,销毁D3D设备,然后重新创建,这样后台缓冲又会和你当前的窗口保持一致了
2.或者,用Present的参数控制,避免后台缓冲缩放到客户区
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-5-30 11:15

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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