|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Как сделать Декали (следы шин, пуль) в away3d
Тут есть пример с кровью http://redefy.net/2011/10/28/%d1%83%...api-chapter-3/
Надо подобное для away, что-то не нашел (наверняка есть), набросал простой танк который едет на плоскости package { 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 flash.display.*;import flash.events.*;import flash.geom.*;import flash.ui.*; /** * попытка следов шин. */ public class CarAway3d extends Sprite { private var container:ObjectContainer3D; private var box:Mesh; private var plane:Mesh; private var view:View3D; private var move:Boolean, revers:Boolean, right:Boolean, left:Boolean; private var carPos:Point = new Point(), carRotation:Number = 0; //private var controller:SimpleObjectController; public function CarAway3d() { stage.align = StageAlign.TOP_LEFT; stage.scaleMode = StageScaleMode.NO_SCALE; init(); } private function init():void { view = new View3D(); view.camera.lens.far = 10000; view.camera.moveTo( -170, 1361, -1221); view.camera.rotateTo(45, 2, 0); addChild(view); container = new ObjectContainer3D(); view.scene.addChild(container); var sunLight:DirectionalLight = new DirectionalLight( -1, -0.4, 1); with (sunLight) { color = 0xFFFF80; castsShadows = true; ambient = 1; diffuse = 1; specular = 1; } container.addChild(sunLight); var lightPicker:StaticLightPicker = new StaticLightPicker([sunLight]); var filteredShadowMapMethod:SoftShadowMapMethod = new SoftShadowMapMethod(sunLight); filteredShadowMapMethod.epsilon = 0.005; var material:TextureMaterial = new TextureMaterial(new BitmapTexture(new BitmapData(2, 2, false, 0xFF0000)), true, true); material.lightPicker = lightPicker; material.shadowMethod = filteredShadowMapMethod; material.ambient = 0.5; container.addChild(box = new Mesh(new CubeGeometry(100, 50, 200, 1, 1, 1), material)); material = new TextureMaterial(new BitmapTexture(new BitmapData(2, 2, false, 0x00FF00)), true, true); material.lightPicker = lightPicker; material.shadowMethod = filteredShadowMapMethod; material.ambient = 0.5; container.addChild(plane = new Mesh(new PlaneGeometry(3000, 3000), material)).y = -20; stage.addEventListener(KeyboardEvent.KEY_DOWN, keyHandler); stage.addEventListener(KeyboardEvent.KEY_UP, keyHandler); stage.addEventListener(Event.ENTER_FRAME, onEnterFrame); } private function onEnterFrame(e:Event):void { var m:Matrix = new Matrix(); if (move) m.translate(0,10); if (revers) m.translate( 0,-10); if (right) m.rotate(carRotation-=0.1); if (left) m.rotate( carRotation+=0.1); if (!left && !right) m.rotate(carRotation); carPos = carPos.add(m.transformPoint(new Point())); box.rotationY = -carRotation * (180 / Math.PI);; //в градусах box.x = carPos.x; box.z = carPos.y; view.render(); } private function keyHandler(e:KeyboardEvent):void { var k:int = e.keyCode; //w - 87 a - 65 d - 68 s - 83 if (e.type == KeyboardEvent.KEY_DOWN) var t:Boolean = true; if (k == Keyboard.UP || k == 87) move = t; if (k == Keyboard.DOWN || k == 83) revers = t; if (k == Keyboard.RIGHT || k == 68) right = t; if (k == Keyboard.LEFT || k == 65) left = t; } } } Ну или хоть что-то отрисовать, можно конечно плоскости добавлять вместо следов, но это не то что надо, будет некрасиво.
__________________
Гоночка |
|
|||||
UVS мап не подходит. Битмап 2x2 пикселя и она как ресурс должна как-то в плеере регистрироваться. Тут надо специальную AGAL программу, что-бы она рисовала этот след, наподобие того как рисуется тень в том же Away 4.0 или например ещё есть Wire материал то-же рисуется через AGAL без текстуры. В общем это очень сложно, я в support авеям написал, но они не знают как это сделать и молчат.
__________________
Гоночка |
|
|||||
потестил projector - вообще не то, смотрится ужасно, на те места куда попадает текстура от проектора не ложится тень, для следов шин и пуль не подходит так как надо перерисовывать ему битмап, предварительно его надо передавать в контекст3Д от этого жуткие тормоза.
админ мне ответил там если у вас снег или песок надо делать то-то, если асфальт то вот (проще всего) If your terrain is sand or snow, yes drawing directly into the normalmap is the nicest thing to do. It will cost bitmapdata edits and uploads. If its mud, normalmap and diffusemap updates required. If you need only “black” rubber and terrain is asphalt. you need only to use the diffusemap. I would here combine geometry and draw. Like say every x burnouts, draw the maps and clear geometry. This is of importance if you want it to run on phones. Drawback here is the repeats. You will need to have more maps to cover your terrain. Which brings us to the last option, using LightMapMethod, where you could draw directly into your “B&W tires” map 1/1 yet no issue on floor/terrain tiling. Я пока что-то не вкуриваю, но это самый простой путь.
__________________
Гоночка |
Часовой пояс GMT +4, время: 01:22. |
|
« Предыдущая тема | Следующая тема » |
|
|