动画创作家园  动画人最专业的动画理论网站。
高级搜索
维爱迪-动画创作家园 >> 动画理论 >> 3D游戏角色动画

3D游戏角色动画

维爱迪-动画创作家园 出处: 作者:迷糊小亚 日期:2007-5-31 14:00:30 3D MAX 动画制作教程 | 推荐下载:原动画基础教程 | 动画片《大闹天宫》文学剧本 | Photoshop入门与进阶实例
 

第七,从数据对象检索数据:

当你用IDirectXFileData接口指针指向一个有效的数据对象,可以调用IDirectXFileData::GetName函数得到该数据对象的名字。函数原型为:

HRESULT IDirectXFileData::GetName(

LPSTR pstrNameBuf, // 名字缓冲

LPDWORD pdwBufLen); // 名字缓冲的大小

可以这样使用这个函数:

DWORD Size;

pData->GetName(NULL, &Size);

char *Name = new char[Size];

pData->GetName(Name, &Size);

首先声明一个DWORD Size变量,调用GetName函数时将第一个参数设为NULL,在Size返回名字缓冲的大小。之后利用这个Size值创建存放名字的缓冲,再调用GetName在Name中返回数据对象的名字。

得到了数据对象的名字,你需要得到这个数据对象的模版GUID,去判断这个数据对象是否为你想使用的那个模版的数据对象。利用IDirectXFileData::GetType函数,其原型为:

HRESULT IDirectXFileData::GetType(const GUID ** ppguid);

可以这样使用这个函数:

const GUID *TemplateGUID = NULL;

pData->GetType(&TemplateGUID);//在TemplateGUID中返回该数据对象对应模版的GUID。

现在去匹配这个GUID,看它是否为你想使用的模版的数据对象。

if(*TemplateGUID == TID_D3DRMMeshNormals) {

// 如果匹配成功,这里可以继续处理这个模版的数据对象。

}

最后将介绍GetData函数,用它真正的得到了数据对象的数据。其原型为:

HRESULT IDirectXFileData::GetData(

LPCSTR szMember, // 设置为NULL

DWORD *pcbSize, // 数据的大小

void **ppvData); // 数据指针

下面介绍用GetData得到数据对象结构的大小和数据对象的数据。

假设有这样一个颜色的模版:

template ColorRGBA {

<35FF44E0-6C7C-11cf-8F52-0040333594A3>

FLOAT red;

FLOAT green;

FLOAT blue;

FLOAT alpha;

}

你想访问基于此模版的数据对象的数据你可以这样做:

DWORD DataSize;

float *DataPtr;

pData->GetData(NULL, &DataSize, (void**)&DataPtr);

float red = *DataPtr++;

float green = *DataPtr++;

float blue = *DataPtr++;

float alpha = *DataPtr++;

得到指向数据对象的数据的指针后,就像访问一般的结构一样简单。当然,你可以做得更直接:

typedef struct {

float red, green, blue, alpha;

} sColorRGBA;//定一个结构方便访问数据对象的数据。

sColorRGBA *Color;

DWORD DataSize;

pData->GetData(NULL, &DataSize,(void**)&Color);

这样访问数据时更直接:

float red = Color->red;

float blue = Color->blue;

float green = Color->green;

float alpha = Color->alpha;

访问单个变量是很简单的,下面继续介绍访问数组或字符串。

访问数组:

DWORD DataSize;

DWORD *DataPtr;

pData->GetData(NULL, &DataSize, (void**)&DataPtr);

DWORD NumKeys = *DataPtr++;

for(DWORD i=0;i<NumKeys;i++) {

float fValue = *(FLOAT*)DataPtr++;

访问字符串:

DWORD DataSize;

DWORD *DataPtr;

pData->GetData(NULL, &DataSize, (void**)&DataPtr);

char *StringPtr = (char*)DataPtr;

MessageBox(NULL, StringPtr, "Texture Filename", MB_OK);

为了访问数组或字符串,其本质就是把指针转化成匹配的类型,方便指针的定位操作。

至此,我们已经介绍了X文件的使用方法,X文件是动画模型的载体,所以有必要了解它,进而才能更好的操作它。同时也为后面的动画技术做好了准备。

第一页上一页1234567891011下一页尾页
责任编辑: brahma 参与评论 H网电影院 超爽动漫 电影 | 推荐下载:原动画基础教程 | 动画片《大闹天宫》文学剧本 | 超低价图书
复制本文地址给好友 -
相关文章
原创动画与漫画受关注不平衡 中国动漫产业陷误区[05-31]
T&Y系列动画:《相遇》在线欣赏[05-31]
广州原创动画达人 T&Y WORKSHOP《相遇》记[05-31]
最新3D动画片[Egg story]欣赏[05-30]
动画片[Marco和他的球]欣赏[05-30]
迪士尼将拍动画巨片[宝玉][05-30]
最新文章
原创动画与漫画受关注不平衡 中国动漫产业陷误区[05-31]
T&Y系列动画:《相遇》在线欣赏[05-31]
广州原创动画达人 T&Y WORKSHOP《相遇》记[05-31]
[LAprodco和Argyle兄弟摔跤]欣赏[05-30]
丧尸袭击苹果专卖店视觉欣赏[05-30]
最新3D动画片[Egg story]欣赏[05-30]
动画创作家园QQ群①:2444514(满) QQ群②:15363563(满) QQ群③:48533909(满) QQ群④:44832229 (满) QQ群⑤:43100861 (满) QQ群⑥: 48773990 最佳分辨率 1024×768
维爱迪动画创作家园 冀ICP备19004920号-4
如果您感觉动画创作家园不错,别忘了告诉您的朋友哦,朋友会感谢您的^_^