Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   API приложений и сред (http://www.flasher.ru/forum/forumdisplay.php?f=61)
-   -   Всегда лицом к пользователю (http://www.flasher.ru/forum/showthread.php?t=196707)

vorodis2 28.03.2013 21:47

Всегда лицом к пользователю
 
Хочу что бы ObjectContainer3D всегда был повернут лицом к пользователю, типа Sprite3D.

Alex Lexcuk 29.03.2013 14:24

Код AS3:

ObjectContainer3D.lookAt(view.camera.position);


vorodis2 29.03.2013 21:42

Чо то не сработало, может я где то туплю))
Пишу свои компоненты для away
http://vorodis2.com/datanew/script/bin/
Исходник
http://vorodis2.com/datanew/arhiv/komponent.rar
Может глянете? Класс VorWindow.as функция dwig (работает если дать aaCamera, в том методе особо и не нужна, но как я понимаю это можно сделать только с Camera всего мира, по этому там ее и подключил)

Alex Lexcuk 30.03.2013 13:43

В исходнике не разобрался, возможно ещё надо
Код AS3:

                                dir = Matrix3DUtils.getRight(view.camera.transform);
                                container.lookAt(view.camera.position, dir);

пример набросал с 9 кубиками (четко лицом к пользователю)
Код AS3:

package  
{
        import away3d.animators.*;import away3d.core.partition.*;
        import away3d.events.*;import away3d.cameras.lenses.*;
        import away3d.core.base.*;import away3d.core.math.*;
        import away3d.library.assets.*;import away3d.debug.*;
        import away3d.cameras.*;import away3d.containers.*;import away3d.entities.*;
        import away3d.lights.*; import away3d.materials.*;
        import away3d.materials.lightpickers.*;
        import away3d.materials.methods.*; import away3d.primitives.*;
        import away3d.textures.*;import away3d.filters.*;
        import away3d.materials.utils.*;import away3d.primitives.data.*;
 
        import flash.display.*; import flash.events.*; import flash.system.*;
        import flash.ui.*; import flash.utils.*; import flash.sampler.*;
        import flash.net.*; import flash.media.*; import flash.net.*;
        import flash.external.*; import flash.text.*;
        import flash.geom.*;
        /**
        * ...
        * @author Lexcuk
        */

        public class TestLookAtDoc extends Sprite
        {
                private var container:ObjectContainer3D;
                public var sprite:Sprite;
                public var view:View3D;
 
                private var containerArr:Array;
 
                private var blaMaterial:TextureMaterial;
                private var hrefTxt:TextField;
                private var nArr:Array;
                public function TestLookAtDoc()
                {
                view = new View3D();
                view.camera.lens.far = 5000;
                view.camera.lens.near = 1;
 
                //view.camera.moveTo( 0, 1000, 0);
                view.camera.moveTo( 1000, 500, 300);
                //view.camera.moveTo( 300, 500, 1000);
 
                view.camera.lookAt(new Vector3D(0, 0, 0))
 
                sprite = new Sprite();
                sprite.addChild(view);
                sprite.addChild(new AwayStats(view));
 
                addChild(sprite);
 
                var perlinBitmap:BitmapData = getPerlinBmd();
                container = new ObjectContainer3D();
 
                view.scene.addChild(container);
                var sunLight:DirectionalLight = new DirectionalLight( -1, -0.4, 1);
                //with (sunLight) { color = 0xFFFF80; castsShadows = true; ambient = diffuse = specular = 1; }
                container.addChild(sunLight);
 
                var bgMesh:Mesh = new Mesh(new PlaneGeometry(1000, 1000));;
 
                var bgMaterial:TextureMaterial = new TextureMaterial(new BitmapTexture(perlinBitmap), false, true);
                bgMesh.material = bgMaterial;
 
                container.addChild(bgMesh);
 
                blaMaterial = mekeBlaMaterial();
 
                containerArr = [];
                var con:ObjectContainer3D;
                nArr = ['A', 'B', 'C', 'D', 'E', 'G', 'H', 'K','L','M','N','O','P'];
                for (var i:int; i < 9; i++) {
                        container.addChild(con = makeContainer(
                        300-int(i / 3) * 300,
                        300-int(i % 3) * 300,
                        nArr[i]
                        ));
                        containerArr.push(con);
                        con.lookAt(view.camera.position, Vector3D.Z_AXIS);
                }
 
 
                sprite.addChild(hrefTxt = new TextField());
                hrefTxt.border = true;
                hrefTxt.background = true;
                hrefTxt.backgroundColor = 0xFFFFFF;
                hrefTxt.autoSize = TextFieldAutoSize.LEFT;
                hrefTxt.x = 200;
 
                var htmStr:String = '';
                htmStr = addStrHref('camA') + addStrHref('camB') + addStrHref('camC');
                for (i = 0; i < 9; i++) htmStr += addStrHref(nArr[i]);
                htmStr +=  addStrHref('поставить всё')
                hrefTxt.htmlText = htmStr;
                hrefTxt.addEventListener("link", txtNavHandler);
 
                addEventListener(Event.ENTER_FRAME, enterFrameHandler);
        }
 
        private function txtNavHandler(e:TextEvent):void {
                if (e.text == 'camA') view.camera.moveTo( 0, 1000, 0);
                if (e.text == 'camB') view.camera.moveTo( 1000, 500, 300);
                if (e.text == 'camC') view.camera.moveTo( 300, 500, 1000);
                view.camera.lookAt(new Vector3D(0, 0, 0));
                for (var i:int; i < 9; i++) {
                        var dir:Vector3D = Matrix3DUtils.getRight(view.camera.transform);
                        if (e.text == nArr[i]) {
                                containerArr[i].lookAt(view.camera.position, dir);
                        }
                }
                if (e.text == 'поставить всё') {
                        for (i=0; i < 9; i++) {
                                dir = Matrix3DUtils.getRight(view.camera.transform);
                                containerArr[i].lookAt(view.camera.position, dir);
                        }
                }
        }
 
        private function addStrHref(str:String, delimStr:String = ' | '):String {
                return "<a href='event:" + str + "'>" + str + "<u></u>"+delimStr;
        }
 
        private function enterFrameHandler(e:Event):void {
                view.render();
        }
 
        public function makeContainer(posX:Number,  posY:Number, str:String = 'A'):ObjectContainer3D {
                var con:ObjectContainer3D = new ObjectContainer3D();
 
                var c3:ObjectContainer3D = new ObjectContainer3D();
                var cM:Mesh = new Mesh(new CubeGeometry(100, 100, 100), blaMaterial);
                var pM:Mesh = new Mesh(new PlaneGeometry(100, 100, 1, 1), makeAMaterial(str));
                c3.addChild(cM);
                c3.addChild(pM);
                pM.position = new Vector3D(0, 51, 0);
                c3.rotationX = 90;
                c3.rotationZ = 90;
 
                con.addChild(c3);
                con.position = new Vector3D(posX, 50, posY);
                return con;
        }
 
        public  function mekeBlaMaterial():TextureMaterial {
                var txt:TextField = new TextField();
                for (var i:int; i < 100; i++) txt.appendText('bla bla blabla bla blabla bla bla\n');
                txt.autoSize = TextFieldAutoSize.LEFT;
                var tbmd:BitmapData = new BitmapData(128, 128);
                var m:Matrix = new Matrix();
                tbmd.draw(txt,m);
                return new TextureMaterial(new BitmapTexture(tbmd), false, true);
        }
 
        public function makeAMaterial(str:String = 'A'):TextureMaterial {
                var txt:TextField = new TextField();
                txt.text = str;
                var tbmd:BitmapData = new BitmapData(128, 128);
                var m:Matrix = new Matrix();
                m.ty = -4;
                m.tx = -1;
                m.scale(13, 13);
                tbmd.draw(txt,m);
                return new TextureMaterial(new BitmapTexture(tbmd), false, true);
        }
 
        public function getPerlinBmd():BitmapData {
                var s:Number = 512;
                var bitmapData:BitmapData = new BitmapData(s, s, true);
                var numOctaves:Number = 1;
                bitmapData.perlinNoise(25, 52, 1, 1314, false, false, 10, false)
                var sp:Sprite = new Sprite();
                sp.graphics.beginFill(0xFFFFFF);
                sp.graphics.drawRect(0, 0, s, s);
                sp.addChild(new Bitmap(bitmapData));
                var resBitmap:BitmapData = new BitmapData(s, s, true);
                resBitmap.draw(sp);
                return resBitmap;
        }
 
  }
 
}



Часовой пояс GMT +4, время: 03:21.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.