Dans cette astuce, nous verrons comment incorporer et afficher un modèle 3D dans Flash à l'aide de Papervision3D..
Jetons un coup d'œil au résultat final sur lequel nous allons travailler:
Pour utiliser ce didacticiel, vous devez disposer d’un modèle 3D, exporté sous forme de fichier .dae, et de sa texture, sous forme de fichier image..
Je vais utiliser ce modèle de vélo de montagne low-poly de 3DOcean, créé par OneManBand (qui a également créé ce visionneur d'objets 3D soigné dans AIR)..
Vous devrez télécharger une copie de Papervision3D (vous pouvez également en trouver une copie dans les fichiers sources).
Créez un nouveau document ActionScript 3 de 550 x 200 pixels et définissez la cadence de prise de vue sur 30 images par seconde. Définissez également la classe de document sur "EmbeddingDAE"..
Créez un rectangle qui couvre toute la scène et remplissez-le avec un dégradé radial de #FFFFFF à # D9D9D9. Ajustez le dégradé à l'aide de l'outil de transformation du dégradé afin qu'il ressemble à ceci:
Créez un nouveau fichier ActionScript 3 et nommez-le "EmbeddingDAE". Cette classe étendra une classe de Papervision qui a toutes les fonctionnalités de base configurées.
Comme nous allons incorporer le modèle 3D dans votre fichier SWF, nous devons nous assurer que le fichier a été entièrement chargé avant d'essayer de l'utiliser..
Voici le code pour cela:
package import flash.events.Event; importer org.papervision3d.view.BasicView; Classe publique EmbeddingDAE étend BasicView fonction publique EmbeddingDAE () this.loaderInfo.addEventListener (Event.COMPLETE, onFullyLoaded); fonction privée onFullyLoaded (e: Event): void
Au lieu d’héberger nos ressources sur un serveur Web et de les charger à partir de cet emplacement, nous allons simplement les intégrer au fichier SWF. Nous faisons cela en utilisant le SDK Flex Intégrer
étiquette. Si vous ne possédez pas le SDK Flex ou si vous rencontrez des problèmes avec la version pré-installée, vous pouvez le télécharger ici.
Flash sait comment traiter certains types de fichiers, comme mon .png
fichier de texture, mais il ne connaît pas le .dae
format de fichier. Par conséquent, nous devons définir un paramètre secondaire, le type MIME, pour application / flux d'octets
- cela signifie que le fichier sera transformé en un ByteArray
.
Lorsque vous utilisez le Intégrer
balise, nous devons faire référence au chemin relatif (ou complet) du fichier et attribuer une classe à ce fichier. Plus tard, nous pouvons créer une instance du fichier incorporé en utilisant cette classe.
Ici vous pouvez voir le code:
public class EmbeddingDAE étend BasicView [Embed (source = "mountain_bike.dae", mimeType = "application / octet-stream")] private var bikeModelClass: Class; [Incorporer (source = "bike_texture.png")] private var bikeTextureClass: Class; fonction publique EmbeddingDAE ()
Vous devrez remplacer les chemins pour qu'ils correspondent à vos propres fichiers..
Pour utiliser notre texture avec notre modèle dans Papervision3D, nous devons faire trois choses:
Bitmap
- afin que nous puissions accéder à sa bitmapData
.Matériel
avec ça bitmapData
-- cela fonctionnera comme une texture.MatériauxListe
, qui reliera notre matériel à notre modèle. Il aura besoin du nom du matériau utilisé pour le modèle. Si vous n'avez qu'un seul fichier de texture (ce qui est le plus courant), vous n'avez pas à vous en soucier, utilisez simplement "tous".Voici le code faisant cela (ajouté à onFullyLoaded ()
):
var bitmap: Bitmap = new bikeTextureClass (); var bitmapMaterial: BitmapMaterial = new BitmapMaterial (bitmap.bitmapData); var materialsList: MaterialsList = new MaterialsList (); materialsList.addMaterial (bitmapMaterial, "all");
N'oubliez pas d'importer:
import flash.display.Bitmap; import org.papervision3d.materials.BitmapMaterial; import org.papervision3d.materials.utils.MaterialsList;
Pour charger notre modèle, nous devons faire quatre choses:
ByteArray
contenant notre modèle.ByteArray
et le MatériauxListe
à notre coquille vide.Commencez par créer la variable:
var privé bikeModelDAE: DAE;
Ensuite, faites le reste (en ajoutant à onFullyLoaded
)
var byteArray: ByteArray = new bikeModelClass (); bikeModelDAE = new DAE (); bikeModelDAE.load (byteArray, materialsList);
N'oubliez pas d'importer:
import flash.utils.ByteArray; import org.papervision3d.objects.parsers.DAE;
Il ne nous manque plus maintenant que de voir le modèle, qui est un morceau de gâteau. J'ajuste également la position de la caméra pour que nous puissions bien regarder ce modèle. Ensuite, je dis à Papervision3D de restituer chaque image.
Voici le code (en ajoutant à nouveau à onFullyLoaded ()
):
this.scene.addChild (bikeModelDAE); this.camera.z = 500; this.startRendering ();
Voici à quoi ça va ressembler:
Nous pouvons maintenant voir le modèle, mais d’un seul point de vue. C'est un peu ennuyeux n'est-ce pas? Ajoutons de la rotation! Ici, nous allons remplacer une fonction appelée chaque image par le moteur Papervision3D..
redéfinit la fonction protégée onRenderTick (event: Event = null): void super.onRenderTick (event); bikeModelDAE.yaw (1);
La voici encore une fois:
Vous savez maintenant comment ajouter des modèles 3D à vos projets Flash, et c'est en fait assez simple. J'espère que vous avez aimé lire et que vous l'avez trouvé utile.
Merci d'avoir lu!