Pátral jsem jak nastavit Isometrickou kameru v enginu flare3D. Nepřišel jsem na to zda má Flare3d ortografické zobrazení takže pravé iso to není. Iso lze nasimulovat pomocí zoomu. Při dlouhém ohnisku dochází k potlačení perspektivy a jde získat výstup podobný ortho kameře. Přikládám ukázku.
Důležité je nastavení kamery, provádět rotace přes rotateAxis a posuv přes Translate.
scene.camera.setPosition(0, 0 , -100); // long distance from origin
scene.camera.lookAt(0, 0, 0); // look at zero
// superzoom to fake orthographics
scene.camera.zoom = 0.1;
// rotate camera
scene.camera.rotateAxis(30,new Vector3D(1,0,0),new Vector3D(0,0,0));
scene.camera.rotateAxis(45,new Vector3D(0,1,0),new Vector3D(0,0,0));
// translate up
scene.camera.translateAxis(5, new Vector3D(.8,0,.8));
Vygeneruje mřížku z kvádrů a nastaví kameru. (Vyžaduje Flare3d a jpg texturu pro tile)

package {
import flare.basic.Scene3D;
import flare.core.Texture3D;
import flare.materials.TextureMaterial;
import flare.primitives.Cube;
import flash.display.Sprite;
import flash.events.Event;
import flash.geom.Vector3D;
public class TestMolehill extends Sprite {
var scene:Scene3D;
var texture:Texture3D;
public var gridXWidth:int = 10;
public var gridZWidth:int = 10;
public var gridStep:int = 1;
public function TestMolehill() {
// scene setup
scene = new Scene3D(this);
scene.camera.setPosition(0, 0 , -100); // long distance from origin
scene.camera.lookAt(0, 0, 0); // look at zero
// superzoom to fake orthographics scene.camera.zoom = 0.1;
// rotate camera
scene.camera.rotateAxis(30,new Vector3D(1,0,0),new Vector3D(0,0,0));
scene.camera.rotateAxis(45,new Vector3D(0,1,0),new Vector3D(0,0,0));
scene.camera.translateAxis(5, new Vector3D(.8,0,.8));
// load tile texture
texture = scene.addTextureFromFile("tile.jpg");
// allloaded event
scene.addEventListener(Scene3D.COMPLETE_EVENT, allLoaded);
}
function allLoaded(e:Event) {
var textureMat:TextureMaterial = new TextureMaterial("texture", texture);
textureMat.smooth = true;
for(var zn:int = 0; zn < gridZWidth; zn++) {
for(var xn:int = 0; xn < gridXWidth; xn++) {
var tCube:Cube = new Cube("podlaha", 1, .2, 1, 1, textureMat);
tCube.x = xn * gridStep;
tCube.z = zn * gridStep;
//tCube.rotateY(45);
scene.addChild(tCube);
}
}
scene.addEventListener(Scene3D.RENDER_EVENT, changeScene);
}
function changeScene(e:Event) {
}
}
}