2010-04-05 4 views
-1

Je suis en train de lire un projet open source, et j'ai trouvé qu'il y avait une fonction qui lisait les données 3D (disons un caractère) du fichier obj, et le dessinait. le code source:Comment lire les données du graphique 3D avec DirectX?

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; 
     } 

Et pourquoi il faut lire les données manuellement dans directX? Pour autant que je sache, dans la programmation XDA, il suffit d'appeler une fonction pour charger la ressource. Est-ce parce que c'est dans DirectX, il n'y a aucune fonction pour lire la ressource? Si oui, alors comment préparer la ressource 3D? dans XDA nous avons juste besoin d'utiliser d'autres logiciels pour dessiner l'image 3D, puis exporter. mais que dois-je faire dans DirectX?

Répondre

1

Le code ci-dessus permet de charger un format de fichier SPECIFIC. Ce n'est pas celui qui est pris en charge. XNA permet le chargement des fichiers .X et FBX. DirectX prend en charge le chargement des fichiers .X mais les fichiers .FBX doivent être créés à l'aide du FBX SDK.

Pour rendre une .fbx en utilisant la DXSDK charge le SDK et transférer toutes les informations à un ensemble pertinent de structure de données de matériel :)

+0

Merci, Dif nous voulons écrire une application 3D, pourquoi nous devons charger les données spécifiques au lieu de suivre la norme, y a-t-il des avantages? – MemoryLeak

+0

Je ne suis pas tout à fait sûr de ce que vous voulez dire? Êtes-vous en train de suggérer qu'il serait plus facile de convertir certaines données au format X-File que de simplement les charger dans les tampons de vertex et les tampons d'index pertinents? Bien sûr, le chargement post-traduction serait plus rapide mais tout dépend de ce que vous voulez faire avec les données ... – Goz

Questions connexes