Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    30

    chiarimenti sulla guida presente su html di sandy 3d

    Scrivo questo post per aiutare magari qualche povero cristo che come me si ritrova a leggere le guida presente sul sito, e si ritrova con certi problemi, magari un po troppo difficili da risolvere per uno che sta iniziando ora con sandy 3d.

    Problema riscontrato nella lezione (esempio pratico) pagina 15,16

    L'obiettivo del esempio è far ruotare un cubo...
    il codice completo totale da scrivere è il seguente:
    codice:
    import sandy.core.light.*;
    import sandy.core.data.*;
    import sandy.core.group.*;
    import sandy.primitive.*;
    import sandy.view.*;
    import sandy.core.*;
    import sandy.skin.*;
    import sandy.util.*;
    import sandy.core.transform.*;
    import sandy.events.*;
    
    
    var world:World3D = World3D.getInstance(); // Azione principale del mondo 3D //manca nella guida, senza la variabile non si può creare il mondo... :XD
    var rotation:Transform3D = new Transform3D(); // questa riga la trovate nella posizione sbagliata, infatti se provate con la variabile rotation posizionata in createscene, potete impegnarvi quanto volete a scrivere valori e premere sul pulsantino rotate ma non avrete alcun cambiamento.
    
    var l:Light3D = new Light3D (new Vector (100, 0, 0), 500); //manca nella guida  PER APPLCIARE LE LUCI 
    World3D.getInstance ().setLight (l);			   //manca nella guida PER APPLCIARE LE LUCI
    
    function createScene( bg:Group ):Void {
        var cube:Object3D = new Box( 50, 50, 50, 'quad' );
        var skin:Skin = new MixedSkin( 0xF28F35, 80, 0, 100, 1 );
    	skin.setLightingEnable( true ); // Abilitiamo l'illuminazione per la skin
        cube.setSkin( skin );
    	var tg:TransformGroup = new TransformGroup();
        rotation.rot(20,30,0);
        tg.setTransform( rotation );
        tg.addChild( cube );
        bg.addChild( tg );
    } 
    
    function init( Void ):Void {
        screen = new ClipScreen( this.createEmptyMovieClip('screen', 1), 200, 200 );
        var cam:Camera3D = new Camera3D( 600, 600 );
        cam.setPosition(0,0,-500);
        world.addCamera( cam );
        var bg:Group = new Group();
        world.setRootGroup( bg );
        createScene( bg );
        
        // Creiamo gli assi di riferimento
        createCoordinateSystem( bg, false, 1 );
        // Associamo la funzione rotate alla pressione del pulsante rotateButton
        rotateButton.onRelease = rotate;
        // Renderizziamo la scena
        world.render();
    }
    function rotate(){
     	rotation.rot( Number(xStep.text),Number(yStep.text),Number(zStep.text) );
    } 
    init();
    Un ultima cosa molto importante!!! Le caselle di testo che avranno come istanza: xStep;yStep;zStep createle come testo di input, e non come testo dinamico, come dice la guida...

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    30

    Informazioni sulla sezione Trasformazioni singole pag 17

    Informazioni sulla sezione Trasformazioni singole pag 17
    la guida dice che aggiungendo questo codice si dovrebbe Associa la rotazione al valore degli slider...
    codice:
    function setUpControls(){
        var xCh:Object = new Object();
        xCh.onChange = function(evt:Object){
            xRot.text = evt.value;
            rotation.rotX(evt.value);
        }
        xSlider.addListener(xCh);
        var yCh:Object = new Object();
        yCh.onChange = function(evt:Object){
            yRot.text = evt.value;
            rotation.rotY(evt.value);
        }
        ySlider.addListener(yCh);
        var zCh:Object = new Object();
        zCh.onChange = function(evt:Object){
            zRot.text = evt.value;
            rotation.rotZ(evt.value);
        }
        zSlider.addListener(zCh);
    }
    peccato che non spiega assolutamente che oltre a questa funzione sia necessario creare i 3 oggetti zCh yCh xCh, con relative dimensioni, immagino, con relative posizioni, con la possibilità di essere prese e poi spostate, solo nel asse x... ecc ecc...
    Io al momento non mi sento in grado di completare questo codice, ma vi propongo una soluzione alternativa, il risultato sarà uguale.
    Soluzione:
    Create 3 oggetti movie clip;
    ad ogni oggetto dategli questo codice:
    oggetto per la variazione del asse x
    codice:
    on (press) {
    	startDrag(this, false, 48, 538, 360, 538);
    }
    
    on (dragOver) {
    		_root.rotation.rotX(_root.xCh._x)
    }
    on (release, releaseOutside) {
    stopDrag()
    }
    oggetto per la variazione del asse y
    codice:
    on (press) {
    	startDrag(this, false, 48, 555, 360, 555);
    }
    on (dragOver) {
    	_root.rotation.rotY(_root.yCh._x)
    }
    on (release, releaseOutside) {
    	stopDrag()
    }
    oggetto per la variazione del asse z
    codice:
    on (press) {
    	startDrag(this, false, 48, 572, 360, 572);
    }
    
    on (dragOver) {
    	_root.rotation.rotZ(_root.zCh._x)
    }
    on (release, releaseOutside) {
    	stopDrag()
    }
    In realtà la cosa da capire quel'è?
    la cosa da capire è semplicemente il comando rot, che può essere rotX,rotY e rotZ;
    questo comando serve per far ruotare solo in un asse il nostro oggetto.
    Spero di averVi aiutato, in attesa che qualche esperto ci illumini su come potrebbe essere il codice completo da scrivere in Sany

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    30

    Chiarimenti sulla guida pagina 43, ruotare gli oggetti con il mouse

    Io non sto seguendo la guida passo per passo, ma mi studio solo quello che mi puo essere utile man mano che proseguo con il mio progetto.
    Per questo motivo sono passato dalla pagina 17 alla pagina 43.
    Ruotare gli oggetti con il mouse.
    L'unico difetto che ho trovato in questa pagina è in questa sezione:
    codice:
    function rotate() {
        if ( mousedown ) {
            x += ( _ymouse - mouseY )/10;
            y += ( mouseX -_xmouse )/10;
            rotation.rot( x, y, z );
            tg1.setTransform(rotation);
        }
    }
    Non so a voi, ma a me con il mio flash CS3... non funziona in questa maniera, infatti se aggiungo alla funzione rotate un trace di x e un trace di y ottengo che x e y non hanno mai valori; la soluzione è semplice... togliere il segno +; quindi il codice corretto è il seguente:
    codice:
    function rotate() {
        if ( mousedown ) {
            x = ( _ymouse - mouseY )/10;
            y = ( mouseX -_xmouse )/10;
            rotation.rot( x, y, z );
            tg1.setTransform(rotation);
        }
    }
    Allego anche tutto il codice da scrivere per fare la rotazione di un singolo cubo.
    codice:
    import sandy.core.light.*;
    import sandy.core.data.*;
    import sandy.core.group.*;
    import sandy.primitive.*;
    import sandy.view.*;
    import sandy.core.*;
    import sandy.skin.*;
    import sandy.util.*;
    import sandy.core.transform.*;
    import sandy.events.*;
    
    
    var world:World3D = World3D.getInstance(); // Azione principale del mondo 3D
    var rotation:Transform3D = new Transform3D();
    var l:Light3D = new Light3D (new Vector (100, 0, 0), 500); //PER APPLCIARE LE LUCI 
    World3D.getInstance ().setLight (l);					   //PER APPLCIARE LE LUCI
    
    var mouse:Object = new Object();
    
    Mouse.addListener(this);
    onMouseDown = function() {
        mousedown = true;
        mouseX = _xmouse;
        mouseY = _ymouse;
    };
    onMouseUp = function() {
        mousedown = false;
        mouseX = _xmouse;
        mouseY = _ymouse;
    }; 
    
    function createScene( bg:Group ):Void {
        var cube:Object3D = new Box( 50, 50, 50, 'quad' );
        var skin:Skin = new MixedSkin( 0xF28F35, 80, 0, 10, 1 );
    	skin.setLightingEnable( true ); // Abilitiamo l'illuminazione per la skin
        cube.setSkin( skin );
    	var tg:TransformGroup = new TransformGroup();
        rotation.rot(20,30,0);
        tg.setTransform( rotation );
        tg.addChild( cube );
        bg.addChild( tg );
    } 
    
    function rotate() {
        if ( mousedown ) {
            x =- ( _ymouse - mouseY )/10;
            y = ( mouseX -_xmouse )/10;
    		trace (x);
    		trace(y);
            rotation.rot( x, y, 0 );
            tg.setTransform(rotation);
        }
    }
    
    function init( Void ):Void {
        screen = new ClipScreen( this.createEmptyMovieClip('screen', 1), 200, 200 );
        var cam:Camera3D = new Camera3D( 600, 600 );
        cam.setPosition(0,0,-500);
        world.addCamera( cam );
        var bg:Group = new Group();
        world.setRootGroup( bg );
        createScene( bg );
    	world.addEventListener(World3D.onRenderEVENT,this,rotate); 
        world.render();
    }
    init();
    Questo funziona
    Spero sempre di esservi stato utile.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.