Flare3d: Isometrická kamera

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)

Isometric

 

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) {
    }

}
}
  • Facebook
  • Twitter
  • Dribbble
Michal Hotovec
"Přibližně 10 let se pohybuji v oblasti grafiky, webu a videa. Vizuální tvorba je mojí prací a zároveň koníčkem. Baví mne pracovat s lidmi kteří něco umí. S lidmi, kteří umí používat mozek, protože jinak je to strašlivá nuda."