游戏开发论坛

 找回密码
 立即注册
搜索
楼主: adachi

关于D3D里面显示文字的问题

[复制链接]

2

主题

16

帖子

16

积分

新手上路

Rank: 1

积分
16
 楼主| 发表于 2005-5-22 23:36:00 | 显示全部楼层

Re: 关于D3D里面显示文字的问题

难道游戏中的文字都是用mesh来做的么?还是大部分文字都是?比如一个列表框里面现实一些用户的名字,这些名字都是用mesh来做的?那这样会不会在文字显示上面浪费过多的资源来对多边形进行处理、显示?

37

主题

180

帖子

180

积分

注册会员

Rank: 2

积分
180
发表于 2005-5-23 10:01:00 | 显示全部楼层

Re: Re:关于D3D里面显示文字的问题

seer: Re:关于D3D里面显示文字的问题

难道是布告版?
恐怖………………
还真有人用它输出文字啊?!


[em11]...我勒
渲染到纹理才是真正的作法

为甚呢..
因为你重新更动文字的速度不可能达到 , 1秒30次
这还没有考虑 gui 系统要用到的文字裁切 边缘裁切

那些直接显示跟本无法做到
[em22] 怎么用textout 丢出 只有 1/4宽的字呢

2

主题

16

帖子

16

积分

新手上路

Rank: 1

积分
16
 楼主| 发表于 2005-5-23 10:27:00 | 显示全部楼层

Re: Re: Re:关于D3D里面显示文字的问题

coldeye: Re: Re:关于D3D里面显示文字的问题



[em11]...我勒
渲染到纹理才是真正的作法

为甚呢..
因为你重新更动文字的速度不可能达到 , 1秒30...


那么如何才能将文字渲染到纹理呢?

132

主题

1341

帖子

1341

积分

金牌会员

Rank: 6Rank: 6

积分
1341
发表于 2005-5-23 12:38:00 | 显示全部楼层

Re:关于D3D里面显示文字的问题

很想知道为什么你不能在最后才渲染文字

2

主题

16

帖子

16

积分

新手上路

Rank: 1

积分
16
 楼主| 发表于 2005-5-23 13:34:00 | 显示全部楼层

Re:关于D3D里面显示文字的问题

是这样的,我在d3d里面输出文字是使用ID3DXFont接口实现的,这个接口里面只有一个DrawText方法来向屏幕渲染文字,但是通过这个方法进行渲染的文字实际上(我理解的)是通过类似于blt的方法实现的,输出的文字会覆盖当前屏幕上面的其他内容(如果这行文字后面有其他东西的话)。
但是我看类似于三国一类的游戏,比如说我在列表框里面选择了一个内容,点击确定按钮,弹出一个确认对话框,这个对话框就会覆盖一部分列表框,同样也覆盖了列表框里面的一部分内容。但是如果使用DrawText的方法来输出文字,那么列表框里面被覆盖掉的文字就会被渲染到那个确认对话框上面,就造成了渲染错误了。不知道我说明白了没有。:)

132

主题

1341

帖子

1341

积分

金牌会员

Rank: 6Rank: 6

积分
1341
发表于 2005-5-23 18:27:00 | 显示全部楼层

Re:关于D3D里面显示文字的问题

用个链表储存好渲染的顺序,平时最后的是文字,当要有对话框时再在链表最后插上

37

主题

180

帖子

180

积分

注册会员

Rank: 2

积分
180
发表于 2005-5-24 00:37:00 | 显示全部楼层

Re: Re: Re: Re:关于D3D里面显示文字的问题

adachi: Re: Re: Re:关于D3D里面显示文字的问题



那么如何才能将文字渲染到纹理呢?


//----------------------------------
//! 取得背景缓冲
//----------------------------------
hr = m_pD3DD->GetBackBuffer( 0, 0, D3DBACKBUFFER_TYPE_MONO, &pBackBuffer );
if SUCCEEDED( hr )
{
D3DSURFACE_DESC Desc;
pBackBuffer->GetDesc( &Desc );
*pFormat        = Desc.Format;
*pWidth        = Desc.Width;
*pHeight        = Desc.Height;

D3DLOCKED_RECT rect;                       
hr = pBackBuffer->LockRect( &rect, NULL, 0 );
*pPitch = rect.Pitch;
*ppBits = rect.pBits;

m_bIsLocked = SUCCEEDED( hr );
SAFE_RELEASE( pBackBuffer );
}

接下来就把字画上去

5

主题

686

帖子

697

积分

高级会员

Rank: 4

积分
697
QQ
发表于 2005-5-24 09:55:00 | 显示全部楼层

Re:关于D3D里面显示文字的问题

我觉得WOW里面的人头上的文字应该是billboard

2

主题

16

帖子

16

积分

新手上路

Rank: 1

积分
16
 楼主| 发表于 2005-5-24 10:37:00 | 显示全部楼层

Re:关于D3D里面显示文字的问题

是不是现在游戏里面的UI都是用Sprite做的,先将各个UI Item的顺序由前到后排好序,然后再渲染?因为如果UI都用多边形实现的话,无论你事先写文字还是后写文字,所有的文字都会显示在屏幕的最上层。或者就是用billboard实现的。
另:to coldeye 你的这段代码不是向纹理上面渲染文字吧,是向后备缓冲渲染吧。

37

主题

180

帖子

180

积分

注册会员

Rank: 2

积分
180
发表于 2005-5-24 12:22:00 | 显示全部楼层

Re: Re:关于D3D里面显示文字的问题

adachi: Re:关于D3D里面显示文字的问题

是不是现在游戏里面的UI都是用Sprite做的,先将各个UI Item的顺序由前到后排好序,然后再渲染?因为如果UI都...


上面那是你把 ?理???enderTarget
把 backbuffer 改成就 ?理就可以了

D3DLOCKED_RECT Rect;
HRESULT hr = m_pTexture->LockRect( 0, &Rect, NULL, 0 );
if SUCCEEDED( hr )
{
*pPitch                = Rect.Pitch;
*ppBits                = Rect.pBits;
m_bIsLocking = true;
return true;
}
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-25 18:10

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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