游戏开发论坛

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

请教Directx如何动态的更新贴图内容。

[复制链接]

4

主题

10

帖子

10

积分

新手上路

Rank: 1

积分
10
发表于 2010-8-16 08:54:00 | 显示全部楼层 |阅读模式
动态的生成一个贴图,根据文字量确定贴图的大小,再贴图上写字串,然后显示。

效果类似windows下的气泡提示。


熟悉的朋友请给个提示,或者实现方法。谢谢。

2

主题

683

帖子

687

积分

高级会员

Rank: 4

积分
687
发表于 2010-8-16 09:09:00 | 显示全部楼层

Re:请教Directx如何动态的更新贴图内容。

方法很多

4

主题

10

帖子

10

积分

新手上路

Rank: 1

积分
10
 楼主| 发表于 2010-8-16 09:14:00 | 显示全部楼层

Re:请教Directx如何动态的更新贴图内容。

楼上的朋友能不能给个例子?

1

主题

266

帖子

280

积分

中级会员

Rank: 3Rank: 3

积分
280
发表于 2010-8-16 09:19:00 | 显示全部楼层

Re:请教Directx如何动态的更新贴图内容。

贴图不是你自己生成的么
换了贴上不就行了么

4

主题

10

帖子

10

积分

新手上路

Rank: 1

积分
10
 楼主| 发表于 2010-8-16 09:27:00 | 显示全部楼层

Re:请教Directx如何动态的更新贴图内容。

不是我自己生成的,我是在分析一个游戏,这个游戏内一部分文字提示使用的是类似windows下的气泡提示。

我逆向后分析有可能游戏中的贴图是动态生成的,根据提示的字符串大小,然后将字符写在贴图上,最后显示贴图。


所以我想知道directx下如何实现动态生成贴图,并且在贴图上绘制文字。

1

主题

266

帖子

280

积分

中级会员

Rank: 3Rank: 3

积分
280
发表于 2010-8-16 09:48:00 | 显示全部楼层

Re:请教Directx如何动态的更新贴图内容。

自己修改贴图内容:取得贴图内容指针,再去修改

4

主题

10

帖子

10

积分

新手上路

Rank: 1

积分
10
 楼主| 发表于 2010-8-16 09:58:00 | 显示全部楼层

Re:请教Directx如何动态的更新贴图内容。

百度,google 找不到关于修改贴图内容的文章,我这不上来发帖问如何实现么....

我需要实现细节,不是大方向。

1

主题

266

帖子

280

积分

中级会员

Rank: 3Rank: 3

积分
280
发表于 2010-8-16 10:15:00 | 显示全部楼层

Re:请教Directx如何动态的更新贴图内容。

取得的指针就是指向贴图内容的(一维数组的形式)
当然,手动修改其内容来显示文字确实很麻烦
用些现成的字库吧  如Freetype2

4

主题

10

帖子

10

积分

新手上路

Rank: 1

积分
10
 楼主| 发表于 2010-8-16 20:00:00 | 显示全部楼层

Re:请教Directx如何动态的更新贴图内容。

已经确认,游戏的实现确实是在一个贴图上绘制文字,然后显示这个贴图,实现的弹出提示效果。

hook这个call写了一个函数

void __stdcall WriteTextTex(LPDIRECT3DTEXTURE9 lpTex,DWORD dwSrcX,DWORD dwSrcY,const PWCHAR pText,DWORD dwLen,DWORD dwColor)
{
        RECT rect;
        D3DXVECTOR3  vSrcPos;
        IDirect3DSurface9 *p_dds;
        HDC hdc;       
       
        D3DXSaveTextureToFileW(L"test.dds",D3DXIFF_DDS,lpTex,NULL);

        lpTex->GetSurfaceLevel(0,&p_dds);

        p_dds->GetDC(&hdc);

        SelectObject(hdc, hfont);
        SetBkMode(hdc, TRANSPARENT);
        SetTextColor(hdc, dwColor);

        TextOutW(hdc,dwSrcX,dwSrcY,pText,dwLen);

        p_dds->ReleaseDC(hdc);

        p_dds->Release();
        D3DXSaveTextureToFileW(L"test1.dds",D3DXIFF_DDS,lpTex,NULL);
}

用上面这个函数替换了游戏原本call 实现了中文显示,但是又出现一个问题。

TextOutW绘制的文字是是白色,但是和贴图底色合并后会有透明效果。

游戏原本显示的字体无透明效果,实际上去掉贴图底色也是纯白色的字体。


现在请教,如何绘制字体能去掉透明效果?

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

本版积分规则

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

GMT+8, 2025-6-7 19:44

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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