3d 如何使用directX读取三维图表数据?

3d 如何使用directX读取三维图表数据?,3d,directx,direct3d,3d,Directx,Direct3d,我正在阅读一个开源项目,我发现有一个函数可以从obj文件中读取3D数据(比如一个字符),然后绘制出来。 源代码: List<Vertex3f> verts=new List<Vertex3f>(); List<Vertex3f> norms=new List<Vertex3f>(); Groups=new List<ToothGroup>(); //ArrayList ALf=new ArrayList();//faces always

我正在阅读一个开源项目,我发现有一个函数可以从obj文件中读取3D数据(比如一个字符),然后绘制出来。 源代码:

List<Vertex3f> verts=new List<Vertex3f>();
List<Vertex3f> norms=new List<Vertex3f>();
Groups=new List<ToothGroup>();
//ArrayList ALf=new ArrayList();//faces always part of a group
List<Face> faces=new List<Face>();
MemoryStream stream=new MemoryStream(buffer);
using(StreamReader sr = new StreamReader(stream)){
    String line;
    Vertex3f vertex;
    string[] items;
    string[] subitems;
    Face face;
    ToothGroup group=null;
    while((line = sr.ReadLine()) != null) {
        if(line.StartsWith("#")//comment
            || line.StartsWith("mtllib")//material library.  We build our own.
            || line.StartsWith("usemtl")//use material
            || line.StartsWith("o")) {//object. There's only one object 
            continue;
        }
        if(line.StartsWith("v ")) {//vertex
            items=line.Split(new char[] { ' ' });
            vertex=new Vertex3f();//float[3];
            if(flipHorizontally) {
                vertex.X=-Convert.ToSingle(items[1],CultureInfo.InvariantCulture);
            }
            else {
                vertex.X=Convert.ToSingle(items[1],CultureInfo.InvariantCulture);
            }
            vertex.Y=Convert.ToSingle(items[2],CultureInfo.InvariantCulture);
            vertex.Z=Convert.ToSingle(items[3],CultureInfo.InvariantCulture);
            verts.Add(vertex);
            continue;
        }
List verts=new List();
列表规范=新列表();
组=新列表();
//ArrayList ALf=新的ArrayList()//面始终是组的一部分
列表面=新列表();
MemoryStream stream=新的MemoryStream(缓冲区);
使用(StreamReader sr=新StreamReader(stream)){
弦线;
顶点3f顶点;
字符串[]项;
字符串[]子项;
面对面;
齿组=空;
而((line=sr.ReadLine())!=null){
if(line.StartsWith(“#”)注释
||line.StartsWith(“mtllib”)//材料库。我们建立自己的。
||line.StartsWith(“usemtl”)//使用材质
||line.StartsWith(“o”){//object。只有一个对象
继续;
}
if(line.StartsWith(“v”){//顶点
items=line.Split(新字符[]{''});
顶点=新顶点3f();//浮点[3];
如果(水平翻转){
vertex.X=-Convert.ToSingle(items[1],CultureInfo.InvariantCulture);
}
否则{
vertex.X=Convert.ToSingle(项目[1],CultureInfo.InvariantCulture);
}
vertex.Y=Convert.ToSingle(项目[2],CultureInfo.InvariantCulture);
vertex.Z=Convert.ToSingle(项目[3],CultureInfo.InvariantCulture);
添加(顶点);
继续;
}
为什么它需要在directX中手动读取数据?据我所知,在XDA编程中,我们只需要调用一个函数来加载资源

这是因为它在DirectX中,没有读取资源的函数吗?
如果是,那么如何准备3D资源?在XDA中,我们只需要使用其他软件绘制3D图片,然后导出。但是在DirectX中我应该怎么做?

上面的代码用于加载特定的文件格式。不支持这种格式。XNA允许加载.X和FBX文件。DirectX支持加载.X文件,但.FBX文件必须加载可以使用FBX SDK构建


要使用DXSDK呈现.FBX,请加载SDK并将所有信息传输到相关的一组硬件数据结构:)

谢谢,Dif我们要编写一个3D应用程序,为什么我们需要加载特定的数据而不是遵循标准,有什么好处吗?我不完全确定您的意思?您是否建议这样做比较容易呃,将一些数据转换为X文件格式,而不是仅仅将其加载到相关的顶点缓冲区和索引缓冲区?当然,转换后加载会更快,但这取决于您想对数据做什么。。。