Direct3D中如何得到Mesh对象的节点位置、颜色、法线、纹理等信息?很急呀!!谢!

youarestupid 2005-08-25 03:49:16
用Mesh对象读了.x文件,这一步很顺利。现在可以通过mesh.NumberVertex和mesh.NumberFace得到模型节点数和面片数。
那么如何得到Mesh对象的各个节点的详细信息呢?因为每个.x文件的VertexFormats格式都不一样,Dx9_sdk中的那个从VertexBuffer读节点数据到Array的实例好像解决不了问题。
请教!!
...全文
409 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
youarestupid 2005-08-28
  • 打赏
  • 举报
回复
感谢!后来我也发现没有必要克隆Mesh
//定义只有位置的Array
private CustomVertex.PositionOnly [] vbData;
vbData = (CustomVertex.PositionOnly[]) mesh.LockVertexBuffer(
typeof(CustomVertex.PositionOnly) ,
LockFlags.ReadOnly , mesh.NumberVertices);
~~~~~~~~~~~~~~
还有一个问题,我如何得到Mesh模型各个三角形面片的索引的?也就是得到某个三角形是由哪些节点组成的?
我正在做的是读取模型的Mesh信息,然后根据这些信息需要(比如特殊渲染、添加毛发等)重绘另外一个模型
寻开心 2005-08-26
  • 打赏
  • 举报
回复
再说,如果你只是为了获得顶点的数据的话,根本不用这么麻烦啊
顶点始终在数据块的第一组的位置
vertex结构的大小是可以获得的啊
寻开心 2005-08-26
  • 打赏
  • 举报
回复
顶点的FVF如何指定的呢?
youarestupid 2005-08-26
  • 打赏
  • 举报
回复
谢谢你的提示。我用以下方法得到了节点位置信息,C#的。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//定义只有位置的Array
private CustomVertex.PositionOnly [] vbData;
//Mesh顶点格式转换
Mesh vertexMesh=mesh.Clone(mesh.Options.Value,CustomVertex.PositionOnly.Format ,device);
mesh.Dispose();
mesh=vertexMesh;
//vbData数组得到顶点位置
vbData = (CustomVertex.PositionOnly[]) mesh.LockVertexBuffer( typeof(CustomVertex.PositionOnly) , LockFlags.ReadOnly , mesh.NumberVertices);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
但我还发现一个问题,使用dx9_sdk中VertexBuffer的例子就不好使,代码如下:
//定义只有位置的Array
private CustomVertex.PositionOnly [] vbData;
//Mesh顶点格式转换
Mesh vertexMesh=mesh.Clone(mesh.Options.Value,CustomVertex.PositionOnly.Format ,device);
mesh.Dispose();
mesh=vertexMesh;
//按照帮助中的方法建立VertexBuffer
VertexBuffer vb = new VertexBuffer(typeof(CustomVertex.PositionOnly), mesh.NumberVertices, device, Usage.None, CustomVertex.PositionOnly.Format, Pool.Default );
vbData = (CustomVertex.PositionOnly[]) vb.Lock(0,LockFlags.ReadOnly);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
这个就得不到节点坐标,vbData中所有元素的X、Y、Z都是0.0,这是怎么回事?
寻开心 2005-08-26
  • 打赏
  • 举报
回复
mesh的方法当中提供了GetFVF这样的操作,可以获取顶点的格式
但是返回的FVF是一个标志位方式的数值,更适合于判断是否是自己指定的格式,而不适合于判断具体的格式组织是什么样子的
好在mesh提供了,到用户指定的FVF格式的转换
你可以把任意的mesh格式转换成为自己想要的FVF格式,对于这种格式因为是自己指定的,所以顶点数据你比谁都清楚了
参看这两个接口函数: CloneMesh 和 CloneMeshFVF

8,324

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧