public ApplicationSprite()
        {
            //this.stage.scaleMode = StageScaleMode.SHOW_ALL;

            // http://wiki.flare3d.com/index.php?title=Test19_-_Embeding_Collada_File

            this.scene = new Viewer3D(this);
            camera.setPosition(200, 200, -300);
            camera.lookAt(0.0, 50, 0.0);

            scene.camera = camera;

            //scene.library.addItem("Soldier_new-1.jpg", new Texture3D(
            //    KnownEmbeddedResources.Default["assets/FlashFlare3DEmbedingColladaFile/Soldier_new-1.jpg"].ToBitmapAsset()
            //    ));



            //new knocked_out_7(scene);
            //new knocked_out_7(scene) { x = 200 };
            new HZCannon(scene);

            scene.autoResize = true;

            //this.scene.setViewport(0, 0, this.stage.stageWidth, this.stage.stageHeight);
            
            //this.stage.resize +=
            //    delegate
            //    {
            //        this.scene.setViewport(0, 0, this.stage.stageWidth, this.stage.stageHeight);
            //    };

            this.addChild(new net.hires.debug.Stats());
        }
 public knocked_out_7(Viewer3D scene)
     : base(
         KnownEmbeddedResources.Default["assets/FlashFlare3DEmbedingColladaFile/knocked_out_7.dae"].ToXMLAsset()
         )
 {
     this.parent = scene;
     this.load();
 }
        public ApplicationSprite()
        {
            var scene = new Viewer3D(this);

            scene.camera = new Camera3D();
            scene.camera.setPosition(120, 40, -30);
            scene.camera.lookAt(0, 0, 0);

            scene.addChild(new ship());
        }
示例#4
0
        private bool ShowCenter()
        {
            SpecsAndGeomWindow SAGW    = (SpecsAndGeomWindow)CatApplication.ActiveWindow;
            Viewer3D           NewView = (Viewer3D)SAGW.ActiveViewer;

            NewView.Reframe();
            Viewpoint3D viewpoint3D1 = NewView.Viewpoint3D;

            this.TopMost = false;
            return(false);
        }
        public HZCannon(Viewer3D scene)
            : base(
                KnownEmbeddedResources.Default["assets/FlashFlare3DEmbedingColladaFile/HZCannon.dae"].ToXMLAsset()
                )
        {
            scene.library.addItem("HZCannon_capture_009_04032013_192834.png", new Texture3D(
                KnownEmbeddedResources.Default["assets/FlashFlare3DEmbedingColladaFile/HZCannon_capture_009_04032013_192834.png"].ToBitmapAsset()
                ));


            this.parent = scene;
            this.load();
        }
示例#6
0
        /*!
         * @param url	URL to 3D animation file to load.
         * Load a 3D animation content file (BVH or Vixen format)
         * and apply it to the current skeleton.
         *
         * @see PlayAnimation PauseAnimation
         */
        public void LoadAnimation(string url)
        {
            Viewer3D viewer   = Viewer as Viewer3D;
            Scriptor scriptor = AnimScriptor;
            String   ext      = url.Substring(url.LastIndexOf('.')).ToLower();
            string   skelname = ConnectSkeleton();

            AnimScriptor.Directory = Path.GetDirectoryName(url);
            AnimScriptor.Target    = _skeleton;
            if (ext == ".scp")
            {
                scriptor.LoadScript(url);
            }
            else
            {
                _animName = Path.GetFileNameWithoutExtension(url) + skelname;
                scriptor.Load(url, skelname, Animator.AUTO_PLAY, _skeleton);
            }
        }
示例#7
0
        protected string ConnectSkeleton()
        {
            if (_skelName != null)
            {
                return(_skelName);
            }
            try
            {
                Group    g        = SharedWorld.MainScene.Engines.Find(".skeleton", Group.FIND_ACTIVE | Group.FIND_DESCEND | Group.FIND_END);
                Viewer3D viewer   = Viewer as Viewer3D;
                Skeleton skel     = g.ConvertTo(SerialID.VX_Skeleton) as Skeleton;
                string   skelname = skel.Name;

                _skelName           = skelname.Substring(skelname.IndexOf('.'));
                _skeleton           = skel;
                AnimScriptor.Target = skel;
                return(_skelName);
            }
            catch (Exception)
            {
                return(null);
            }
        }
示例#8
0
 /*!
  * Pauses the currently playing animation.
  *
  * @see LoadAnimation PlayAnimation
  */
 public void PauseAnimation(string name)
 {
     try
     {
         Viewer3D viewer   = Viewer as Viewer3D;
         string   skelname = ConnectSkeleton();
         Scriptor scp      = AnimScriptor;
         if (skelname != null)
         {
             if (name != null)
             {
                 scp.End(name + skelname);
             }
             else
             {
                 scp.End(_animName);
             }
         }
     }
     catch (Exception ex)
     {
         SharedWorld.LogError("PauseAnimation EXCEPTION " + ex.Message);
     }
 }
示例#9
0
        public void Initialize()
        {
            ClearControls();
            this.slice      = new Rectangle3D();
            this.slice.Name = "SlicePlane";
            // First tool strip: Slice position.
            slicePositionToolStrip         = new ToolStrip();
            slicePositionToolStrip.Dock    = DockStyle.Top;
            currentSliceLabel              = new ToolStripLabel();
            currentSliceLabel.DisplayStyle = ToolStripItemDisplayStyle.Text; // NOTE: The text for this label is set below.
            slicePositionToolStrip.Items.Add(currentSliceLabel);
            zLabel = new ToolStripLabel();
            zLabel.DisplayStyle = ToolStripItemDisplayStyle.Text; // NOTE: The text for this label is set below.
            slicePositionToolStrip.Items.Add(zLabel);
            ToolStripSeparator separator1 = new ToolStripSeparator();

            slicePositionToolStrip.Items.Add(separator1);
            moveUpButton              = new ToolStripButton();
            moveUpButton.Click       += new EventHandler(HandleMoveUpButtonClick);
            moveUpButton.DisplayStyle = ToolStripItemDisplayStyle.Text;
            moveUpButton.Text         = "Move up";
            slicePositionToolStrip.Items.Add(moveUpButton);
            moveDownButton              = new ToolStripButton();
            moveDownButton.Click       += new EventHandler(HandleMoveDownButtonClick);
            moveDownButton.DisplayStyle = ToolStripItemDisplayStyle.Text;
            moveDownButton.Text         = "Move down";
            slicePositionToolStrip.Items.Add(moveDownButton);
            zStepLabel = new ToolStripLabel();
            zStepLabel.DisplayStyle = ToolStripItemDisplayStyle.Text;
            zStepLabel.Text         = "Step: ";
            slicePositionToolStrip.Items.Add(zStepLabel);
            zStepTextBox = new ToolStripTextBox();
            zStepTextBox.DisplayStyle = ToolStripItemDisplayStyle.Text;
            zStepTextBox.Text         = "0.01";
            zStepTextBox.AutoSize     = false;
            zStepTextBox.Width        = 50;
            slicePositionToolStrip.Items.Add(zStepTextBox);
            ToolStripSeparator separator2 = new ToolStripSeparator();

            slicePositionToolStrip.Items.Add(separator2);

            insertSliceButton              = new ToolStripButton();
            insertSliceButton.Click       += new EventHandler(HandleInsertSliceButtonClick);
            insertSliceButton.DisplayStyle = ToolStripItemDisplayStyle.Text;
            insertSliceButton.Text         = "Insert slice";
            slicePositionToolStrip.Items.Add(insertSliceButton);
            removeSliceButton              = new ToolStripButton();
            removeSliceButton.Enabled      = false;
            removeSliceButton.Click       += new EventHandler(HandleRemoveSliceButtonClick);
            removeSliceButton.DisplayStyle = ToolStripItemDisplayStyle.Text;
            removeSliceButton.Text         = "Remove slice";
            slicePositionToolStrip.Items.Add(removeSliceButton);

            // Second tool strip: Slice editing
            sliceEditingToolStrip      = new ToolStrip();
            sliceEditingToolStrip.Dock = DockStyle.Top;
            moveButton = new ToolStripButton();
            moveButton.DisplayStyle    = ToolStripItemDisplayStyle.Text;
            moveButton.Text            = "Move";
            moveButton.CheckOnClick    = true;
            moveButton.Checked         = false;
            moveButton.CheckedChanged += new EventHandler(HandleMoveButtonCheckedChanged);
            sliceEditingToolStrip.Items.Add(moveButton);
            expandButton = new ToolStripButton();
            expandButton.DisplayStyle    = ToolStripItemDisplayStyle.Text;
            expandButton.Text            = "Expand";
            expandButton.CheckOnClick    = true;
            expandButton.Checked         = false;
            expandButton.CheckedChanged += new EventHandler(HandleExpandButtonCheckedChanged);
            sliceEditingToolStrip.Items.Add(expandButton);
            alignXButton              = new ToolStripButton();
            alignXButton.Enabled      = false;
            alignXButton.DisplayStyle = ToolStripItemDisplayStyle.Text;
            alignXButton.Text         = "Align X";
            alignXButton.Click       += new EventHandler(HandleAlignXButtonClick);
            sliceEditingToolStrip.Items.Add(alignXButton);
            alignYButton              = new ToolStripButton();
            alignYButton.Enabled      = false;
            alignYButton.DisplayStyle = ToolStripItemDisplayStyle.Text;
            alignYButton.Text         = "Align Y";
            alignYButton.Click       += new EventHandler(HandleAlignYButtonClick);
            sliceEditingToolStrip.Items.Add(alignYButton);

            // Third tool strip: Rendering tool strip
            renderingToolStrip                  = new ToolStrip();
            renderingToolStrip.Dock             = DockStyle.Top;
            showWireframeButton                 = new ToolStripButton();
            showWireframeButton.DisplayStyle    = ToolStripItemDisplayStyle.Text;
            showWireframeButton.Text            = "Show wireframe";
            showWireframeButton.CheckOnClick    = true;
            showWireframeButton.Checked         = false;
            showWireframeButton.CheckedChanged += new EventHandler(HandleShowWireframeButtonCheckedChanged);
            renderingToolStrip.Items.Add(showWireframeButton);
            showSurfacesButton = new ToolStripButton();
            showSurfacesButton.DisplayStyle    = ToolStripItemDisplayStyle.Text;
            showSurfacesButton.Text            = "Show surfaces";
            showSurfacesButton.CheckOnClick    = true;
            showSurfacesButton.Checked         = true;
            showSurfacesButton.CheckedChanged += new EventHandler(HandleShowSurfacesButtonCheckedChanged);
            renderingToolStrip.Items.Add(showSurfacesButton);
            showVerticesButton = new ToolStripButton();
            showVerticesButton.DisplayStyle    = ToolStripItemDisplayStyle.Text;
            showVerticesButton.Text            = "Show vertices";
            showVerticesButton.CheckOnClick    = true;
            showVerticesButton.Checked         = false;
            showVerticesButton.CheckedChanged += new EventHandler(HandleShowVerticesButtonCheckedChanged);
            renderingToolStrip.Items.Add(showVerticesButton);
            showSlicePlaneButton = new ToolStripButton();
            showSlicePlaneButton.DisplayStyle    = ToolStripItemDisplayStyle.Text;
            showSlicePlaneButton.Text            = "Show slice plane";
            showSlicePlaneButton.CheckOnClick    = true;
            showSlicePlaneButton.Checked         = true;
            showSlicePlaneButton.CheckedChanged += new EventHandler(HandleShowSlicePlaneButtonCheckedChanged);
            renderingToolStrip.Items.Add(showSlicePlaneButton);
            showAxesButton = new ToolStripButton();
            showAxesButton.DisplayStyle    = ToolStripItemDisplayStyle.Text;
            showAxesButton.Text            = "Show axes";
            showAxesButton.CheckOnClick    = true;
            showAxesButton.Checked         = false;
            showAxesButton.CheckedChanged += new EventHandler(HandleShowAxesButtonCheckedChanged);
            renderingToolStrip.Items.Add(showAxesButton);
            ToolStripSeparator separator3 = new ToolStripSeparator();

            renderingToolStrip.Items.Add(separator3);
            numberOfLongitudePointsLabel = new ToolStripLabel();
            numberOfLongitudePointsLabel.DisplayStyle = ToolStripItemDisplayStyle.Text;
            numberOfLongitudePointsLabel.Text         = "Number of longitude points: ";
            renderingToolStrip.Items.Add(numberOfLongitudePointsLabel);
            numberOfLongitudePointsTextBox = new ToolStripTextBox();
            numberOfLongitudePointsTextBox.DisplayStyle = ToolStripItemDisplayStyle.Text;
            numberOfLongitudePointsTextBox.Text         = "32";
            numberOfLongitudePointsTextBox.AutoSize     = false;
            numberOfLongitudePointsTextBox.Width        = 30;
            numberOfLongitudePointsTextBox.TextChanged += new EventHandler(HandleNumberOfLongitudePointsTextBoxTextChanged);
            renderingToolStrip.Items.Add(numberOfLongitudePointsTextBox);
            shadingModelLabel = new ToolStripLabel();
            shadingModelLabel.DisplayStyle = ToolStripItemDisplayStyle.Text;
            shadingModelLabel.Text         = "Shading model";
            renderingToolStrip.Items.Add(shadingModelLabel);
            shadingModelComboBox = new ToolStripComboBox();
            shadingModelComboBox.DropDownStyle = ComboBoxStyle.DropDownList;
            shadingModelComboBox.Items.Add("Flat");
            shadingModelComboBox.Items.Add("Smooth");
            shadingModelComboBox.AutoSize              = false;
            shadingModelComboBox.Width                 = 70;
            shadingModelComboBox.SelectedIndex         = 1; // Default value: Smooth shading
            shadingModelComboBox.SelectedIndexChanged += new EventHandler(HandleShadingModelComboBoxSelectedIndexChanged);
            renderingToolStrip.Items.Add(shadingModelComboBox);
            autoRenderButton = new ToolStripButton();
            autoRenderButton.DisplayStyle    = ToolStripItemDisplayStyle.Text;
            autoRenderButton.Text            = "Autorender";
            autoRenderButton.CheckOnClick    = true;
            autoRenderButton.Checked         = true;
            autoRenderButton.CheckedChanged += new EventHandler(HandleAutoRenderButtonCheckedChanged);
            renderingToolStrip.Items.Add(autoRenderButton);



            splitContainer      = new SplitContainer();
            splitContainer.Dock = DockStyle.Fill;
            this.Controls.Add(splitContainer);
            viewer3D      = new Viewer3D();
            viewer3D.Dock = DockStyle.Fill;
            splitContainer.Panel1.Controls.Add(viewer3D);
            bezierCurveViewer      = new BezierCurveViewer();
            bezierCurveViewer.Dock = DockStyle.Fill;
            splitContainer.Panel2.Controls.Add(bezierCurveViewer);
            splitContainer.SplitterDistance = this.Width / 2;
            bezierCurveViewer.SetRange(-2, 2, -2, 2);
            bezierCurveViewer.SplineCurveChanged  += new EventHandler(HandleBezierSplineViewerSplineCurveChanged);
            bezierCurveViewer.PointsSelected      += new EventHandler(HandleBezierCurveViewerPointsSelected);
            bezierCurveViewer.AllPointsDeSelected += new EventHandler(HandleBezierCurveViewerAllPointsDeSelected);

            // Add the toolstrips in reverse order
            // Strangely enough, they should also apparently be inserted AFTER the SplitContainer, despite
            // the latter's DockStyle (= Fill)!
            this.Controls.Add(renderingToolStrip);
            this.Controls.Add(sliceEditingToolStrip);
            this.Controls.Add(slicePositionToolStrip);

            // MW ToDo: Some ugly hard-coding here...
            scene = new Scene3D();
            Light light = new Light();

            light.Position[1] = -5;
            light.Position[2] = 3;
            light.IsOn        = true;
            scene.LightList.Add(light);
            face.AmbientColor  = Color.FromArgb(255, 205, 148); // Typical skin color approximation
            face.DiffuseColor  = Color.FromArgb(255, 205, 148); // Typical skin color approximation
            face.SpecularColor = Color.White;
            face.Shininess     = 50;                            //  20;
            int numberOfLongitudePoints = int.Parse(numberOfLongitudePointsTextBox.Text);

            face.Generate(new List <double>()
            {
                numberOfLongitudePoints
            });
            scene.AddObject(face);
            slice.AmbientColor  = Color.FromArgb(200, 100, 255, 100);
            slice.DiffuseColor  = Color.FromArgb(200, 100, 255, 100);
            slice.SpecularColor = Color.FromArgb(200, 100, 255, 100);
            slice.Shininess     = 20;
            slice.Generate(new List <double>()
            {
                3.0, 3.0
            });
            scene.AddObject(slice);
            currentSliceIndex = face.HorizontalBezierCurveList.Count / 2;
            slice.Move(0, 0, face.HorizontalBezierCurveList[currentSliceIndex].SplineList[0].ControlPointList[0].CoordinateList[2]);
            //     slice.Translate(0, 0, face.HorizontalBezierCurveList[currentSliceIndex].SplineList[0].ControlPointList[0].CoordinateList[2]);
            bezierCurveViewer.SetBezierCurve(face.HorizontalBezierCurveList[currentSliceIndex]);
            currentSliceLabel.Text    = "Current slice: " + currentSliceIndex.ToString() + " of " + (face.HorizontalBezierCurveList.Count - 1).ToString();
            zLabel.Text               = "z = " + face.HorizontalBezierCurveList[currentSliceIndex].SplineList[0].ControlPointList[0].CoordinateList[2].ToString("0.0000");
            zStepTextBox.TextChanged += new EventHandler(HandleZStepTextBoxTextChanged); // Add the event handler here, AFTER setting the slice index
            viewer3D.Scene            = scene;
            viewer3D.CameraTarget     = new OpenTK.Vector3(0f, 0f, 0.5f);                // The model extends from 0 to 1 in z.

            viewer3D.ArrowUpPressed   -= new EventHandler(HandlerViewer3DArrowUpPressed);
            viewer3D.ArrowUpPressed   += new EventHandler(HandlerViewer3DArrowUpPressed);
            viewer3D.ArrowDownPressed -= new EventHandler(HandleViewer3DArrowDownPressed);
            viewer3D.ArrowDownPressed += new EventHandler(HandleViewer3DArrowDownPressed);
        }
        // AIR does not yet show anything. why

        public ApplicationSprite()
        {
            //        curityError: Error #2148: SWF file file:///X|/jsc.svn/examples/actionscript/synergy/Flare3DWaterShips/Flare3DWaterShips/bin/Debug/staging/Flare3DWaterShips.ApplicationSprite/web/Flare3DWaterShips.ApplicationSprite.swf cannot access local resource file:///X|/jsc.svn/examples/actionscript/synergy/Flare3DWaterShips/Flare3DWaterShips/bin/Debug/staging/Flare3DWaterShips.ApplicationSprite/web/Flare3DWaterShips.ApplicationSprite.swf/[[DYNAMIC]]/3. Only local-with-filesystem and trusted local SWF files may access local resources.
            //at flash.display::Loader/get content()
            //at flare.core::Texture3D/completeEvent()[Z:\projects\flare3d 2.5\src\flare\core\Texture3D.as:496]


            var scene = new Viewer3D(this, "", 0.2);

            scene.camera = new Camera3D();
            scene.camera.setPosition(120, 40, -30);
            scene.camera.lookAt(0, 0, 0);

            #region mirrorCam
            var mirrorCam = new Camera3D();
            var mirror    = new Texture3D(new Point(512, 512));
            mirror.mipMode  = Texture3D.MIP_NONE;
            mirror.wrapMode = Texture3D.WRAP_CLAMP;
            mirror.upload(scene);
            #endregion


            #region oceanShader
            var Ocean              = KnownEmbeddedResources.Default["assets/Flare3DWaterShips/ocean07.flsl.compiled"];
            var oceanShader        = new FLSLMaterial("oceanShader", Ocean.ToByteArrayAsset());
            var oceanShader_params = oceanShader.@params as dynamic;

            // http://www.flare3d.com/docs/flare/core/Texture3D.html
            // http://wiki.flare3d.com/index.php?title=FLAR_Toolkit_integration
            oceanShader_params.skyMap.value = new Texture3D(
                KnownEmbeddedResources.Default[
                    "assets/Flare3DWaterShips/highlights.png"
                ].ToBitmapAsset(), false, Texture3D.FORMAT_CUBEMAP);
            oceanShader_params.normalMap.value = new Texture3D(
                KnownEmbeddedResources.Default["assets/Flare3DWaterShips/normalmap.jpg"].ToBitmapAsset());
            oceanShader_params.mirrorMap.value = mirror;
            #endregion

            // http://www.flare3d.com/support/index.php?topic=142.0

            var water  = new Plane("water", 3000, 3000, oceanGridSize - 1, oceanShader, "+xz");
            var skybox = new SkyBox(

                KnownEmbeddedResources.Default["assets/Flare3DWaterShips/skybox.png"].ToBitmapAsset(), SkyBox.HORIZONTAL_CROSS, null, 1);

            // http://www.flare3d.com/support/index.php?topic=63.0
            // http://www.flare3d.com/docs/tutorials/loadFromBytes/
            var ship0 = new Flare3DWaterShipComponent.ship();

            // how to make it safe to provide 3rd party assetslibrary builder
            // code templates? which can be selected by KnownEmbeddedResources pattern match?
            // class XFileTemplate<T> where T like foo "*.zf3d"

            var ship1 = new Flare3DWaterShipComponent.ship();
            ship1.x = 40;
            ship1.y = 10;

            var particles = new particles();

            #region initWaves():
            var bytes = new ByteArray();
            bytes.endian = Endian.LITTLE_ENDIAN;
            bytes.length = oceanGridSize * oceanGridSize * 12; // 4 btyes * RGB = 12.

            // http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/ShaderData.html
            //   public static class ShaderData
            //   {
            //       public ShaderData(ByteArray byteCode);
            //   }


            var PBWater     = KnownEmbeddedResources.Default["assets/Flare3DWaterShips/water.pbj"];
            var shader      = new Shader(PBWater.ToByteArrayAsset());
            var shader_data = shader.data as dynamic;

            shader_data.src.input = bmp;

            var surf = new Surface3D("data");

            // http://www.flare3d.com/docs/flare/core/Surface3D.html
            //     public override int addVertexData(uint dataIndex, int size = -1, Vector<double> vector = null);
            surf.addVertexData(dataIndex: (uint)Surface3D.COLOR0, size: 3);
            surf.vertexBytes = bytes;
            surf.upload(scene);

            water.surfaces[0].sources[Surface3D.COLOR0] = surf;
            #endregion

            ship0.addChild(particles);

            scene.addChild(skybox);
            scene.addChild(water);
            scene.addChild(ship0);
            scene.addChild(ship1);

            var st = new Stopwatch();
            st.Start();

            ship1.setScale(2, 2, 2);

            scene.addEventListener(Scene3D.RENDER_EVENT,

                                   listener: new Action <Event>(
                                       delegate
            {
                // render the big waves.
                #region  renderWaves()
                {
                    var timer = st.ElapsedMilliseconds;
                    point0.y  = timer / 400;
                    point1.y  = timer / 640;

                    // flash natives: apply params?
                    bmp.perlinNoise(3, 3, 2, 0, false, true, 7, true, new[] { point0, point1 });

                    var job = new ShaderJob(shader, bytes, oceanGridSize, oceanGridSize);
                    //job.addEventListener( ShaderEvent.COMPLETE, shaderCompleteEvent, false, 0, true );
                    job.complete +=
                        delegate
                    {
                        if (surf.vertexBuffer != null)
                        {
                            surf.vertexBuffer.uploadFromByteArray(bytes, 0, 0, oceanGridSize * oceanGridSize);
                        }
                    };

                    job.start();
                }
                #endregion

                // copy from the main camera and invert in Y axis.
                mirrorCam.copyTransformFrom(scene.camera);
                mirrorCam.transform.appendScale(1, -1, 1);

                // setup the mirror cam to start rendering on the mirror texture.
                scene.setupFrame(mirrorCam);
                scene.context.setRenderToTexture(mirror.texture, true);
                scene.context.clear(0, 0, 0, 0);

                // get the pixel color height.
                var color = bmp.getPixel(oceanGridSize / 2, oceanGridSize / 2) & 0xff;

                // ! .0 marks it as double. otherwise ship will digitally step on water
                var height = color / 255.0 * 20 + 1;

                // draw objects into the mirror texture.
                ship0.y = -height;
                ship0.draw();
                ship0.y = height;

                ship1.z = st.ElapsedMilliseconds * 0.001 - 100;

                ship1.y = -height;
                ship1.draw();
                ship1.y = height;


                // get back to the main render.
                scene.context.setRenderToBackBuffer();
                scene.setupFrame(scene.camera);
            }
                                       ).ToFunction()
                                   );

            // http://www.flare3d.com/support/index.php?topic=1101.0
            this.addChild(new net.hires.debug.Stats());
        }
示例#11
0
        /*!
         * @param url	URL of 3D scene file to load.
         * Load a 3D content file (Havok or Vixen format)
         * and handle a SceneLoadEvent when load is complete.
         * @see LoadAnimation
         */
        public void LoadScene(string url)
        {
            try
            {
                Viewer3D viewer  = Viewer as Viewer3D;
                Scene    scene   = SharedWorld.MainScene;
                Engine   simroot = scene.Engines;

                SharedWorld.DoAsyncLoad = true;
                string ext = Path.GetExtension(url).ToLower();
                if (ext == ".obj")
                {
                    ObjIO.Import objload  = new ObjIO.Import();
                    Scene        newscene = objload.LoadFile(url);
                    if (OBJLoaded != null)
                    {
                        OBJLoaded(newscene, url);
                    }
                    else
                    {
                        Viewer.SetScene(newscene);
                    }
                }

                /*
                 * else if (ext == ".xml")
                 * {
                 *      ModImport.ModImport import = new ModImport.ModImport();
                 *
                 *      import.Load(url);
                 *      Scene newscene = import.ParseScene();
                 *      Viewer.SetScene(newscene);
                 * }
                 * */
                else if (ext == ".vix")
                {
                    viewer.LoadAsync(url, scene);
                }
                else if (ext == ".hkt")
                {
                    Physics physics = null;

                    if (simroot != null)
                    {
                        physics = simroot.Find(".physics", Group.FIND_END | Group.FIND_CHILD) as Physics;
                    }
                    if (physics == null)
                    {
                        physics        = new Physics();
                        physics.Name   = "viewer.physics";
                        physics.Active = false;
                        if (simroot != null)
                        {
                            simroot.Append(physics);
                        }
                        else
                        {
                            scene.Engines = physics;
                        }
                    }
                    physics.Active = false;
                    viewer.LoadAsync(url, scene);
                }
                else
                {
                    throw new System.ArgumentException("invalid extension", ext);
                }
            }
            catch (Exception ex)
            {
                throw new System.IO.FileNotFoundException(ex.Message + ", Cannot open vixen file", url);
            }
        }
        // AIR does not yet show anything. why

        public ApplicationSprite()
        {
            //        curityError: Error #2148: SWF file file:///X|/jsc.svn/examples/actionscript/synergy/Flare3DWaterShips/Flare3DWaterShips/bin/Debug/staging/Flare3DWaterShips.ApplicationSprite/web/Flare3DWaterShips.ApplicationSprite.swf cannot access local resource file:///X|/jsc.svn/examples/actionscript/synergy/Flare3DWaterShips/Flare3DWaterShips/bin/Debug/staging/Flare3DWaterShips.ApplicationSprite/web/Flare3DWaterShips.ApplicationSprite.swf/[[DYNAMIC]]/3. Only local-with-filesystem and trusted local SWF files may access local resources.
            //at flash.display::Loader/get content()
            //at flare.core::Texture3D/completeEvent()[Z:\projects\flare3d 2.5\src\flare\core\Texture3D.as:496]


            var scene = new Viewer3D(this, "", 0.2);
            scene.camera = new Camera3D();
            scene.camera.setPosition(120, 40, -30);
            scene.camera.lookAt(0, 0, 0);

            #region mirrorCam
            var mirrorCam = new Camera3D();
            var mirror = new Texture3D(new Point(512, 512));
            mirror.mipMode = Texture3D.MIP_NONE;
            mirror.wrapMode = Texture3D.WRAP_CLAMP;
            mirror.upload(scene);
            #endregion


            #region oceanShader
            var Ocean = KnownEmbeddedResources.Default["assets/Flare3DWaterShips/ocean07.flsl.compiled"];
            var oceanShader = new FLSLMaterial("oceanShader", Ocean.ToByteArrayAsset());
            var oceanShader_params = oceanShader.@params as dynamic;

            // http://www.flare3d.com/docs/flare/core/Texture3D.html
            // http://wiki.flare3d.com/index.php?title=FLAR_Toolkit_integration
            oceanShader_params.skyMap.value = new Texture3D(
                KnownEmbeddedResources.Default[
                "assets/Flare3DWaterShips/highlights.png"
                ].ToBitmapAsset(), false, Texture3D.FORMAT_CUBEMAP);
            oceanShader_params.normalMap.value = new Texture3D(
                KnownEmbeddedResources.Default["assets/Flare3DWaterShips/normalmap.jpg"].ToBitmapAsset());
            oceanShader_params.mirrorMap.value = mirror;
            #endregion

            // http://www.flare3d.com/support/index.php?topic=142.0

            var water = new Plane("water", 3000, 3000, oceanGridSize - 1, oceanShader, "+xz");
            var skybox = new SkyBox(

                KnownEmbeddedResources.Default["assets/Flare3DWaterShips/skybox.png"].ToBitmapAsset(), SkyBox.HORIZONTAL_CROSS, null, 1);

            // http://www.flare3d.com/support/index.php?topic=63.0
            // http://www.flare3d.com/docs/tutorials/loadFromBytes/
            var ship0 = new Flare3DWaterShipComponent.ship();

            // how to make it safe to provide 3rd party assetslibrary builder
            // code templates? which can be selected by KnownEmbeddedResources pattern match?
            // class XFileTemplate<T> where T like foo "*.zf3d"

            var ship1 = new Flare3DWaterShipComponent.ship();
            ship1.x = 40;
            ship1.y = 10;

            var particles = new particles();

            #region initWaves():
            var bytes = new ByteArray();
            bytes.endian = Endian.LITTLE_ENDIAN;
            bytes.length = oceanGridSize * oceanGridSize * 12; // 4 btyes * RGB = 12.

            // http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/ShaderData.html
            //   public static class ShaderData
            //   {
            //       public ShaderData(ByteArray byteCode);
            //   }


            var PBWater = KnownEmbeddedResources.Default["assets/Flare3DWaterShips/water.pbj"];
            var shader = new Shader(PBWater.ToByteArrayAsset());
            var shader_data = shader.data as dynamic;

            shader_data.src.input = bmp;

            var surf = new Surface3D("data");

            // http://www.flare3d.com/docs/flare/core/Surface3D.html
            //     public override int addVertexData(uint dataIndex, int size = -1, Vector<double> vector = null);
            surf.addVertexData(dataIndex: (uint)Surface3D.COLOR0, size: 3);
            surf.vertexBytes = bytes;
            surf.upload(scene);

            water.surfaces[0].sources[Surface3D.COLOR0] = surf;
            #endregion

            ship0.addChild(particles);

            scene.addChild(skybox);
            scene.addChild(water);
            scene.addChild(ship0);
            scene.addChild(ship1);

            var st = new Stopwatch();
            st.Start();

            ship1.setScale(2, 2, 2);

            scene.addEventListener(Scene3D.RENDER_EVENT,

                listener: new Action<Event>(
                    delegate
                    {
                        // render the big waves.
                        #region  renderWaves()
                        {
                            var timer = st.ElapsedMilliseconds;
                            point0.y = timer / 400;
                            point1.y = timer / 640;

                            // flash natives: apply params?
                            bmp.perlinNoise(3, 3, 2, 0, false, true, 7, true, new[] { point0, point1 });

                            var job = new ShaderJob(shader, bytes, oceanGridSize, oceanGridSize);
                            //job.addEventListener( ShaderEvent.COMPLETE, shaderCompleteEvent, false, 0, true );
                            job.complete +=
                                delegate
                                {
                                    if (surf.vertexBuffer != null)
                                        surf.vertexBuffer.uploadFromByteArray(bytes, 0, 0, oceanGridSize * oceanGridSize);
                                };

                            job.start();
                        }
                        #endregion

                        // copy from the main camera and invert in Y axis.
                        mirrorCam.copyTransformFrom(scene.camera);
                        mirrorCam.transform.appendScale(1, -1, 1);

                        // setup the mirror cam to start rendering on the mirror texture.
                        scene.setupFrame(mirrorCam);
                        scene.context.setRenderToTexture(mirror.texture, true);
                        scene.context.clear(0, 0, 0, 0);

                        // get the pixel color height.
                        var color = bmp.getPixel(oceanGridSize / 2, oceanGridSize / 2) & 0xff;

                        // ! .0 marks it as double. otherwise ship will digitally step on water
                        var height = color / 255.0 * 20 + 1;

                        // draw objects into the mirror texture.
                        ship0.y = -height;
                        ship0.draw();
                        ship0.y = height;

                        ship1.z = st.ElapsedMilliseconds * 0.001 - 100;

                        ship1.y = -height;
                        ship1.draw();
                        ship1.y = height;


                        // get back to the main render.
                        scene.context.setRenderToBackBuffer();
                        scene.setupFrame(scene.camera);
                    }
                ).ToFunction()
            );

            // http://www.flare3d.com/support/index.php?topic=1101.0
            this.addChild(new net.hires.debug.Stats());

        }