游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2380|回复: 7

有关骨骼动画的所有疑问,盼望大人们的精辟解答~

[复制链接]

30

主题

357

帖子

388

积分

中级会员

Rank: 3Rank: 3

积分
388
QQ
发表于 2006-7-16 16:47:00 | 显示全部楼层 |阅读模式
小弟弟我对骨骼动画有几项死结未能解开,倘若以下问题都能得到解决,那么我就对所有回帖的大大们 OTL, OTZ, OLZ, OP_,O...... 怎么着都行!(注:我的目标是——没有错别字!)

问题1——骨骼动画的权重信息到底保存在哪里?是与每个骨骼保存在一起还是作为顶点的属性与顶点保存在一起?也就是说到底类似与以下两种保存方式的哪一种?:
1、pSkininfo->Bone[n]->Name = "L_Arm";                       //此骨骼影响哪些顶点
     pSkininfo->Bone[n]->IndexArrayOfVertex->SkinWeight = 0.888888;
2、VertexArray[m]->BoneID[x]->Name = "L_Arm";           //此顶点受什么骨骼影响
     VertexArray[m]->BoneID[x]->SkinWeight = 0.888888;

问题2——Microsoft的tiny.x解析出的VertexFVF到底是什么样的呢?如果我现在要把x文件转换成自己的动画文件的话,我需要知道顶点格式是什么样的,这就需要知道顶点结构体中的属性是按什么顺序定义的,比如说是按以下顺序:
struct CUNSTOMVERTEX
{
float x,y,z;
float ux,uy;
float nx,ny,nz;
DWORD r,g,b,a;
DWORD Bone[4];  //这个属性跟第一个问题是有关系的。
};
如果顺序屡不好,保存进文件的数值读出来就不知道给一个什么样的结构体,Microsoft很让人生气,问题很严重!

问题3——当我获得所有有关骨骼动画的顶点信息以后,如何让这些顶点信息变成Mesh?因为DX9中的有几种Mesh对象的方法可以对Mesh进行裁剪、LOD和细化,而且各项操作也比较方便,本人又是那种对自己写算法没有自信的人,万一要有个撕裂什么的多惨呀!故!请求大人们解决这个迷茫~~

问题4——万一有一天我突然想自己亲手对每个顶点进行矩阵变换,那么难不成我必须得让每个顶点都与混合矩阵相乘吗?有没有某个API函数可以用与顶点、权重、矩阵 3个东西相乘的呢?最好传递的是索引一类的,用一个循环就可以搞定的那种方法,以前好象看过两种方法,因为不知道其中一种方法中的BoneId还有一些东西里面装的是什么信息,并且对另一种方法中的UpDateSkinMesh()那个函数的封装程度感到迷茫,固产生了问题1!盼望大人们救命中~
[em7] [em7] [em7] [em7]

30

主题

357

帖子

388

积分

中级会员

Rank: 3Rank: 3

积分
388
QQ
 楼主| 发表于 2006-7-18 09:01:00 | 显示全部楼层 |阅读模式
我知道错了,我学还不行么,多谢各位了!

35

主题

1735

帖子

1739

积分

金牌会员

Rank: 6Rank: 6

积分
1739
QQ
发表于 2006-7-16 17:23:00 | 显示全部楼层

Re:有关骨骼动画的所有疑问,盼望大人们的精辟解答~

“OTL, OTZ, OLZ, OP_,O......”这些暗语是啥意思?难道是程序员专用的行话?我咋不晓得呢?
回答问题1:骨骼动画的权重信息保存到哪里都行,你爱咋保存就咋保存,当在程序中需要用的时候你调出来使用即可(也可预处理)。
回答问题2:既然你自己定义格式,为什么要参考Microsoft的tiny.x的格式呢?自己想咋定义就咋定义,不过最少应该有2种数据:顶点坐标,纹理坐标。很奇怪你列举的顶点结构中怎么会出现一个骨骼数组呢?这个格式很怪异,渲染时恐怕会从电脑屏幕中伸出一只手来给你一拳。
回答问题3:这很简单,创建网格呗,自己看SDK文档。
回答问题4:如果你解决了问题3,那么就不会有那一天的。

36

主题

1047

帖子

1147

积分

金牌会员

Rank: 6Rank: 6

积分
1147
发表于 2006-7-17 07:56:00 | 显示全部楼层

Re:有关骨骼动画的所有疑问,盼望大人们的精辟解答~

楼上基本属于胡说,除非你用 cpu 计算骨骼动画,否则顶点信息中必须要有骨骼和权重信息。
struct CUNSTOMVERTEX
{
float x,y,z;
float ux,uy;
float nx,ny,nz;
DWORD r,g,b,a;
DWORD Bone[4];  //这个属性跟第一个问题是有关系的。
float fWeights[4];  // 每根骨骼对顶点的影响权重。
};

30

主题

357

帖子

388

积分

中级会员

Rank: 3Rank: 3

积分
388
QQ
 楼主| 发表于 2006-7-17 09:59:00 | 显示全部楼层

Re:有关骨骼动画的所有疑问,盼望大人们的精辟解答~

多谢ricohcanon!多谢congy!我想你们误解我的问题了。。。
其实我是想把X文件转换成自己的文件格式,然而不知道用API的方法从X文件中读取的数据都是怎么保存在那些容器中的,所以一直在迷茫,前两个问题的原因是因为我现阶段的水平还不敢去研究3DMAX SDK,据说很麻烦,否则我直接写插件保存就是了,跳过X文件。后两个原因是因为D3DAPI中貌似这些方法特别多,所以盼望大人们能够帮助我了解一下这些奇怪的东西,还有细化和减面之后骨骼权重的问题。
至于OTL, OTZ, OLZ, OP_,O ,你把身体摆成这几个样子看看就知道啦~

30

主题

357

帖子

388

积分

中级会员

Rank: 3Rank: 3

积分
388
QQ
 楼主| 发表于 2006-7-17 10:06:00 | 显示全部楼层

Re:有关骨骼动画的所有疑问,盼望大人们的精辟解答~

再说清楚点吧我。。问题2其实就是Mesh->LockVertexBuffer();这个方法之后,用Mesh->GetVertexBuffer获得的顶点信息是按什么格式存储的,总不能用void**类型来接这些数据吧?偶想把它准确的放到一个定义好的结构体数组CUSTOMVERTEX Vertex[]中,
并以Vertex[n].x之类的方法来对它操作。然而CUSTOMVERTEX结构体中变量定义的顺序要与Mesh->GetVertexBuffer中读出来的顶点数据顺序是一样的吧?就是这个问题啦。

5

主题

63

帖子

63

积分

注册会员

Rank: 2

积分
63
发表于 2006-7-17 12:27:00 | 显示全部楼层

Re:有关骨骼动画的所有疑问,盼望大人们的精辟解答~

就这问题的话 你自己把数据输出来查看不就可以知道顺序是不是一样了

35

主题

1735

帖子

1739

积分

金牌会员

Rank: 6Rank: 6

积分
1739
QQ
发表于 2006-7-17 23:41:00 | 显示全部楼层

Re:有关骨骼动画的所有疑问,盼望大人们的精辟解答~

3楼的那位仁兄,我怎么能是胡说呢,自定义格式的骨骼动画我早就实现了,否则我也不会来指点别人啊,唉。其实编程的魅力在于灵活,没有什么特别固定的模式,大家自有大家各自的方法,不能认为自己思路就是唯一的途径,可能是你的思路与我的不同罢了。

楼主,要是你不想自己编写MAX插件的话,我也没啥办法了,因为我的骨骼动画是我自己编写了一个MAX数据导出插件来导出我自己的数据格式实现的。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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