| andrea 的个人资料Torrent Italia照片日志列表 | 帮助 |
|
11月23日 Creare i modelli 3D per XNA utilizzando SketchupIntroduzione
Il tutorial di introduzione all'sdk XNA Game Studio Express illustra come sia possibile visualizzare e controllare con una periferica un modello 3D su piattaforma Windows/Xbox360, ma prende in considerazione un modello già fatto non contemplando la realizzazione dello stesso.
Il modello 3D consiste in un file .fbx, un formato di interscambio e creazione 3D, contenente i vettori che descrivono il modello generato grazie ad un CAD 3D. Il software di modellazione solida 3D Studio Max per esempio è in grado di esportare i modelli direttamente in .fbx.
Esistono opportuni convertitori (dell'Autodesk per esempio) che convertono in fbx i files vettoriali prodotti con i tradizionali CAD 3D (e viceversa) quali per esempio AutoCAD (con moduli 3D), Pro Engineer, Solidworks, Solidedge ecc... Il problema di fondo consiste nel fatto che l'utilizzo dei CAD 3D professionali non è per nulla semplice e alla portata di tutti, spesso voluminosi manuali di supporto devono essere accompagnati da corsi di specializzazione ed aggiornamento.
La presente guida si pone come scopo la progettazione di un modello 3D importabile in XNA realizzato con relativa semplicità, senza particolari basi nel campo della progettazione 3D, utilizzando Sketchup.
L'ormai celebre CAD 3D Sketchup infatti, oltre a vantare una facilità d'impiego sicuramente migliore rispetto ai colleghi piu' professionali (per usare i quali e' necessario maturare una certa esperienza), permette di esportare i modelli 3D nel formato .fbx.
Qualora si possieda un po' di infarinatura di disegno CAD 3D, sarà necessario veramente pochissimo tempo per realizzare modelli ben definiti e d'effetto. Purtroppo l'opportunità di esportare i progetti nei vari formati vettoriali d'interscambio (tra cui fbx) esiste solo nella versione Pro a pagamento, comunque scaricabile in versione trial (8 ore di utilizzo libero) dal sito ufficiale. Inoltre il programma non consente l'esportazione delle textures in formato .tga, ma i colori assegnati dal CAD permangono una volta importato il modello nel progetto XNA. Come ogni CAD 3D, la costruzione di un modello parte dalla progettazione di uno schizzo 2D (scratch), successivamente lavorato per generare il modello 3D. La base della lavorazione 3D in Sketchup è lo strumento estrusione, il quale consente lo sviluppo spaziale dello scratch lungo l'asse normale alla superficie su cui giace.
Una volta estruso il pezzo, è possibile apportare successive modifiche/lavorazioni per ottenere il prodotto finito utilizzando gli altri strumenti a corredo, su cui non mi dilungherò dal momento che esistono video tutorial molto esplicativi siti a questo link .
Esiste inoltre una fornitissima libreria on-line di modelli realizzati dagli utenti di tutto il mondo, denominata Sketchup Warehouse.
Creazione del modello 3D con Sketchup
Innanzitutto realizziamo il modello 3D con Sketchup seguendo i video tutorial precedentemente linkati. Progettiamo ad esempio il modello 3D relativo ad un'automobile: Una volta realizzato e salvato il modello in Sketchup, esportiamolo nel formato .fbx selezionando dal menù File - Esporta - Modello 3D e selezionando l'estensione fbx. Una volta esportato il modello, apriamo XNA Game Studio Express e importiamolo basandoci su questo tutorial. Ricordo che è possibile compilare un progetto anche per piattaforma Windows; la compilazione e l'utilizzo del medesimo progetto per Xbox360 richiede l'abbonamento al Creator's Club. Ad ogni modo lo stesso codice può essere compilato per entrambe le piattaforme senza cambiare una sola virgola: l'importante è selezionare la soluzione corretta nel Wizard iniziale di XNA. Prestiamo attenziona a creare nel progetto la cartella Content al cui interno dobbiamo creare la cartella Models; successivamente includiamo in questa cartella il modello fbx selezionando add existing item Metto a disposizione il modello in fbx dell'automobile a questo link. Vector3 cameraPosition = new Vector3(0.0f, 2000.0f, 5000.0f); Il risultato è visualizzato di seguito: Game1.cs #region Using Statementsusing System;using System.Collections.Generic;using Microsoft.Xna.Framework;using Microsoft.Xna.Framework.Audio;using Microsoft.Xna.Framework.Content;using Microsoft.Xna.Framework.Graphics;using Microsoft.Xna.Framework.Input;using Microsoft.Xna.Framework.Storage;#endregion public class Game1 : Microsoft.Xna.Framework.Game{ GraphicsDeviceManager graphics; ContentManager content; public Game1() { graphics = new GraphicsDeviceManager(this); content = new ContentManager(Services); } protected override void Initialize() { base.Initialize(); } //3d model to draw Model myModel; protected override void LoadGraphicsContent(bool loadAllContent) { if (loadAllContent) {//Importiamo il modello 3D realizzato con Sketchup myModel = content.Load< Model >("Content\\Models\\Ferrari"); } } protected override void UnloadGraphicsContent(bool unloadAllContent) { if (unloadAllContent == true) { content.Unload(); } } protected override void Update(GameTime gameTime) { if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed) this.Exit(); modelRotation += (float)gameTime.ElapsedGameTime.TotalMilliseconds * MathHelper.ToRadians(0.1f); base.Update(gameTime); } //Position of the model in world space, and rotation Vector3 modelPosition = Vector3.Zero; float modelRotation = 0.0f; //terna di punti flot che descrivono il punto di vista della telecamera//cambiandoli varieremo l'inquadratura del modello durante la rotazione Vector3 cameraPosition = new Vector3(0.0f, 2000.0f, 5000.0f); //Aspect ratio to use for the projection matrix float aspectRatio = 640.0f / 480.0f; 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, will use the effects set above. mesh.Draw(); } }}引用通告此日志的引用通告 URL 是: http://andreadefilippopuma.spaces.live.com/blog/cns!170D986147AC2B82!2224.trak 引用此项的网络日志
|
|
|