PV3D Quake 2 (MD2) Model Viewer and Download

Intro

Using MD2 in PV3D was seen, at first, as the best of all worlds. MD2 models are low polygon and work well in PV3D. But finding models that work in PV3D, or creating your own, is a specialized process. Maybe even a lost or dying art…though the fact that there are many great websites out there that use MD2, would seem to contradict this statement.

Quake II Model Viewer

Quake II Model Viewer

Demo
Download
YouTube:

Discussion

In the book, and on the book’s website the MD2 models are discussed in detail. The viewer is provided to help you get started with some elementary code that brings MD2 models into PV3D and provides a number of MD2 models that you can download directly from the application.

In addition, check out the upcoming post on building a data driven website which uses this viewer to demonstrate the power of e4x.

Model Anxiety

Finding good MD2 models on the web can be a challenge. It seems to be one of the great frustrations of working with the MD2 format. A number of model packs can be found on the web at places like

http://www.md2.sitters-electronics.nl/index.html ( static models)

http://telias.free.fr/models_md2_menu.html (animated models)

But keep in mind not all of the models found on the web will work in PV3D, and in the long run you’ll need to be able to make your own models and modify them to be successful. An alternative to the MD2 format is the Collada format which will be discussed in great detail in the book and upcoming post. The big advantage of Collada files over MD2 is that they are human readable.

Importing Quake II Models into PV3D

The procedure for putting MD2 models into PV3D is simple and the documented code snippet that enables you to do that is shown below.

private function initMD2():void {

// Instantiate your skin as a BitmapFileMaterial
var myMD2Skin:BitmapFileMaterial = new BitmapFileMaterial(“assets/mySkin.jpg”, true);

// Instantiate an MD2 object (use true for animation, false otherwise)
var myMD2Object:MD2 = new MD2(true);

// Give your object a name so you can control it in the display list
myMD2Object.name = “md2Object1”;

//Load your MD2 model and its skin
myMD2Object.load(‘assets/myModel.md2′, mySkin, framerate, scale);

// Add you MD2 object to the state using addChild
scene.addChild( myMD2Object);
}

The Big Trick to Handling Multiple Models

In the application we are switching from model to model seamlessly. The big trick to handling multiple models in PV3D is to treat your models as a particle system. Each model has its own display object which is loaded into an array and is annihilated or created when needed as shown below:

Code for Loading Models as Particles

for(var j:uint = 0; j < markersCount; j++)
{
var item:MD2 = new MD2();
particles_ary.push(item);
}

Code for Annihilating and Adding Particles (or models)

movieParent.removeChild(particles_ary[prevIndex]); particles_ary[prevIndex].load(myDataGrid.selectedItem.address, myCarSkin, 15, 1);

movieParent.addChild(particles_ary[prevIndex])

Treating applications as a particle system is covered in great detail in Chapter 6 of the book. To see the entire code for the model viewer you can download it or click the button below.


Model Viewer Code (and download)

<?xml version=”1.0″ encoding=”utf-8″?>
<mx:Application xmlns:mx=”http://www.adobe.com/2006/mxml&#8221; layout=”absolute” creationComplete=”init()” backgroundGradientAlphas=”[1.0, 1.0]” backgroundGradientColors=”[#CFC4C4, #1E254A]“>

<mx:Script>
<![CDATA[
import org.papervision3d.objects.DisplayObject3D;

import flash.events.*;
import org.papervision3d.materials.BitmapFileMaterial;
import org.papervision3d.objects.parsers.MD2;
import org.papervision3d.view.BasicView;
import mx.collections.ArrayCollection;

import flash.net.navigateToURL;
import flash.net.URLRequest;
import flash.net.URLVariables;

import org.papervision3d.view.Viewport3D;
import org.papervision3d.scenes.Scene3D;
import org.papervision3d.cameras.Camera3D;
import org.papervision3d.render.BasicRenderEngine;
import org.papervision3d.objects.primitives.*;

import flash.net.URLRequest;
import mx.controls.Alert;

//By Michael Lively ... an open source fanatic. Please use without restriction, as Jesus said, freely give and freely receive.
//Delight thyself also in the LORD; and he shall give thee the desires of thine heart.

[Bindable]
private var acMarkers:ArrayCollection = new ArrayCollection();

private var prevIndex:int=0;

// Create your MD2 types (car, airplane, helicopter, and van).
private var item:MD2 = new MD2();

private var particles_ary:Array = [];
private var myScaleIs:Number;
private var myDownload:String;
private var mySerAddress:String=”http://www.professionalpapervision.com/demos/web/md2view/&#8221;;

public var movieParent:DisplayObject3D = new DisplayObject3D();

private var viewport: Viewport3D;
private var scene: Scene3D;
private var camera: Camera3D;
private var renderer: BasicRenderEngine;

private var myMouseDown:Boolean=false;

private function init():void{

getXml();
opaqueBackground=”0×000000″;

initPV3D();

}

private function initPV3D():void{

//viewport = new BasicRenderEngine(width, height, scaleToStage, interactive);
viewport = new Viewport3D(800, 600, false,false);
pv3d.rawChildren.addChild(viewport);

//instantiates a Scene3D instance
scene = new Scene3D();
//instantiates a Camera3D instance
camera = new Camera3D();
//renderer draws the scene to the stage
renderer = new BasicRenderEngine();

camera.rotationY=180;
camera.rotationZ=180;
camera.z=300;
camera.x=100;
camera.y=-60;
camera.zoom=30;

scene.addChild(movieParent);

movieParent.rotationX=90;

movieParent.y=-50;
movieParent.x=-100;

this.addEventListener(Event.ENTER_FRAME, render);

pv3d.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
pv3d.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
pv3d.addEventListener(MouseEvent.ROLL_OVER, onMouseUp);

function onMouseDown() : void
{
myMouseDown = true;

};

function onMouseUp() : void
{
myMouseDown = false;
};

}

// Build your models
private function buildModels():void {
// TLoad skin/texture of your model from an external Bitmap
var myCarSkin:BitmapFileMaterial = new BitmapFileMaterial(‘myMD2Models/packs/modelpack1/Model1/auvBG.png’, true);
myImage.source=”myMD2Models/packs/modelpack1/Model1/auvBG.png”;
myDownload=”myMD2Models/packs/modelpack1/Model1.zip”;

//The load method includes (url string, material, framerate, scale)
particles_ary[prevIndex].load(‘myMD2Models/packs/modelpack1/Model1/pilaar.md2′, myCarSkin, 10, 3);
// Add models to your scene
movieParent.addChild(particles_ary[prevIndex]);
myScaleIs=3;
}

private function getXml():void {
var xmlString:URLRequest = new URLRequest(“data/markers.xml”);
var xmlLoader:URLLoader = new URLLoader(xmlString);
xmlLoader.addEventListener(“complete”, readXml);
}

private function readXml(event:Event):void{

var markersXML:XML = new XML(event.target.data);
var markers:XMLList = markersXML..marker;
var markersCount:int = markers.length();

for (var i:uint=0; i < markersCount; i++) {
var markerXml:XML = markers[i];

acMarkers.addItem({label: markerXml.@name, scale: markerXml.@scale, address: markerXml.@address,image: markerXml.@image, type: markerXml.@type, descript:markerXml.@descript,zip:markerXml.@zip });
}
for(var j:uint = 0; j < markersCount; j++)
{
var item:MD2 = new MD2();
particles_ary.push(item);
}
buildModels();
}

private function showInfo(event:Event):void
{
movieParent.rotationX=90;
myImage.source=myDataGrid.selectedItem.image;
movieParent.removeChild(particles_ary[prevIndex]);
// TLoad skin/texture of your model from an external Bitmap
var myCarSkin:BitmapFileMaterial = new BitmapFileMaterial(myDataGrid.selectedItem.image, true);

prevIndex=myDataGrid.selectedIndex;

modelName.text=myDataGrid.selectedItem.label;
myDownload=myDataGrid.selectedItem.zip;

particles_ary[prevIndex].load(myDataGrid.selectedItem.address, myCarSkin, 15, 1);
//The load method includes (url string, material, framerate, scale)

particles_ary[prevIndex].scale=Number(myDataGrid.selectedItem.scale);
//myScale.text=myDataGrid.selectedItem.scale;
myScaleIs=myDataGrid.selectedItem.scale;

// Add models to your scene
movieParent.addChild(particles_ary[prevIndex]);

}

private function render(event:Event):void {
//Add rotation to the models

//particles_ary[prevIndex].roll(1);

if (myMouseDown)
{
rotateXY(movieParent, (mouseY – pv3d.height / 2) , (mouseX – pv3d.width / 2) );
}

movieParent.rotationY+=1;
renderer.renderScene(scene, camera, viewport);
}

private function rotateXY(ball:DisplayObject3D, angleX:Number, angleY:Number):void
{
ball.rotationX = angleX;
ball.rotationY = angleY;
}

public function getMyStuff(e:MouseEvent):void{

var url:String = mySerAddress+myDownload;
var request:URLRequest = new URLRequest(url);

try {
navigateToURL(request);
}
catch (e:Error) {
// handle error here
}
}

]]>
</mx:Script>

<mx:Canvas id=”pv3dContainer” clipContent=”true” left=”0″ right=”0″ top=”0″ bottom=”0″ horizontalScrollPolicy=”off” verticalScrollPolicy=”off” color=”#000202″ borderColor=”#B1D4F8″ backgroundColor=”#5353F9″ backgroundAlpha=”0.19″>

<mx:DataGrid id=”myDataGrid” dataProvider=”{this.acMarkers}” itemClick=”showInfo(event)” height=”423.65″ y=”61″ x=”10″ width=”162.55″ alternatingItemColors=”[#F7F7F7, #EFE4E4]” sortableColumns=”false”>
<mx:columns>
<mx:DataGridColumn headerText=”Models” dataField=”label”/>
</mx:columns>
</mx:DataGrid>
<mx:Canvas x=”180.55″ y=”61″ width=”411.45″ height=”420″ id=”pv3d” >
<mx:Text x=”7″ y=”6″ text=”Egypt Column” width=”107″ id=”modelName”/>
</mx:Canvas>
<mx:Button x=”180.55″ y=”19″ label=”Download Moldei” width=”125″ click=”getMyStuff(event)”/>
<mx:TextArea x=”565″ y=”5″ id=”myScale” width=”126″ visible=”false”/>
<mx:Label x=”24″ y=”33″ text=”Select and Download” height=”20″/>
<mx:Label x=”330″ y=”19″ text=”PV3D MD2 Viewer with Download” width=”248″ fontSize=”14″ fontWeight=”normal” fontStyle=”normal”/>
<mx:Image x=”625.55″ y=”61″ width=”214.45″ height=”220″ id=”myImage”/>
<mx:Label x=”625″ y=”33″ text=”Texture Map”/>
<mx:Label x=”625″ y=”289″ text=”by Mike Lively of NKU”/>

</mx:Canvas>

</mx:Application>

XML Data

<?xml version=”1.0″ encoding=”UTF-8″?>
<markers>
<marker name=”Egypt Column” scale=”3″ address=”myMD2Models/packs/modelpack1/Model1/pilaar.md2″ image=”myMD2Models/packs/modelpack1/Model1/auvBG.png” type=”MD2″ descript=”a 3D model” zip=”myMD2Models/packs/modelpack1/Model1.zip” />
<marker name=”Fire Ext” scale=”6″ address=”myMD2Models/packs/modelpack1/Model2/blusser.md2″ image=”myMD2Models/packs/modelpack1/Model2/blusser.png” type=”MD2″ descript=”a 3D model” zip=”myMD2Models/packs/modelpack1/Model2.zip” />
<marker name=”Metal Cube” scale=”1″ address=”myMD2Models/packs/modelpack1/Model3/box.md2″ image=”myMD2Models/packs/modelpack1/Model3/box.png” type=”MD2″ descript=”a 3D model” zip=”myMD2Models/packs/modelpack1/Model3.zip” />
<marker name=”Metal Column” scale=”.5″ address=”myMD2Models/packs/modelpack1/Model4/const.md2″ image=”myMD2Models/packs/modelpack1/Model4/const.png” type=”MD2″ descript=”a 3D model” zip=”myMD2Models/packs/modelpack1/Model4.zip” />

<marker name=”Stairs” scale=”.7″ address=”myMD2Models/packs/modelpack1/Model5/trap.md2″ image=”myMD2Models/packs/modelpack1/Model5/trap.png” type=”MD2″ descript=”a 3D model” zip=”myMD2Models/packs/modelpack1/Model5.zip” />
<marker name=”Metal Cabinet” scale=”3″ address=”myMD2Models/packs/modelpack1/Model6/kast.md2″ image=”myMD2Models/packs/modelpack1/Model6/kast.png” type=”MD2″ descript=”a 3D model” zip=”myMD2Models/packs/modelpack1/Model6.zip” />
<marker name=”Light Pole” scale=”4″ address=”myMD2Models/packs/modelpack1/Model7/tl1.md2″ image=”myMD2Models/packs/modelpack1/Model7/tl.png” type=”MD2″ descript=”a 3D model” zip=”myMD2Models/packs/modelpack1/Model7.zip” />
<marker name=”Double Light” scale=”4″ address=”myMD2Models/packs/modelpack1/Model8/licht2.md2″ image=”myMD2Models/packs/modelpack1/Model8/licht2.png” type=”MD2″ descript=”a 3D model” zip=”myMD2Models/packs/modelpack1/Model8.zip” />

<marker name=”Trap1″ scale=”.7″ address=”myMD2Models/packs/modelpack1/Model9/lift.md2″ image=”myMD2Models/packs/modelpack1/Model9/auvBG.png” type=”MD2″ descript=”a 3D model” zip=”myMD2Models/packs/modelpack1/Model9.zip” />
<marker name=”Trap2″ scale=”3″ address=”myMD2Models/packs/modelpack1/Model9/lift1.md2″ image=”myMD2Models/packs/modelpack1/Model9/auvBG.png” type=”MD2″ descript=”a 3D model” zip=”myMD2Models/packs/modelpack1/Model9.zip” />
<marker name=”Trap3″ scale=”3″ address=”myMD2Models/packs/modelpack1/Model9/tl.md2″ image=”myMD2Models/packs/modelpack1/Model9/auvBG.png” type=”MD2″ descript=”a 3D model” zip=”myMD2Models/packs/modelpack1/Model9.zip” />
<marker name=”Camo Ladder” scale=”3″ address=”myMD2Models/packs/modelpack1/Model9/trap.md2″ image=”myMD2Models/packs/modelpack1/Model9/auvBG.png” type=”MD2″ descript=”a 3D model” zip=”myMD2Models/packs/modelpack1/Model9.zip” />

<marker name=”Lantaarn” scale=”2″ address=”myMD2Models/packs/modelpack1/Model10/lantaarn.md2″ image=”myMD2Models/packs/modelpack1/Model10/lantaarn.png” type=”MD2″ descript=”a 3D model” zip=”myMD2Models/packs/modelpack1/Model10.zip” />
<marker name=”Reling” scale=”3″ address=”myMD2Models/packs/modelpack1/Model10/reling.md2″ image=”myMD2Models/packs/modelpack1/Model10/hek.png” type=”MD2″ descript=”a 3D model” zip=”myMD2Models/packs/modelpack1/Model10.zip” />
<marker name=”Hand Rail” scale=”4″ address=”myMD2Models/packs/modelpack1/Model11/hek.md2″ image=”myMD2Models/packs/modelpack1/Model11/hek.png” type=”MD2″ descript=”a 3D model” zip=”myMD2Models/packs/modelpack1/Model11.zip” />

<marker name=”Pipe 1″ scale=”.6″ address=”myMD2Models/packs/modelpack2/model1/pipe1.md2″ image=”myMD2Models/packs/modelpack2/model1/auvBG.png” type=”MD2″ descript=”a 3D model” zip=”myMD2Models/packs/modelpack2/model1.zip” />
<marker name=”Pipe 2″ scale=”2″ address=”myMD2Models/packs/modelpack2/model1/pipe2.md2″ image=”myMD2Models/packs/modelpack2/model1/auvBG.png” type=”MD2″ descript=”a 3D model” zip=”myMD2Models/packs/modelpack2/mdel1.zip” />
<marker name=”Afsluit” scale=”2″ address=”myMD2Models/packs/modelpack2/model1/afsluit.md2″ image=”myMD2Models/packs/modelpack2/model1/auvBG.png” type=”MD2″ descript=”a 3D model” zip=”myMD2Models/packs/modelpack2/model1.zip” />
<marker name=”Tank 1″ scale=”2″ address=”myMD2Models/packs/modelpack2/model1/tank.md2″ image=”myMD2Models/packs/modelpack2/model1/auvBG.png” type=”MD2″ descript=”a 3D model” zip=”myMD2Models/packs/modelpack2/model1.zip” />
<marker name=”Tank 2″ scale=”4″ address=”myMD2Models/packs/modelpack2/model1/tank1.md2″ image=”myMD2Models/packs/modelpack2/model1/auvBG.png” type=”MD2″ descript=”a 3D model” zip=”myMD2Models/packs/modelpack2/model1.zip” />

<marker name=”Cabels” scale=”1.3″ address=”myMD2Models/packs/modelpack2/model2/kabels.md2″ image=”myMD2Models/packs/modelpack2/model2/auvBG.png” type=”MD2″ descript=”a 3D model” zip=”myMD2Models/packs/modelpack2/model2.zip” />
<marker name=”Steun1″ scale=”2″ address=”myMD2Models/packs/modelpack2/model2/steun.md2″ image=”myMD2Models/packs/modelpack2/model2/auvBG.png” type=”MD2″ descript=”a 3D model” zip=”myMD2Models/packs/modelpack2/model2.zip” />
<marker name=”Steun2″ scale=”2″ address=”myMD2Models/packs/modelpack2/model2/steun1.md2″ image=”myMD2Models/packs/modelpack2/model2/auvBG.png” type=”MD2″ descript=”a 3D model” zip=”myMD2Models/packs/modelpack2/model2.zip” />
<marker name=”Ladder” scale=”3″ address=”myMD2Models/packs/modelpack2/model2/trap1.md2″ image=”myMD2Models/packs/modelpack2/model2/auvBG.png” type=”MD2″ descript=”a 3D model” zip=”myMD2Models/packs/modelpack2/model2.zip” />
<marker name=”Phaaks” scale=”1″ address=”myMD2Models/packs/modelpack2/model3/phaaks.md2″ image=”myMD2Models/packs/modelpack2/model3/phaaks.png” type=”MD2″ descript=”a 3D model” zip=”myMD2Models/packs/modelpack2/model3.zip” />
<marker name=”Roller1″ scale=”4″ address=”myMD2Models/packs/modelpack2/model4/longt.md2″ image=”myMD2Models/packs/modelpack2/model4/longt.png” type=”MD2″ descript=”a 3D model” zip=”myMD2Models/packs/modelpack2/model4.zip” />
<marker name=”Roller2″ scale=”4″ address=”myMD2Models/packs/modelpack2/model4/longt1.md2″ image=”myMD2Models/packs/modelpack2/model4/longt.png” type=”MD2″ descript=”a 3D model” zip=”myMD2Models/packs/modelpack2/model4.zip” />
<marker name=”Chest” scale=”1.3″ address=”myMD2Models/packs/modelpack2/model5/box1.md2″ image=”myMD2Models/packs/modelpack2/model5/box1.png” type=”MD2″ descript=”a 3D model” zip=”myMD2Models/packs/modelpack2/model5.zip” />
<marker name=”Wagon” scale=”4″ address=”myMD2Models/packs/modelpack2/model6/wagon.md2″ image=”myMD2Models/packs/modelpack2/model6/wagon.png” type=”MD2″ descript=”a 3D model” zip=”myMD2Models/packs/modelpack2/model6.zip” />
<marker name=”Pharoah” scale=”.26″ address=”myMD2Models/packs/modelpack2/model7/farao.md2″ image=”myMD2Models/packs/modelpack2/model7/farao.png” type=”MD2″ descript=”a 3D model” zip=”myMD2Models/packs/modelpack2/model7.zip” />
<marker name=”Sarco” scale=”.6″ address=”myMD2Models/packs/modelpack2/model9/sarco.md2″ image=”myMD2Models/packs/modelpack2/model9/sarco.png” type=”MD2″ descript=”a 3D model” zip=”myMD2Models/packs/modelpack2/model9.zip” />
<marker name=”Skeleton1″ scale=”4″ address=”myMD2Models/packs/modelpack2/model11/skelet.md2″ image=”myMD2Models/packs/modelpack2/model11/skeleton.png” type=”MD2″ descript=”a 3D model” zip=”myMD2Models/packs/modelpack2/model11.zip” />
<marker name=”Skeleton3″ scale=”4″ address=”myMD2Models/packs/modelpack2/model11/skelet3.md2″ image=”myMD2Models/packs/modelpack2/model11/skeleton.png” type=”MD2″ descript=”a 3D model” zip=”myMD2Models/packs/modelpack2/model11.zip” />

<marker name=”Airplane Body” scale=”1.8″ address=”myMD2Models/packs/modelpack3/airplane/body.md2″ image=”myMD2Models/packs/modelpack3/airplane/air.jpg” type=”MD2″ descript=”a 3D model” zip=”myMD2Models/packs/modelpack3/airplane.zip” />
<marker name=”Airplane Wing” scale=”1.8″ address=”myMD2Models/packs/modelpack3/airplane/wing.md2″ image=”myMD2Models/packs/modelpack3/airplane/air.jpg” type=”MD2″ descript=”a 3D model” zip=”myMD2Models/packs/modelpack3/airplane.zip” />

<marker name=”Car” scale=”.8″ address=”myMD2Models/packs/modelpack3/car/car.md2″ image=”myMD2Models/packs/modelpack3/car/car.png” type=”MD2″ descript=”a 3D model” zip=”myMD2Models/packs/modelpack3/car.zip” />
<marker name=”Helicopter” scale=”1.6″ address=”myMD2Models/packs/modelpack3/heli/helicopter.md2″ image=”myMD2Models/packs/modelpack3/heli/helicopter1.png” type=”MD2″ descript=”a 3D model” zip=”myMD2Models/packs/modelpack3/heli.zip” />
<marker name=”Van” scale=”.7″ address=”myMD2Models/packs/modelpack3/van/van.md2″ image=”myMD2Models/packs/modelpack3/van/van.png” type=”MD2″ descript=”a 3D model” zip=”myMD2Models/packs/modelpack3/van.zip” />

<marker name=”Dumpster” scale=”1.7″ address=”myMD2Models/packs/modelpack4/dumpster/dumbster.md2″ image=”myMD2Models/packs/modelpack4/dumpster/dumpster.png” type=”MD2″ descript=”a 3D model” zip=”myMD2Models/packs/modelpack4/dumpster.zip” />

<marker name=”FenceA” scale=”1.7″ address=”myMD2Models/packs/modelpack4/fence/fence_a.md2″ image=”myMD2Models/packs/modelpack4/fence/fence.png” type=”MD2″ descript=”a 3D model” zip=”myMD2Models/packs/modelpack4/fence.zip” />
<marker name=”FenceB” scale=”1.7″ address=”myMD2Models/packs/modelpack4/fence/fence_b.md2″ image=”myMD2Models/packs/modelpack4/fence/fence.png” type=”MD2″ descript=”a 3D model” zip=”myMD2Models/packs/modelpack4/fence.zip” />
<marker name=”FenceC” scale=”1.7″ address=”myMD2Models/packs/modelpack4/fence/fence_c.md2″ image=”myMD2Models/packs/modelpack4/fence/fence.png” type=”MD2″ descript=”a 3D model” zip=”myMD2Models/packs/modelpack4/fence.zip” />
<marker name=”FenceD” scale=”1.7″ address=”myMD2Models/packs/modelpack4/fence/fence_d.md2″ image=”myMD2Models/packs/modelpack4/fence/fence.png” type=”MD2″ descript=”a 3D model” zip=”myMD2Models/packs/modelpack4/fence.zip” />
<marker name=”FenceE” scale=”1.7″ address=”myMD2Models/packs/modelpack4/fence/fence_e.md2″ image=”myMD2Models/packs/modelpack4/fence/fence.png” type=”MD2″ descript=”a 3D model” zip=”myMD2Models/packs/modelpack4/fence.zip” />

<marker name=”Fighter” scale=”1.7″ address=”myMD2Models/packs/modelpack4/Fighter/fighter.md2″ image=”myMD2Models/packs/modelpack4/Fighter/fighter.png” type=”MD2″ descript=”a 3D model” zip=”myMD2Models/packs/modelpack4/Fighter.zip” />
<marker name=”Generator” scale=”3″ address=”myMD2Models/packs/modelpack4/generator/generator.md2″ image=”myMD2Models/packs/modelpack4/generator/generator.png” type=”MD2″ descript=”a 3D model” zip=”myMD2Models/packs/modelpack4/generator.zip” />

<marker name=”Canoe” scale=”2″ address=”myMD2Models/packs/modelpack5/canoe/canoe.md2″ image=”myMD2Models/packs/modelpack5/canoe/canoe.png” type=”MD2″ descript=”a 3D model” zip=”myMD2Models/packs/modelpack5/canoe.zip” />
<marker name=”Police Car” scale=”2″ address=”myMD2Models/packs/modelpack7/Policecar/policecar.md2″ image=”myMD2Models/packs/modelpack7/Policecar/policeCar.png” type=”MD2″ descript=”a 3D model” zip=”myMD2Models/packs/modelpack7/Policecar.zip” />

</markers>

About these ads

4 Responses to PV3D Quake 2 (MD2) Model Viewer and Download

  1. [...] after the last post on MD2, if I don’t show you how to create your own MD2 models I haven’t done my job…so [...]

  2. [...] . You can view the apps below and download the source code as well. They work very similar to the MD2 viewer posted earlier, so I won’t cover how they were made [...]

  3. Jack Wu says:

    1. how to export sketchup model into papervision 3d?
    2. If I have a vrml (.wrl) model, can I export into papervision 3d?
    3. I am wondering if I can put my VRML model into Flash 3D (Papervision 3D) or Flash AR (FLARToolkit)?

    • Mike Lively says:

      Take a look at Photoshop3D you can bring in SketchUp models and export them to other models programs for export to PV3D…presently the Sketchup importer to PV3D is broken…

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Follow

Get every new post delivered to your Inbox.

%d bloggers like this: