andrea 的个人资料Torrent Italia照片日志列表 工具 帮助

日志


11月23日

Creare i modelli 3D per XNA utilizzando Sketchup

Introduzione

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.
Possiamo assegnare alle superfici i colori (che verranno importati in XNA), ma non è possibile esportare textures complesse realizzate partendo da bitmap (per le textures complesse è necessario ricorrere a prodotti professionali quale ad esempio 3D Studio Max).

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.
Ricordo ancora una volta che tale opzione di export esiste solo nella versione Professional del programma.

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.

Allego nella
pagina successiva di questa guida l'intero codice del file Game1.cs per visualizzare il modello in rotazione. Per variare il punto di vista della telecamera virtuale agite sulla stringa:

Vector3 cameraPosition = new Vector3(0.0f, 2000.0f, 5000.0f);
(la lettera f indica che è un valore float)

Il risultato è visualizzato di seguito:

VIDEO

Game1.cs

#region Using Statements
using 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();
        }
    }
}

评论

请稍候...
很抱歉,您输入的评论太长。请缩短您的评论。
您没有输入任何内容,请重试。
很抱歉,我们当前无法添加您的评论。请稍后重试。
若要添加评论,需要您的家长授予您相应权限。请求权限
您的家长禁用了评论功能。
很抱歉,我们当前无法删除您的评论。请稍后重试。
您已超过了一天之内允许提供的评论数上限。请在 24 小时后重试。
因为我们的系统表明您可能在向其他用户提供垃圾评论,您的帐户已禁用了评论功能。如果您认为我们错误地禁用了您的帐户,请联系 Windows Live 支持部门
完成下面的安全检查,您提供评论的过程才能完成。
您在安全检查中键入的字符必须与图片或音频中的字符一致。

若要添加评论,请使用您的 Windows Live ID 登录(如果您使用过 Hotmail、Messenger 或 Xbox LIVE,您就拥有 Windows Live ID)。登录


还没有 Windows Live ID 吗?请注册

引用通告

此日志的引用通告 URL 是:
http://andreadefilippopuma.spaces.live.com/blog/cns!170D986147AC2B82!2224.trak
引用此项的网络日志