我創建了一個模型在3d最大,我集中在世界..不過,當我把它放在XNA中,並通過XNA應用旋轉,似乎它的旋轉中心是不是在實際的對象中,而是稍微遠離它,所以它看起來像對象正在旋轉,而不是旋轉...這是煩人的any1知道如何解決這個問題?模型旋轉在XNA到3D最大似乎是錯誤的
回答
當您將對象置於3ds世界中時,它不會改變頂點位置。它只創建了一個矩陣,可以將頂點從他們所在的位置轉換到放置它們的位置。
可能是因爲經常你沒有對世界原點的視覺參考&沒有意識到你的模型在XNA中被抵消了,可能並不明顯你沒有考慮到這個矩陣。
這是通過Model.CopyAbsoluteBoneTransformsTo()將該矩陣(通過內容處理器變成「Bone」轉換)放入數組中,您可以在設置effect.World時使用該矩陣。
如果聽起來這可能是問題,並且您想要一個快速代碼示例,請告訴我們。
只是爲了擴大@Steve H公司的回答了一下,這裏有幾個可能的原因:
您的XNA代碼,你不應用骨轉換到模型。像大多數建模工具一樣,Max傾向於修改模型的世界變換矩陣而不是頂點本身。變換頂點往往會引入小的浮點錯誤,例如,圍繞z軸的1,0,0旋轉的Pi/2弧度的頂點可能會變爲0,0.99999,0而不是0,1,0 - 這就是浮點數學,也是在你的遊戲中,你總是從源幾何轉換而來的原因。
Here's a link to a bone transforms example on MSDN(從v3.1開始,但有很多v4示例):請注意myModel.CopyAbsoluteBoneTransformsTo(transforms)
和effect.World
作業。這個例子是爲BasicEffect
,但即使你自己的效果,你需要提取骨骼轉換並應用它們。例如,如果您使用自定義着色器,則可以在模型加載時執行此操作。 (請注意,即使你還沒有真正在最大模型中定義的任何骨骼骨轉換是必要的。)
(從鏈接的MSDN文章借用)
protected override void Draw(GameTime gameTime)
{
graphics.GraphicsDevice.Clear(Color.CornflowerBlue);
// Copy any parent transforms.
Matrix[] transforms = new Matrix[myModel.Bones.Count];
myModel.CopyAbsoluteBoneTransformsTo(transforms);
// Draw the model. A model can have multiple meshes, so loop.
foreach (ModelMesh mesh in myModel.Meshes)
{
// This is where the mesh orientation is set, as well
// as our camera and projection.
foreach (BasicEffect effect in mesh.Effects)
{
effect.EnableDefaultLighting();
effect.World = transforms[mesh.ParentBone.Index] *
Matrix.CreateRotationY(modelRotation)
* Matrix.CreateTranslation(modelPosition);
effect.View = Matrix.CreateLookAt(cameraPosition,
Vector3.Zero, Vector3.Up);
effect.Projection = Matrix.CreatePerspectiveFieldOfView(
MathHelper.ToRadians(45.0f), aspectRatio,
1.0f, 10000.0f);
}
// Draw the mesh, using the effects set above.
mesh.Draw();
}
base.Draw(gameTime);
}
另一種可能性是,在Max中,對象的樞軸(所有旋轉/縮放/平移變換所基於的中心)不以網格爲中心。 This is easy to change。
問題是3D Studio Max中的支點不會傳遞給XNA。您可以整天更改樞軸點,並且骨骼變形和頂點將保持不變。它只是不能正確導出。
我有一個MAXScript在http://metlab.cse.msu.edu/xna.html修復這個問題。
Charles
- 1. 旋轉3D模型XAML C#
- 2. 在C中旋轉3D模型#
- 3. centralWidget大小似乎錯誤?
- 4. 我無法讓我的3D模型在XNA中前進,但旋轉工作?
- 5. xna 3d模型破壞
- 6. 旋轉3D模型:旋轉中心的建議
- 7. 圍繞絕對軸旋轉3d模型
- 8. 總計似乎是錯誤
- 9. 3D投影的3D模型的優化旋轉
- 10. 如何在模型中旋轉XNA中的單個骨骼?
- 11. 如何在其中心的XNA上旋轉3D立方體?
- 12. XNA中的旋轉
- 13. 如何在3D模型中編寫3D文本在XNA c#
- 14. 3D數學/ 2D旋轉計算:分割/切割3D模型?
- 15. 如何螺旋WPF自動旋轉3D模型
- 16. clearinterval doesnt似乎停止旋轉
- 17. XNA項目中的3D菜單錯誤
- 18. WP7 XNA顯示3D FBX模型
- 19. npm UNMET PEER DEPENDENCY似乎是錯誤的
- 20. XNA Sprite旋轉點
- 21. 雪碧旋轉XNA
- 22. Android的3D旋轉木馬增加大小時,我們旋轉
- 23. 相對於他的旋轉向前移動模型XNA
- 24. 正確旋轉剝皮模型的骨骼? XNA
- 25. Starling 3D旋轉
- 26. IN-條件類型演員似乎是錯誤的
- 27. JavaFX的3D旋轉
- 28. 投影矩陣似乎是錯誤
- 29. XNA - 3D關於局部(改變)船軸的旋轉 - 我錯過了什麼?
- 30. 我的代碼在查找最大編號時似乎有語法錯誤
你能顯示你的代碼嗎?另外3DS Max使用XNA使用右手的左手座標。您是否使用Panda Export來導出模型? – 2011-04-20 10:31:09
errr我的代碼和其他模型一起工作的很好,我使用3個模型的小行星,th3第三個模型看起來不對,可能是因爲它不平衡繞y軸?(變形)。我怎樣才能改變右手的事情? aw和最後的東西,不,我只是通過FBX格式通過3d max導出模型。 – Martinos 2011-04-20 10:48:26