游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3670|回复: 5

请教 在窄屏下运行宽屏游戏时如何才能使上下六黑边?

[复制链接]

83

主题

169

帖子

202

积分

中级会员

Rank: 3Rank: 3

积分
202
发表于 2008-10-14 12:18:00 | 显示全部楼层 |阅读模式
我在程序里建立了一个1280*768的窗口然后设置
d3dPresent_Param.BackBufferWidth=1280;
d3dPresent_Param.BackBufferHeight=768;
在运行的时候开全屏。
但是在非宽屏显示器上显示时程序会自动将显示区域在Y轴上拉伸,可是现在也有许多宽屏的游戏在窄屏上运行时它不会出现这样的事情只会在屏幕的上下出现黑边。

请问这是怎样实现的?

谢谢!

30

主题

90

帖子

94

积分

注册会员

Rank: 2

积分
94
发表于 2008-10-14 18:11:00 | 显示全部楼层

Re:请教 在窄屏下运行宽屏游戏时如何才能使上下六黑边?

是不是还要设置viewport。

180

主题

3511

帖子

3520

积分

论坛元老

Rank: 8Rank: 8

积分
3520
发表于 2008-10-15 10:31:00 | 显示全部楼层

Re:请教 在窄屏下运行宽屏游戏时如何才能使上下六黑边?

楼上的方法效果可能不太好

楼主已经将缓存分辨率设置为1280x768了,就是16:9的宽屏分辨率了.
在4:3屏幕上运行时,这个程序会让4:3的屏幕渲染1280x768的分辨率,所以整个窗口已经被上下拉长了.
用viewport的话是可以实现看上去没被拉长的画面,但是看上去一个像素不是正方形了,而是上下拉长的长方形.

最好还是先检测屏幕当前的分辨率,保存为m,n(或者其他什么变量)
然后在宽高为m,n的窗口上用viewport来渲染一个16:9的视口.
这样的话,一个像素就是正方形了.

83

主题

169

帖子

202

积分

中级会员

Rank: 3Rank: 3

积分
202
 楼主| 发表于 2008-10-15 16:07:00 | 显示全部楼层

Re:请教 在窄屏下运行宽屏游戏时如何才能使上下六黑边?

按照snhun你的方法是可以很好的实现,但是全屏模式下在上下黑边的地方又出现了很厉害的闪烁,如何解决?

180

主题

3511

帖子

3520

积分

论坛元老

Rank: 8Rank: 8

积分
3520
发表于 2008-10-15 16:33:00 | 显示全部楼层

Re:请教 在窄屏下运行宽屏游戏时如何才能使上下六黑边?

vieport只覆盖窗口的中间部分, 上下部分却出现闪烁.
这说明, 你的 ClearColor 在频繁地变化着颜色.
因为ClearColor是刷新整个窗口的, 而不是只刷新Viewport区.

在整个过程种不要改变ClearColor的颜色吧.

83

主题

169

帖子

202

积分

中级会员

Rank: 3Rank: 3

积分
202
 楼主| 发表于 2008-10-15 18:39:00 | 显示全部楼层

Re:请教 在窄屏下运行宽屏游戏时如何才能使上下六黑边?

ClearColor是指“IDirect3DDevice9::Clear()”中的清屏颜色吗。
我没有改变ClearColor呀。
但是只要把主消息循环中的“TranslateMessage(&msg)”和“DispatchMessage(&msg)”注释掉就不会出现这样的问题了。这样做的话程序就不会对窗口消息做出反应了。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-21 02:22

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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