![]() |
|
||||||||||
|
|||||
|
Регистрация: Feb 2011
Адрес: Украина Днепропетровск
Сообщений: 106
|
Хочу что бы ObjectContainer3D всегда был повернут лицом к пользователю, типа Sprite3D.
|
|
|||||
|
Регистрация: Feb 2011
Адрес: Украина Днепропетровск
Сообщений: 106
|
Чо то не сработало, может я где то туплю))
Пишу свои компоненты для away http://vorodis2.com/datanew/script/bin/ Исходник http://vorodis2.com/datanew/arhiv/komponent.rar Может глянете? Класс VorWindow.as функция dwig (работает если дать aaCamera, в том методе особо и не нужна, но как я понимаю это можно сделать только с Camera всего мира, по этому там ее и подключил) |
|
|||||
|
В исходнике не разобрался, возможно ещё надо
dir = Matrix3DUtils.getRight(view.camera.transform); container.lookAt(view.camera.position, dir); 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, время: 20:45. |
|
|
« Предыдущая тема | Следующая тема » |
|
|