Форум 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=190532)

vorodis2 25.12.2012 18:43

Тень. Как убрать текстуру но оставить тень
 
Собственно есть демо от альтернативы
Ссылка на демку
Нужно получить тень без текстуры. То есть на плане где лежит трава, нужна прозрачна текстура, а на ней тени. Собственно нужны тени без самой текстуры травы??????



Код всей этой красоты, хотя он прилагается с библиотекой
Код AS3:

package shadowsexample {
 
        import alternativa.engine3d.controllers.SimpleObjectController;
        import alternativa.engine3d.core.Camera3D;
        import alternativa.engine3d.core.Object3D;
        import alternativa.engine3d.core.View;
        import alternativa.engine3d.lights.AmbientLight;
        import alternativa.engine3d.lights.DirectionalLight;
        import alternativa.engine3d.materials.StandardMaterial;
        import alternativa.engine3d.primitives.Box;
        import alternativa.engine3d.primitives.Plane;
        import alternativa.engine3d.resources.BitmapTextureResource;
        import alternativa.engine3d.shadows.DirectionalLightShadow;
 
        import flash.display.BitmapData;
        import flash.display.Sprite;
        import flash.display.Stage3D;
        import flash.display.StageAlign;
        import flash.display.StageScaleMode;
        import flash.events.Event;
        import flash.events.KeyboardEvent;
        import flash.geom.Matrix3D;
        import flash.ui.Keyboard;
 
        /**
        * Shadows usage example.
        * Пример использования теней.
        */

        [SWF(backgroundColor="#000000", frameRate="60", width="600", height="600")]
        public class ShadowsExample extends Sprite {
 
                [Embed(source="bark_diffuse.jpg")]
                private static const EmbedBarkDiffuse:Class;
                [Embed(source="bark_normal.jpg")]
                private static const EmbedBarkNormal:Class;
                [Embed(source="branch_diffuse.jpg")]
                private static const EmbedBranchDiffuse:Class;
                [Embed(source="branch_normal.jpg")]
                private static const EmbedBranchNormal:Class;
                [Embed(source="branch_opacity.jpg")]
                private static const EmbedBranchOpacity:Class;
                [Embed(source="grass.jpg")]
                private static const EmbedGrassDiffuse:Class;
 
                private var rootContainer:Object3D = new Object3D();
 
                private var camera:Camera3D;
                private var controller:SimpleObjectController;
 
                private var stage3D:Stage3D;
 
                private var tree:Object3D;
                private var counter:Number = 1;
                private var shadow:DirectionalLightShadow;
                private var ambientLight:AmbientLight;
                private var directionalLight:DirectionalLight;
 
                public function ShadowsExample() {
                        stage.align = StageAlign.TOP_LEFT;
                        stage.scaleMode = StageScaleMode.NO_SCALE;
 
                        stage3D = stage.stage3Ds[0];
                        stage3D.addEventListener(Event.CONTEXT3D_CREATE, init);
                        stage3D.requestContext3D();
                }
 
                private function init(e:Event):void {
                        // Creates help message
                        createLabel();
                        // Camera and view
                        // Создание камеры и вьюпорта
                        camera = new Camera3D(10, 100000);
 
                        camera.view = new View(stage.stageWidth, stage.stageHeight, false, 0xa4c4d7, 1, 8);
                        addChild(camera.view);
                        addChild(camera.diagram);
 
                        // Initial position
                        // Установка начального положения камеры
                        var matrix:Matrix3D = new Matrix3D(Vector.<Number>([-0.6691306829452515, -0.7431448101997375, 0, 0, -0.10342574119567871, 0.09312496334314346, -0.9902680516242981, 0, 0.735912561416626, -0.6626186966896057, -0.13917307555675507, 0, -333.00445556640625, 237.38864135742188, 290.38525390625, 1]));
                        camera.matrix = matrix;
                        controller = new SimpleObjectController(stage, camera, 200);
                        rootContainer.addChild(camera);
 
                        // Resources
                        // Ресурсы
                        var grass_diffuse:BitmapTextureResource = new BitmapTextureResource(new EmbedGrassDiffuse().bitmapData);
                        var grass_normal:BitmapTextureResource = new BitmapTextureResource(new BitmapData(1, 1, false, 0x7F7FFF));
                        var bark_diffuse:BitmapTextureResource = new BitmapTextureResource(new EmbedBarkDiffuse().bitmapData);
                        var bark_normal:BitmapTextureResource = new BitmapTextureResource(new EmbedBarkNormal().bitmapData);
                        var branch_diffuse:BitmapTextureResource = new BitmapTextureResource(new EmbedBranchDiffuse().bitmapData);
                        var branch_normal:BitmapTextureResource = new BitmapTextureResource(new EmbedBranchNormal().bitmapData);
                        var branch_opacity:BitmapTextureResource = new BitmapTextureResource(new EmbedBranchOpacity().bitmapData);
                        grass_diffuse.upload(stage3D.context3D);
                        grass_normal.upload(stage3D.context3D);
                        bark_diffuse.upload(stage3D.context3D);
                        bark_normal.upload(stage3D.context3D);
                        branch_diffuse.upload(stage3D.context3D);
                        branch_normal.upload(stage3D.context3D);
                        branch_opacity.upload(stage3D.context3D);
 
                        // Materials
                        // Материалы
                        var grassMaterial:StandardMaterial = new StandardMaterial(grass_diffuse, grass_normal);
                        grassMaterial.specularPower = 0.14;
                        var barkMaterial:StandardMaterial = new StandardMaterial(bark_diffuse, bark_normal);
                        var branchMaterial:StandardMaterial = new StandardMaterial(branch_diffuse, branch_normal, null, null, branch_opacity);
                        branchMaterial.specularPower = 0;
                        branchMaterial.alphaThreshold = 0.8;
 
                        // Models
                        // Модели
 
                        var grass:Plane = new Plane(900, 900);
                        grass.geometry.upload(stage3D.context3D);
                        grass.setMaterialToAllSurfaces(grassMaterial);
                        rootContainer.addChild(grass);
 
                        var platform:Box = new Box(300, 300, 50);
                        platform.geometry.upload(stage3D.context3D);
                        platform.setMaterialToAllSurfaces(barkMaterial);
                        platform.z = 25;
                        rootContainer.addChild(platform);
 
                        var balk1:Box = new Box(30, 30, 250);
                        balk1.geometry.upload(stage3D.context3D);
                        balk1.setMaterialToAllSurfaces(barkMaterial);
                        balk1.x = -180;
                        balk1.y = 180;
                        balk1.z = 125;
                        rootContainer.addChild(balk1);
                        var balk2:Box = balk1.clone() as Box;
                        balk2.x = 180;
                        rootContainer.addChild(balk2);
                        var balk3:Box = balk2.clone() as Box;
                        balk3.y = -180;
                        rootContainer.addChild(balk3);
                        var balk4:Box = balk3.clone() as Box;
                        balk4.x = -180;
                        rootContainer.addChild(balk4);
 
                        tree = new Object3D();
                        tree.z = 50;
                        var branch:Plane = new Plane(400, 400);
                        branch.geometry.upload(stage3D.context3D);
                        branch.setMaterialToAllSurfaces(branchMaterial);
                        branch.rotationX = Math.PI/2;
                        branch.rotationZ = Math.PI/4;
                        branch.z = 200;
                        tree.addChild(branch);
                        branch = branch.clone() as Plane;
                        branch.rotationZ += Math.PI/2;
                        tree.addChild(branch);
                        rootContainer.addChild(tree);
 
                        // Light sources
                        // Источники света
                        ambientLight = new AmbientLight(0x333390);
                        rootContainer.addChild(ambientLight);
                        directionalLight = new DirectionalLight(0xFFFF60);
                        directionalLight.lookAt(-0.5, -1, -1);
                        rootContainer.addChild(directionalLight);
 
                        // Shadow
                        // Тень
                        shadow = new DirectionalLightShadow(1000, 1000, -500, 500, 1024, 0.2);
                        shadow.biasMultiplier = .98;
                        shadow.addCaster(platform);
                        shadow.addCaster(balk1);
                        shadow.addCaster(balk2);
                        shadow.addCaster(balk3);
                        shadow.addCaster(balk4);
                        shadow.addCaster(tree);
                        directionalLight.shadow = shadow;
                        shadow.debug = true;
 
                        // Listeners
                        // Подписка на события
                        stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);
                        stage.addEventListener(Event.ENTER_FRAME, onEnterFrame);
                        stage.addEventListener(Event.RESIZE, onResize);
                }
 
                private function createLabel():void {
                        var info:TextInfo = new TextInfo();
                        info.x = 5;
                        info.y = 5;
                        info.write("ASDF — move camera");
                        info.write("Q — change shadow quality");
                        info.write("I — use shadows debug");
                        info.write("P, Shift+P — increase/decrease PCF size");
                        info.write("[, Shift+[ — increase/decrease bias multiplier");
                        info.write("7 —  set work volume height to 1000");
                        info.write("8 —  set work volume height to 10000");
                        info.write("9 —  change shadow color to blue");
                        info.write("0 —  change shadow color to black");
                        addChild(info);
                }
 
                private function onKeyDown(event:KeyboardEvent):void {
                        switch (event.keyCode) {
                                case Keyboard.SPACE :
                                        trace(camera.matrix.rawData);
                                        break;
                                case Keyboard.I :
                                        shadow.debug = !shadow.debug;
                                        break;
                                case Keyboard.LEFTBRACKET:
                                        shadow.biasMultiplier += event.shiftKey ? 0.01 : -0.01;
                                        break;
                                case Keyboard.Q :
                                {
                                        if (shadow.mapSize < 2048)
                                                shadow.mapSize *= 2;
                                        else
                                                shadow.mapSize = 128;
                                }
                                        break;
                                case Keyboard.P:
                                {
                                        shadow.pcfOffset +=
                                                        event.shiftKey ? -1 : 1;
                                }
                                        break;
                                case Keyboard.NUMBER_9:
                                {
                                        directionalLight.color = 0xFFFF60;
                                        ambientLight.color = 0x333390
                                }
                                        break;
                                case Keyboard.NUMBER_0:
                                {
                                        directionalLight.color = 0xFFFFa0;
                                        ambientLight.color = 0x333333;
                                }
                                        break;
                                case Keyboard.NUMBER_7:
                                {
                                        shadow.farBoundPosition = 500;
                                        shadow.nearBoundPosition = -500
                                }
                                        break;
                                case Keyboard.NUMBER_8:
                                {
                                        shadow.farBoundPosition = 5000;
                                        shadow.nearBoundPosition = -5000
                                }
                                        break;
                        }
                }
 
                private function onEnterFrame(e:Event):void {
                        counter += .001*Math.sin(counter) + .01;
                        tree.rotationY = Math.sin(counter)/7 - .2;
                        controller.update();
                        camera.render(stage3D);
                }
 
                private function onResize(e:Event = null):void {
                        camera.view.width = stage.stageWidth;
                        camera.view.height = stage.stageHeight;
                }
 
        }
}
 
import flash.display.Sprite;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
import flash.text.TextFormat;
 
class TextInfo extends Sprite {
        private var textField:TextField;
        private var bg:Sprite;
 
        public function TextInfo() {
                bg = new Sprite();
                with (bg.graphics) {
                        beginFill(0x000000, .75);
                        drawRect(0, 0, 10, 10);
                        endFill();
                }
                textField = new TextField();
                textField.autoSize = TextFieldAutoSize.LEFT;
                textField.selectable = false;
                textField.defaultTextFormat = new TextFormat("Tahoma", 10, 0xFFFFFF);
                textField.x = 5;
                textField.y = 5;
                addChild(bg);
                addChild(textField);
        }
 
        public function write(value:String):void {
                textField.appendText(value + "\n");
                bg.width = textField.width + 10;
                bg.height = textField.height + 10;
        }
}


Asfel 11.02.2013 19:21

Полагаю сейчас у них этого нет :). Можешь отрендерить объект на текстуру и его развернуть трансформом таким образом получив "тень"


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

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