2009-12-22 50 views
0

更新2:現在看來,這比模擬問題更像一個建模問題。哎呦。在XNA問題中使用3D Studio Max DirectX着色器

我是新來的XNA開發人員,儘管我有C#經驗,但我一直堅持在一個地方繼續工作兩天。

情況:我在3D Studio Max 2010中創建了一個模型,它使用了兩種材質,都是DirectX Shader類型。該模型無錯輸出到FBX,Visual Studio正確編譯它。當我最初運行Draw()方法時,它在我的一個循環的'BasicEffect'部分拋出一個異常,向我展示(至少對我來說)它正在正確加載.fx文件,它必須嵌入到FBX中文件或其他東西。

問題: 當使用以下代碼

foreach (ModelMesh mesh in map.Meshes) 
    { 
     foreach (Effect effect in mesh.Effects) 
     { 
      effect.CurrentTechnique = effect.Techniques["DefaultTechnique"]; 
      effect.Begin(); 
      effect.Parameters["World"].SetValue(Matrix.CreateTranslation(Vector3.Zero)); 
      effect.Parameters["View"].SetValue(ActiveCamera.ViewMatrix); 
      effect.Parameters["Projection"].SetValue(ActiveCamera.ProjectionMatrix); 
      effect.Parameters["WorldViewProj"].SetValue(Matrix.Identity * ActiveCamera.ProjectionMatrix); 
      effect.Parameters["WorldView"].SetValue(Matrix.Identity * ActiveCamera.ViewMatrix); 

      foreach (EffectPass ep in effect.CurrentTechnique.Passes) 
      { 
       ep.Begin(); 
       // something goes here? 
       ep.End(); 
      } 

      effect.End(); 
     } 

     mesh.Draw(); 
    } 

發生的出現一個白盒覆蓋在屏幕的下半部分,而不論相機位置或角度的唯一的事情。我得到了Max中指定的default.fx文件的效果參數的名稱(位於[程序文件] \ autodesk \ 3ds Max 2010 \ maps \ fx中)。

我感覺我正在設置一個或所有這些不正確。我試着查看教程並遵循他們的代碼,但是沒有一個似乎適用於我的模型。

任何幫助或想法?

UPDATE: 進行這些更改:

effect.Parameters["WorldViewProj"].SetValue(Matrix.CreateTranslation(Vector3.Zero) * ActiveCamera.ViewMatrix * Conductor.ActiveCamera.ProjectionMatrix); 
effect.Parameters["WorldView"].SetValue(Matrix.CreateTranslation(Vector3.Zero) * ActiveCamera.ViewMatrix); 

該模型能夠得出。但是,一切都是完全白色的:(

回答

1

不幸的是,尤其是沒有看到着色器和/或知道你得到的是什麼錯誤,要弄清楚這裏有什麼問題是很難的。可能會出錯的東西

我的建議是從一個簡單的測試開始,製作一個盒子,應用一個非常簡單的着色器,並進行渲染,然後添加一些參數(例如)像素着色器的紅色成分是通過的數量,併成功完成渲染

通過簡化問題集,您可以計算出最大出口的着色器的細微差別,你如何設置屬性。在某個時候,你會意識到你做錯了什麼,並能夠將它應用到更復雜的着色器。

我很感興趣聽到這是怎麼回事......請確保您在解決此問題後對其進行評論,以便我看到結果。祝你好運! :-)

+0

昨天晚上經過了更多修補之後,我發現我的代碼或多或少地工作,這是一個模型問題,而不是編碼問題。所以一旦我找出如何正確地做到這一點,我會公佈結果:P – 2009-12-22 18:29:33