2010-04-05 25 views
-1

我正在閱讀一個開源項目,並且我發現有一個函數可以從obj文件讀取3D數據(讓我們說一個字符)並繪製它。 源代碼:如何使用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; 
     } 

,爲什麼它需要在DirectX手動讀取數據?據我所知,在XDA編程中,我們只需要調用一個函數來加載資源。

這是因爲它在DirectX中,沒有函數來讀取資源? 如果是,那麼如何準備3D資源?在XDA中,我們只需要使用其他軟件繪製3D圖片然後導出。但是我應該在DirectX中做什麼?

回答

1

上面的代碼用於加載特定的文件格式。它不是支持的。 XNA允許加載.X和FBX文件。 DirectX支持加載.X文件,但.FBX文件必須使用FBX SDK構建。

要使用DXSDK加載SDK和所有的信息傳送到相關組硬件數據結構:)

+0

謝謝,家庭綜合我們想寫一個3D應用程序呈現.FBX,爲什麼我們需要加載具體數據而不是按照標準,是否有任何好處? – MemoryLeak 2010-04-05 10:25:04

+0

我不完全確定你的意思?您是否建議將某些數據轉換爲X-File格式比將其加載到相關的頂點緩衝區和索引緩衝區更容易?當然,翻譯後加載會更快,但這完全取決於你想要對數據做什麼... – Goz 2010-04-06 07:39:05