游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2466|回复: 3

如何将alpha通道值拷入自己定义的纹理中?

[复制链接]

22

主题

69

帖子

69

积分

注册会员

Rank: 2

积分
69
发表于 2006-5-18 10:59:00 | 显示全部楼层 |阅读模式
如题
这样试过:

D3DXCreateTexture();//得到IDirect3DTexure9* pTexture

DWORD* pData=new DWORD[texture_width*texture_height];
//定义与纹理大小相同的数组,存储颜色

for(i=0;i<texture_width*texture_height;i++)
  pData=0x00FFFFFF;//alpha 通道值为0?

pTexture->GetSurfaceLevel();//得到IDirect3DSurface9*  pSurface

pSurface->LockRect();//

memcpy(pBits,pData,sizeof(DWORD)*texture_width*texture_height);

pSurface->Unlock();

delete[] pData;

//////////////////////////
希望得到一块透明的纹理,可是得到的 纹理并不是透明的 ,还是白色的,自己往里拷数据,应该怎样改变alhpa通道的值?

7

主题

299

帖子

305

积分

中级会员

Rank: 3Rank: 3

积分
305
发表于 2006-5-19 01:07:00 | 显示全部楼层

Re:如何将alpha通道值拷入自己定义的纹理中?

就这样看这段代码没问题,设置alpha直就是在lockrect和uplock之间设置的

问题有可能出现在其他部分的代码中

5

主题

686

帖子

697

积分

高级会员

Rank: 4

积分
697
QQ
发表于 2006-5-20 20:24:00 | 显示全部楼层

Re:如何将alpha通道值拷入自己定义的纹理中?

一张Surface的每一行不光有像素数据,还可能会有一些缓冲数据,直接像你那样memcpy整张纹理可能会造成后续行的像素数据没有对齐,你自定义的DWORD数据没有写入正确的地址。应该一行一行的memcpy,从行头memcpy纹理宽度*dword,然后跳转到第二行头再继续copy,这样才是正确的做法,每两行之间的间隔宽度在Surface_Desc的Pitch数据中

22

主题

69

帖子

69

积分

注册会员

Rank: 2

积分
69
 楼主| 发表于 2006-5-22 17:43:00 | 显示全部楼层

Re:如何将alpha通道值拷入自己定义的纹理中?

非常感谢!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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