Exemple #1
0
        public void Process()
        {
            CurrentFramesPerSecond = DeckProgram.MainForm.FramesPerSecond;
            m_timer += 1 / CurrentFramesPerSecond;

            h3d.setOption(h3d.H3DOptions.DebugViewMode, IsDebugViewMode ? 1.0f : 0.0f);
            h3d.setOption(h3d.H3DOptions.WireframeMode, IsWireframeMode ? 1.0f : 0.0f);

            if (!IsFreeze)
            {
                m_animationTime += 1.0f / CurrentFramesPerSecond;

                m_demo.Process(m_animationTime, AnimationBlendingWeight, CurrentFramesPerSecond);
            }

            Matrix cameraTranslationMatrix    = Matrix.CreateTranslation(DeckProgram.DeckRudder.CameraLocation.X, DeckProgram.DeckRudder.CameraLocation.Y, DeckProgram.DeckRudder.CameraLocation.Z);
            Matrix cameraTransformationMatrix = Matrix.Multiply(DeckProgram.DeckRudder.CameraOrientationMatrix, cameraTranslationMatrix);

            h3d.setNodeTransMat(CameraHid, cameraTransformationMatrix.ToArray(MatrixElementOrder.RowMajor));


            Matrix lightTranslationMatrix    = Matrix.CreateTranslation(DeckProgram.DeckRudder.FlashlightLocation.X, DeckProgram.DeckRudder.FlashlightLocation.Y, DeckProgram.DeckRudder.FlashlightLocation.Z);
            Matrix lightTransformationMatrix = Matrix.Multiply(DeckProgram.DeckRudder.FlashlightOrientationMatrix, lightTranslationMatrix);

            h3d.setNodeTransMat(LightHid, lightTransformationMatrix.ToArray(MatrixElementOrder.RowMajor));
            // Set camera parameters
            //h3d.setNodeTransform(CameraHid, DeckProgram.DeckRudder.CX, DeckProgram.DeckRudder.CY, DeckProgram.DeckRudder.CZ
            //    , DeckProgram.DeckRudder.RX, DeckProgram.DeckRudder.RY, 0, 1, 1, 1); //horde3d 1.0

            if (StatisticsMode > 0)
            {
                Horde3DUtils.showFrameStats(m_fontMaterialHid, m_panelMaterialHid, StatisticsMode);

                string text = string.Format("Weight: {0:F2}", AnimationBlendingWeight);
                Horde3DUtils.showText(text, 0.03f, 0.24f, 0.026f, 1, 1, 1, m_fontMaterialHid, 5);
            }

            // Show logo

            /*h3d.showOverlay( 0.75f, 0.8f, 0, 1, 0.75f, 1, 0, 0,
             *                1, 1, 1, 0, 1, 0.8f, 1, 1,
             *                1, 1, 1, 1, m_logoMaterialHid, 7 );
             */

            // Render scene
            h3d.render(CameraHid);  //horde3D 1.0

            h3d.finalizeFrame();

            //horde3D 1.0
            h3d.clearOverlays();

            // Write all messages to log file
            Horde3DUtils.dumpMessages();
        }
Exemple #2
0
        public void mainLoop(float fps)
        {
            _curFPS = fps;
            _timer += 1 / fps;

            Horde3D.setOption(Horde3D.EngineOptions.DebugViewMode, _debugViewMode ? 1.0f : 0.0f);

            if (!_freeze)
            {
                _animTime += 1.0f / _curFPS;

                // Do animation blending
                Horde3D.setModelAnimParams(_knight, 0, _animTime * 24.0f, _weight);
                Horde3D.setModelAnimParams(_knight, 1, _animTime * 24.0f, 1.0f - _weight);

                // Animate particle system
                Horde3D.advanceEmitterTime(_particleSys, 1.0f / _curFPS);
            }

            // Set camera parameters
            Horde3D.setNodeTransform(Horde3D.PrimeTimeCam, _x, _y, _z, _rx, _ry, 0, 1, 1, 1);


            if (_showFPS)
            {
                // Avoid updating FPS text every frame to make it readable
                if (_timer > 0.3f)
                {
                    _fpsText = string.Format("FPS: {0:F2}", fps);
                    _timer   = 0;
                }

                // Show text
                if (_fpsText != null)
                {
                    Horde3DUtils.showText(_fpsText, 0, 0.95f, 0.03f, 0, _fontMatRes);
                }

                string text = string.Format("Weight: {0:F2}", _weight);
                Horde3DUtils.showText(text, 0, 0.91f, 0.03f, 0, _fontMatRes);
            }

            // Show logo
            Horde3D.showOverlay(0.75f, 0, 0, 0, 1, 0, 1, 0,
                                1, 0.2f, 1, 1, 0.75f, 0.2f, 0, 1,
                                7, _logoMatRes);


            // Render scene
            Horde3D.render();

            // Write all messages to log file
            Horde3DUtils.dumpMessages();
        }
Exemple #3
0
        public void mainLoop(float fps)
        {
            _curFPS = fps;
            _timer += 1f / fps;

            h3d.setOption(h3d.H3DOptions.DebugViewMode, _debugViewMode ? 1.0f : 0.0f);
            h3d.setOption(h3d.H3DOptions.WireframeMode, _wireframeMode ? 1.0f : 0.0f);

            if (!_freeze)
            {
                _animTime += 1.0f / _curFPS;

                // Do animation blending
                h3d.setModelAnimParams(_knight, 0, _animTime * 24.0f, _weight);
                h3d.setModelAnimParams(_knight, 1, _animTime * 24.0f, 1.0f - _weight);
                h3d.updateModel(_knight, (int)(h3d.H3DModelUpdateFlags.Animation | h3d.H3DModelUpdateFlags.Geometry));

                // Animate particle system
                int cnt = cnt = h3d.findNodes(_particleSys, "", (int)h3d.H3DNodeTypes.Emitter);
                for (int i = 0; i < cnt; ++i)
                {
                    h3d.updateEmitter(h3d.getNodeFindResult(i), 1.0f / _curFPS);
                }
            }

            // Set camera parameters
            h3d.setNodeTransform(_cam, _x, _y, _z, _rx, _ry, 0, 1, 1, 1);       //horde3d 1.0

            if (_statMode > 0)
            {
                Horde3DUtils.showFrameStats(_fontMatRes, _panelMatRes, _statMode);

                string text = string.Format("Weight: {0:F2}", _weight);
                Horde3DUtils.showText(text, 0.03f, 0.24f, 0.026f, 1, 1, 1, _fontMatRes);
            }

            // Show logo
            float ww = h3d.getNodeParamI(_cam, (int)h3d.H3DCamera.ViewportWidthI) / (float)h3d.getNodeParamI(_cam, (int)h3d.H3DCamera.ViewportHeightI);

            float[] ovLogo = new float[] { ww - 0.4f, 0.8f, 0, 1, ww - 0.4f, 1, 0, 0, ww, 1, 1, 0, ww, 0.8f, 1, 1 };
            h3d.showOverlays(ovLogo, 4, 1, 1, 1, 1, _logoMatRes, 0);

            // Render scene
            h3d.render(_cam);  //horde3D 1.0

            h3d.finalizeFrame();

            //horde3D 1.0
            h3d.clearOverlays();

            // Write all messages to log file
            Horde3DUtils.dumpMessages();
        }
Exemple #4
0
        public void mainLoop(float fps)
        {
            _curFPS = fps;
            _timer += 1f / fps;

            h3d.setOption(h3d.H3DOptions.DebugViewMode, _debugViewMode ? 1.0f : 0.0f);
            h3d.setOption(h3d.H3DOptions.WireframeMode, _wireframeMode ? 1.0f : 0.0f);

            if (!_freeze)
            {
                // Set animation time
                h3d.setMaterialUniform(_computeMatRes, "deltaTime", 1.0f / 30.0F, 0, 0, 0);

                // Set attractor point
                float angle = (float)_timer * 0.5f;

                float attractorX = (float)Math.Cos(angle);
                float attractorY = (float)Math.Cos(angle) * (float)Math.Sin(angle);
                float attractorZ = (float)Math.Sin(angle);

                h3d.setMaterialUniform(_computeMatRes, "attractor", attractorX * 2, attractorY * 2, attractorZ * 2, 0);

                // Perform computing
                h3d.compute(_computeMatRes, "COMPUTE", _computeGroupX /*1024*/, _computeGroupY /*1*/, 1);
            }

            // Set camera parameters
            h3d.setNodeTransform(_cam, _x, _y, _z, _rx, _ry, 0, 1, 1, 1); //horde3d 1.0

            Horde3DUtils.showFrameStats(_fontMatRes, _panelMatRes, _statMode);

            // Show logo
            float ww = h3d.getNodeParamI(_cam, (int)h3d.H3DCamera.ViewportWidthI) / (float)h3d.getNodeParamI(_cam, (int)h3d.H3DCamera.ViewportHeightI);

            float[] ovLogo = new float[] { ww - 0.4f, 0.8f, 0, 1, ww - 0.4f, 1, 0, 0, ww, 1, 1, 0, ww, 0.8f, 1, 1 };
            h3d.showOverlays(ovLogo, 4, 1, 1, 1, 1, _logoMatRes, 0);

            // Render scene
            h3d.render(_cam);//horde3D 1.0

            h3d.finalizeFrame();

            //horde3D 1.0
            h3d.clearOverlays();

            // Write all messages to log file
            Horde3DUtils.dumpMessages();
        }
        public void mainLoop(float fps)
        {
            _curFPS = fps;
            _timer += 1 / fps;

            Horde3D.setOption(Horde3D.EngineOptions.DebugViewMode, _debugViewMode ? 1.0f : 0.0f);

            if (!_freeze)
            {
                _crowdSim.update(_curFPS);
            }

            // Set camera parameters
            Horde3D.setNodeTransform(Horde3D.PrimeTimeCam, _x, _y, _z, _rx, _ry, 0, 1, 1, 1);


            if (_showFPS)
            {
                // Avoid updating FPS text every frame to make it readable
                if (_timer > 0.3f)
                {
                    _fpsText = string.Format("FPS: {0:F2}", fps);
                    _timer   = 0;
                }

                // Show text
                if (_fpsText != null)
                {
                    Horde3DUtils.showText(_fpsText, 0, 0.95f, 0.03f, 0, _fontMatRes);
                }
            }

            // Show logo
            Horde3D.showOverlay(0.75f, 0, 0, 0, 1, 0, 1, 0,
                                1, 0.2f, 1, 1, 0.75f, 0.2f, 0, 1,
                                7, _logoMatRes);


            // Render scene
            Horde3D.render();

            // Write all messages to log file
            Horde3DUtils.dumpMessages();
        }
Exemple #6
0
        public void mainLoop(float fps)
        {
            _curFPS = fps;
            _timer += 1f / fps;

            h3d.setOption(h3d.H3DOptions.DebugViewMode, _debugViewMode ? 1.0f : 0.0f);
            h3d.setOption(h3d.H3DOptions.WireframeMode, _wireframeMode ? 1.0f : 0.0f);

            if (!_freeze)
            {
                // Set animation time
                // Calculate animation time in seconds
                _rotation += 0.05f;
                h3d.setNodeTransform(_model, 0, 0, 0, _rotation, _rotation, 0, 1, 1, 1);
            }

            // Set camera parameters
            h3d.setNodeTransform(_cam, _x, _y, _z, _rx, _ry, 0, 1, 1, 1); //horde3d 1.0

            Horde3DUtils.showFrameStats(_fontMatRes, _panelMatRes, _statMode);

            Horde3DUtils.showText("Up/Down arrows to modify tessellation level", 1.0f, 0.01f, 0.032f, 1, 1, 1, _fontMatRes);

            // Show logo
            float ww = h3d.getNodeParamI(_cam, (int)h3d.H3DCamera.ViewportWidthI) / (float)h3d.getNodeParamI(_cam, (int)h3d.H3DCamera.ViewportHeightI);

            float[] ovLogo = new float[] { ww - 0.4f, 0.8f, 0, 1, ww - 0.4f, 1, 0, 0, ww, 1, 1, 0, ww, 0.8f, 1, 1 };
            h3d.showOverlays(ovLogo, 4, 1, 1, 1, 1, _logoMatRes, 0);

            // Render scene
            h3d.render(_cam);//horde3D 1.0

            h3d.finalizeFrame();

            //horde3D 1.0
            h3d.clearOverlays();

            // Write all messages to log file
            Horde3DUtils.dumpMessages();
        }
Exemple #7
0
        public void mainLoop(float fps)
        {
            _curFPS = fps;
            _timer += 1 / fps;

            h3d.setOption(h3d.H3DOptions.WireframeMode, _wireframeMode ? 1.0f : 0.0f);
            h3d.setOption(h3d.H3DOptions.DebugViewMode, _debugViewMode ? 1.0f : 0.0f);

            if (!_freeze)
            {
                _crowdSim.update(_curFPS);
            }

            // Set camera parameters
            h3d.setNodeTransform(_cam, _x, _y, _z, _rx, _ry, 0, 1, 1, 1);

            if (_statMode > 0)
            {
                Horde3DUtils.showFrameStats(_fontMatRes, _panelMatRes, _statMode);
            }

            // Show logo
            float ww = h3d.getNodeParamI(_cam, (int)h3d.H3DCamera.ViewportWidthI) / (float)h3d.getNodeParamI(_cam, (int)h3d.H3DCamera.ViewportHeightI);

            float[] ovLogo = new float[] { ww - 0.4f, 0.8f, 0, 1, ww - 0.4f, 1, 0, 0, ww, 1, 1, 0, ww, 0.8f, 1, 1 };
            h3d.showOverlays(ovLogo, 4, 1, 1, 1, 1, _logoMatRes, 0);

            // Render scene
            h3d.render(_cam);

            // Finish rendering of frame
            h3d.finalizeFrame();

            // Clear Overlays
            h3d.clearOverlays();

            // Write all messages to log file
            Horde3DUtils.dumpMessages();
        }
Exemple #8
0
        public bool init()
        {
            // Initialize engine
            if (!h3d.init())
            {
                Horde3DUtils.dumpMessages();
                return(false);
            }

            // Set options
            h3d.setOption(h3d.H3DOptions.LoadTextures, 1);
            h3d.setOption(h3d.H3DOptions.TexCompression, 0);
            h3d.setOption(h3d.H3DOptions.FastAnimation, 0);
            h3d.setOption(h3d.H3DOptions.MaxAnisotropy, 4);
            h3d.setOption(h3d.H3DOptions.ShadowMapSize, 2048);

            // Add resources
            // added horde3d 1.0
            // Pipelines
            _hdrPipeRes     = h3d.addResource((int)h3d.H3DResTypes.Pipeline, "pipelines/hdr.pipeline.xml", 0);
            _forwardPipeRes = h3d.addResource((int)h3d.H3DResTypes.Pipeline, "pipelines/forward.pipeline.xml", 0);
            // Overlays
            _fontMatRes  = h3d.addResource((int)h3d.H3DResTypes.Material, "overlays/font.material.xml", 0);
            _panelMatRes = h3d.addResource((int)h3d.H3DResTypes.Material, "overlays/panel.material.xml", 0);
            _logoMatRes  = h3d.addResource((int)h3d.H3DResTypes.Material, "overlays/logo.material.xml", 0);
            // Environment
            int envRes = h3d.addResource((int)h3d.H3DResTypes.SceneGraph, "models/sphere/sphere.scene.xml", 0);
            // Knight
            int knightRes      = h3d.addResource((int)h3d.H3DResTypes.SceneGraph, "models/knight/knight.scene.xml", 0);
            int knightAnim1Res = h3d.addResource((int)h3d.H3DResTypes.Animation, "animations/knight_order.anim", 0);
            int knightAnim2Res = h3d.addResource((int)h3d.H3DResTypes.Animation, "animations/knight_attack.anim", 0);
            // Particle system
            int particleSysRes = h3d.addResource((int)h3d.H3DResTypes.SceneGraph, "particles/particleSys1/particleSys1.scene.xml", 0);


            // Load resources
            Horde3DUtils.loadResourcesFromDisk("../Content");


            // horde3d 1.0
            // Add camera
            _cam = h3d.addCameraNode(h3d.H3DRootNode, "Camera", _hdrPipeRes);
            /////////////
            // Add scene nodes
            // Add environment
            int env = h3d.addNodes(h3d.H3DRootNode, envRes);

            h3d.setNodeTransform(env, 0, -20, 0, 0, 0, 0, 20, 20, 20);       //horde3d 1.0

            // Add knight
            _knight = h3d.addNodes(h3d.H3DRootNode, knightRes);
            h3d.setNodeTransform(_knight, 0, 0, 0, 0, 180, 0, 0.1f, 0.1f, 0.1f);
            h3d.setupModelAnimStage(_knight, 0, knightAnim1Res, 0, string.Empty, false);
            h3d.setupModelAnimStage(_knight, 1, knightAnim2Res, 0, string.Empty, false);

            //horde3d 1.0
            // Attach particle system to hand joint
            h3d.findNodes(_knight, "Bip01_R_Hand", (int)h3d.H3DNodeTypes.Joint);
            int hand = h3d.getNodeFindResult(0);

            _particleSys = h3d.addNodes(hand, particleSysRes);
            h3d.setNodeTransform(_particleSys, 0, 40, 0, 90, 0, 0, 1, 1, 1);
            /////////


            // Add light source
            int light = h3d.addLightNode(h3d.H3DRootNode, "Light1", 0, "LIGHTING", "SHADOWMAP");

            h3d.setNodeTransform(light, 0, 1, 15, 30, 0, 0, 1, 1, 1);

            h3d.setNodeTransform(light, 0, 15, 10, -60, 0, 0, 1, 1, 1);
            h3d.setNodeParamF(light, (int)h3d.H3DLight.RadiusF, 0, 30);
            h3d.setNodeParamF(light, (int)h3d.H3DLight.FovF, 0, 90);
            h3d.setNodeParamI(light, (int)h3d.H3DLight.ShadowMapCountI, 1);
            h3d.setNodeParamF(light, (int)h3d.H3DLight.ShadowMapBiasF, 0, 0.01f);
            h3d.setNodeParamF(light, (int)h3d.H3DLight.ColorF3, 0, 1.0f);
            h3d.setNodeParamF(light, (int)h3d.H3DLight.ColorF3, 1, 0.8f);
            h3d.setNodeParamF(light, (int)h3d.H3DLight.ColorF3, 2, 0.7f);
            /////////////

            // Customize post processing effects
            int matRes = h3d.findResource((int)h3d.H3DResTypes.Material, "pipelines/postHDR.material.xml");

            // hdrParams: exposure, brightpass threshold, brightpass offset
            h3d.setMaterialUniform(matRes, "hdrParams", 2.5f, 0.5f, 0.08f, 0);

            _initialized = true;

            return(true);
        }
Exemple #9
0
        public bool init()
        {
            // Initialize engine
            if (!Horde3D.init())
            {
                Horde3DUtils.dumpMessages();
                return(false);
            }

            // Set paths for resources
            Horde3D.setResourcePath(Horde3D.ResourceTypes.SceneGraph, "models");
            Horde3D.setResourcePath(Horde3D.ResourceTypes.Geometry, "models");
            Horde3D.setResourcePath(Horde3D.ResourceTypes.Animation, "models");
            Horde3D.setResourcePath(Horde3D.ResourceTypes.Material, "materials");
            Horde3D.setResourcePath(Horde3D.ResourceTypes.Code, "shaders");
            Horde3D.setResourcePath(Horde3D.ResourceTypes.Shader, "shaders");
            Horde3D.setResourcePath(Horde3D.ResourceTypes.Texture2D, "textures");
            Horde3D.setResourcePath(Horde3D.ResourceTypes.TextureCube, "textures");
            Horde3D.setResourcePath(Horde3D.ResourceTypes.Effect, "effects");

            // Load pipeline configuration
            if (!Horde3D.loadPipelineConfig("pipeline_Knight.xml"))
            {
                Horde3DUtils.dumpMessages();
                return(false);
            }

            // Set options
            Horde3D.setOption(Horde3D.EngineOptions.LoadTextures, 1);
            Horde3D.setOption(Horde3D.EngineOptions.TexCompression, 0);
            Horde3D.setOption(Horde3D.EngineOptions.FastAnimation, 0);
            Horde3D.setOption(Horde3D.EngineOptions.AnisotropyFactor, 8);
            Horde3D.setOption(Horde3D.EngineOptions.ShadowMapSize, 2048);

            // Add resources
            // Font
            _fontMatRes = Horde3D.addResource(Horde3D.ResourceTypes.Material, "font.material.xml", 0);
            // Logo
            _logoMatRes = Horde3D.addResource(Horde3D.ResourceTypes.Material, "logo.material.xml", 0);
            // Environment
            int envRes = Horde3D.addResource(Horde3D.ResourceTypes.SceneGraph, "scene.scene.xml", 0);
            // Knight
            int knightRes      = Horde3D.addResource(Horde3D.ResourceTypes.SceneGraph, "knight.scene.xml", 0);
            int knightAnim1Res = Horde3D.addResource(Horde3D.ResourceTypes.Animation, "knight_order.anim", 0);
            int knightAnim2Res = Horde3D.addResource(Horde3D.ResourceTypes.Animation, "knight_attack.anim", 0);
            // Particle system
            int particleSysRes = Horde3D.addResource(Horde3D.ResourceTypes.SceneGraph, "particleSys1.scene.xml", 0);


            // Load resources
            Horde3DUtils.loadResourcesFromDisk("content");


            // Add scene nodes
            // Add environment
            Horde3D.addNodes(Horde3D.RootNode, envRes);

            // Add knight
            _knight = Horde3D.addNodes(Horde3D.RootNode, knightRes);
            Horde3D.setNodeTransform(_knight, 0, 0, 0, 0, 180, 0, 0.1f, 0.1f, 0.1f);
            Horde3D.setupModelAnimStage(_knight, 0, knightAnim1Res, string.Empty, false);
            Horde3D.setupModelAnimStage(_knight, 1, knightAnim2Res, string.Empty, false);

            // Attach particle system to hand joint
            int hand = Horde3D.getNodeChild(_knight, "Bip01_R_Hand", 0, true);

            _particleSys = Horde3D.addNodes(hand, particleSysRes);
            Horde3D.setNodeTransform(_particleSys, 0, 40, 0, 90, 0, 0, 1, 1, 1);

            // Add light source
            int light = Horde3D.addLightNode(Horde3D.RootNode, "Light1", 0, "LIGHTING", "SHADOWMAP");

            Horde3D.setNodeTransform(light, 0, 1, 15, 30, 0, 0, 1, 1, 1);
            Horde3D.setLightParam(light, Horde3D.LightNodeParams.Radius, 30);
            Horde3D.setLightParam(light, Horde3D.LightNodeParams.FOV, 90);
            Horde3D.setLightParam(light, Horde3D.LightNodeParams.ShadowMapCount, 1);
            Horde3D.setLightParam(light, Horde3D.LightNodeParams.ShadowMapBias, 0.01f);
            Horde3D.setLightParam(light, Horde3D.LightNodeParams.Col_R, 1.0f);
            Horde3D.setLightParam(light, Horde3D.LightNodeParams.Col_G, 0.7f);
            Horde3D.setLightParam(light, Horde3D.LightNodeParams.Col_B, 0.7f);

            // Customize post processing effects
            int matRes = Horde3D.findResource(Horde3D.ResourceTypes.Material, "postHDR.material.xml");

            // hdrParams: exposure, brightpass threshold, brightpass offset
            Horde3D.setMaterialUniform(matRes, "hdrParams", 2.5f, 0.6f, 0.06f, 0);

            _initialized = true;

            return(true);
        }
Exemple #10
0
        public bool Startup()
        {
            DeckProgram.DeckScene.ObjectAdd    += OnObjectAdd;
            DeckProgram.DeckScene.ObjectUpdate += OnObjectUpdate;
            DeckProgram.DeckScene.ObjectRemove += OnObjectRemove;
            DeckProgram.DeckScene.BubbleAdd    += OnBubbleAdd;
            DeckProgram.DeckScene.BubbleRemove += OnBubbleRemove;

            // Initialize engine
            if (!h3d.init())
            {
                Horde3DUtils.dumpMessages();
                return(false);
            }

            // Set options
            h3d.setOption(h3d.H3DOptions.LoadTextures, 1);
            h3d.setOption(h3d.H3DOptions.TexCompression, 0);
            h3d.setOption(h3d.H3DOptions.FastAnimation, 0);
            h3d.setOption(h3d.H3DOptions.MaxAnisotropy, 8);
            h3d.setOption(h3d.H3DOptions.ShadowMapSize, 2048);
            h3d.setOption(h3d.H3DOptions.TrilinearFiltering, 1);
            h3d.setOption(h3d.H3DOptions.SampleCount, 8);

            // Add resources
            HdrPipeHid     = h3d.addResource((int)h3d.H3DResTypes.Pipeline, "pipelines/hdr.pipeline.xml", 0);
            ForwardPipeHid = h3d.addResource((int)h3d.H3DResTypes.Pipeline, "pipelines/forward.pipeline.xml", 0);


            m_fontMaterialHid  = h3d.addResource((int)h3d.H3DResTypes.Material, "overlays/font.material.xml", 0);
            m_panelMaterialHid = h3d.addResource((int)h3d.H3DResTypes.Material, "overlays/panel.material.xml", 0);
            m_logoMaterialHid  = h3d.addResource((int)h3d.H3DResTypes.Material, "overlays/logo.material.xml", 0);
            m_bubbleRes        = h3d.addResource((int)h3d.H3DResTypes.SceneGraph, "models/bubble5/bubble5.scene.xml", 0);
            m_atmosphereRes    = h3d.addResource((int)h3d.H3DResTypes.SceneGraph, "models/whiteatmosphere/whiteatmosphere.scene.xml", 0);

            // Overlays
            m_demo.Initialize();

            // Load resources
            Horde3DUtils.loadResourcesFromDisk("content");

            // Add camera
            CameraHid = h3d.addCameraNode(h3d.H3DRootNode, "CameraHid", ForwardPipeHid);

            // Add light source
            LightHid = h3d.addLightNode(h3d.H3DRootNode, "Light1", 0, "LIGHTING", "SHADOWMAP");
            h3d.setNodeTransform(LightHid, 0, 1, 15, 30, 0, 0, 1, 1, 1);

            h3d.setNodeTransform(LightHid, 0, 15, 10, -60, 0, 0, 1, 1, 1);
            h3d.setNodeParamF(LightHid, (int)h3d.H3DLight.RadiusF, 0, 30);
            h3d.setNodeParamF(LightHid, (int)h3d.H3DLight.FovF, 0, 60);
            h3d.setNodeParamI(LightHid, (int)h3d.H3DLight.ShadowMapCountI, 1);
            h3d.setNodeParamF(LightHid, (int)h3d.H3DLight.ShadowMapBiasF, 0, 0.01f);
            h3d.setNodeParamF(LightHid, (int)h3d.H3DLight.ColorF3, 0, 1.0f);
            h3d.setNodeParamF(LightHid, (int)h3d.H3DLight.ColorF3, 1, 0.8f);
            h3d.setNodeParamF(LightHid, (int)h3d.H3DLight.ColorF3, 2, 0.7f);

            // Customize post processing effects
            int matRes = h3d.findResource((int)h3d.H3DResTypes.Material, "pipelines/postHDR.material.xml");

            // hdrParams: exposure, brightpass threshold, brightpass offset
            h3d.setMaterialUniform(matRes, "hdrParams", 2.5f, 0.5f, 0.08f, 0);

            m_initialized = true;

            //m_atmosphereHid = h3d.addNodes(h3d.H3DRootNode, m_atmosphereRes);
            //h3d.setNodeTransform(m_atmosphereHid, 0, 0, 0, 0, 180, 0, 1000f, 1000f, 1000f);

            return(true);
        }
Exemple #11
0
        public bool init()
        {
            // Initialize engine
            if (!Horde3D.init())
            {
                Horde3DUtils.dumpMessages();
                return(false);
            }

            // Set paths for resources
            Horde3D.setResourcePath(Horde3D.ResourceTypes.SceneGraph, "models");
            Horde3D.setResourcePath(Horde3D.ResourceTypes.Geometry, "models");
            Horde3D.setResourcePath(Horde3D.ResourceTypes.Animation, "models");
            Horde3D.setResourcePath(Horde3D.ResourceTypes.Material, "materials");
            Horde3D.setResourcePath(Horde3D.ResourceTypes.Code, "shaders");
            Horde3D.setResourcePath(Horde3D.ResourceTypes.Shader, "shaders");
            Horde3D.setResourcePath(Horde3D.ResourceTypes.Texture2D, "textures");
            Horde3D.setResourcePath(Horde3D.ResourceTypes.TextureCube, "textures");
            Horde3D.setResourcePath(Horde3D.ResourceTypes.Effect, "effects");

            // Load pipeline configuration
            if (!Horde3D.loadPipelineConfig("pipeline_Chicago.xml"))
            {
                Horde3DUtils.dumpMessages();
                return(false);
            }

            // Set options
            Horde3D.setOption(Horde3D.EngineOptions.LoadTextures, 1);
            Horde3D.setOption(Horde3D.EngineOptions.TexCompression, 0);
            Horde3D.setOption(Horde3D.EngineOptions.AnisotropyFactor, 8);
            Horde3D.setOption(Horde3D.EngineOptions.ShadowMapSize, 2048);
            Horde3D.setOption(Horde3D.EngineOptions.FastAnimation, 0);

            // Add resources
            // Font
            _fontMatRes = Horde3D.addResource(Horde3D.ResourceTypes.Material, "font.material.xml", 0);
            // Logo
            _logoMatRes = Horde3D.addResource(Horde3D.ResourceTypes.Material, "logo.material.xml", 0);
            // Shader for deferred shading
            int lightMatRes = Horde3D.addResource(Horde3D.ResourceTypes.Material, "light.material.xml", 0);
            // Environment
            int envRes = Horde3D.addResource(Horde3D.ResourceTypes.SceneGraph, "scene.scene.xml", 0);

            // Skybox
            //int skyBoxRes = Horde3D.addResource(Horde3D.ResourceTypes.SceneGraph, "skybox.scene.xml", 0);


            // Load resources
            Horde3DUtils.loadResourcesFromDisk("content");


            // Add scene nodes
            // Add environment
            Horde3D.addNodes(Horde3D.RootNode, envRes);
            // Add skybox
            //int sky = Horde3D.addNodes( Horde3D.RootNode, skyBoxRes );
            //Horde3D.setNodeTransform(sky, 0, 0, 0, 0, 0, 0, 210, 50, 210);
            // Add light source
            int light = Horde3D.addLightNode(Horde3D.RootNode, "Light1", lightMatRes, "LIGHTING", "SHADOWMAP");

            Horde3D.setNodeTransform(light, 0, 25, -25, -120, 0, 0, 1, 1, 1);
            Horde3D.setLightParam(light, Horde3D.LightNodeParams.Radius, 100);
            Horde3D.setLightParam(light, Horde3D.LightNodeParams.FOV, 90);
            Horde3D.setLightParam(light, Horde3D.LightNodeParams.ShadowMapCount, 3);
            Horde3D.setLightParam(light, Horde3D.LightNodeParams.ShadowSplitLambda, 0.95f);
            Horde3D.setLightParam(light, Horde3D.LightNodeParams.Col_R, 0.98f);
            Horde3D.setLightParam(light, Horde3D.LightNodeParams.Col_G, 0.6f);
            Horde3D.setLightParam(light, Horde3D.LightNodeParams.Col_B, 0.5f);

            // Add light source
            light = Horde3D.addLightNode(Horde3D.RootNode, "Light2", lightMatRes, "LIGHTING", "SHADOWMAP");
            Horde3D.setNodeTransform(light, 0, 25, 30, -60, 0, 0, 1, 1, 1);
            Horde3D.setLightParam(light, Horde3D.LightNodeParams.Radius, 50);
            Horde3D.setLightParam(light, Horde3D.LightNodeParams.FOV, 90);
            Horde3D.setLightParam(light, Horde3D.LightNodeParams.ShadowMapCount, 3);
            Horde3D.setLightParam(light, Horde3D.LightNodeParams.ShadowSplitLambda, 0.95f);
            Horde3D.setLightParam(light, Horde3D.LightNodeParams.Col_R, 0.5f);
            Horde3D.setLightParam(light, Horde3D.LightNodeParams.Col_G, 0.6f);
            Horde3D.setLightParam(light, Horde3D.LightNodeParams.Col_B, 0.98f);

            _crowdSim = new CrowdSim();
            _crowdSim.init();

            _initialized = true;

            return(true);
        }
Exemple #12
0
        public bool init()
        {
            // Initialize engine
            if (!h3d.init(h3d.H3DRenderDevice.OpenGL4))
            {
                Horde3DUtils.dumpMessages();
                return(false);
            }

            // Set options
            h3d.setOption(h3d.H3DOptions.LoadTextures, 1);
            h3d.setOption(h3d.H3DOptions.TexCompression, 0);
            h3d.setOption(h3d.H3DOptions.MaxAnisotropy, 4);
            h3d.setOption(h3d.H3DOptions.ShadowMapSize, 2048);
            h3d.setOption(h3d.H3DOptions.FastAnimation, 1);

            // Add resources
            // Pipelines
            _forwardPipeRes  = h3d.addResource((int)h3d.H3DResTypes.Pipeline, "pipelines/forward.pipeline.xml", 0);
            _deferredPipeRes = h3d.addResource((int)h3d.H3DResTypes.Pipeline, "pipelines/deferred.pipeline.xml", 0);
            // Overlays
            _fontMatRes  = h3d.addResource((int)h3d.H3DResTypes.Material, "overlays/font.material.xml", 0);
            _panelMatRes = h3d.addResource((int)h3d.H3DResTypes.Material, "overlays/panel.material.xml", 0);
            _logoMatRes  = h3d.addResource((int)h3d.H3DResTypes.Material, "overlays/logo.material.xml", 0);
            // Shader for deferred shading
            int lightMatRes = h3d.addResource((int)h3d.H3DResTypes.Material, "materials/light.material.xml", 0);
            // Environment
            int envRes = h3d.addResource((int)h3d.H3DResTypes.SceneGraph, "models/platform/platform.scene.xml", 0);
            // Skybox
            int skyBoxRes = h3d.addResource((int)h3d.H3DResTypes.SceneGraph, "models/skybox/skybox.scene.xml", 0);


            // Load resources
            Horde3DUtils.loadResourcesFromDisk("../Content");


            // Add scene nodes
            // Add camera
            _cam = h3d.addCameraNode(h3d.H3DRootNode, "Camera", _forwardPipeRes);
            // Add environment
            int env = h3d.addNodes(h3d.H3DRootNode, envRes);

            h3d.setNodeTransform(env, 0, 0, 0, 0, 0, 0, 0.23f, 0.23f, 0.23f);
            // Add skybox
            int sky = h3d.addNodes(h3d.H3DRootNode, skyBoxRes);

            h3d.setNodeTransform(sky, 0, 0, 0, 0, 0, 0, 210, 50, 210);
            // Add light source

            int light = h3d.addLightNode(h3d.H3DRootNode, "Light1", lightMatRes, "LIGHTING", "SHADOWMAP");

            h3d.setNodeTransform(light, 0, 20, 50, -30, 0, 0, 1, 1, 1);
            h3d.setNodeParamF(light, (int)h3d.H3DLight.RadiusF, 0, 200);
            h3d.setNodeParamF(light, (int)h3d.H3DLight.FovF, 0, 90);
            h3d.setNodeParamI(light, (int)h3d.H3DLight.ShadowMapCountI, 3);
            h3d.setNodeParamF(light, (int)h3d.H3DLight.ShadowSplitLambdaF, 0, 0.9f);
            h3d.setNodeParamF(light, (int)h3d.H3DLight.ShadowMapBiasF, 0, 0.001f);
            h3d.setNodeParamF(light, (int)h3d.H3DLight.ColorF3, 0, 0.9f);
            h3d.setNodeParamF(light, (int)h3d.H3DLight.ColorF3, 1, 0.7f);
            h3d.setNodeParamF(light, (int)h3d.H3DLight.ColorF3, 2, 0.75f);

            _crowdSim = new CrowdSim();
            _crowdSim.init();

            _initialized = true;

            return(true);
        }
Exemple #13
0
        public bool init()
        {
            // Initialize engine
            if (!h3d.init(h3d.H3DRenderDevice.OpenGL4))
            {
                Horde3DUtils.dumpMessages();
                return(false);
            }

            if (h3d.getDeviceCapabilities(h3d.H3DDeviceCapabilities.GeometryShaders) == 0 ||
                h3d.getDeviceCapabilities(h3d.H3DDeviceCapabilities.TessellationShaders) == 0)
            {
                return(false);
            }

            // Set options
            h3d.setOption(h3d.H3DOptions.LoadTextures, 1);
            h3d.setOption(h3d.H3DOptions.TexCompression, 0);
            h3d.setOption(h3d.H3DOptions.FastAnimation, 0);
            h3d.setOption(h3d.H3DOptions.MaxAnisotropy, 4);
            h3d.setOption(h3d.H3DOptions.ShadowMapSize, 2048);

            // Add resources
            // added horde3d 1.0
            // Pipelines
            _hdrPipeRes     = h3d.addResource((int)h3d.H3DResTypes.Pipeline, "pipelines/hdr.pipeline.xml", 0);
            _forwardPipeRes = h3d.addResource((int)h3d.H3DResTypes.Pipeline, "pipelines/forward.pipeline.xml", 0);
            // Overlays
            _fontMatRes  = h3d.addResource((int)h3d.H3DResTypes.Material, "overlays/font.material.xml", 0);
            _panelMatRes = h3d.addResource((int)h3d.H3DResTypes.Material, "overlays/panel.material.xml", 0);
            _logoMatRes  = h3d.addResource((int)h3d.H3DResTypes.Material, "overlays/logo.material.xml", 0);

            int lightMatRes = h3d.addResource(( int )h3d.H3DResTypes.Material, "materials/light.material.xml", 0);

            bool result = createIcosahedron();

            if (!result)
            {
                return(false);
            }

            // Load resources
            Horde3DUtils.loadResourcesFromDisk("../Content");


            // horde3d 1.0
            // Add camera
            _cam = h3d.addCameraNode(h3d.H3DRootNode, "Camera", _forwardPipeRes);
            /////////////

            // Create model and mesh
            int geo = h3d.findResource((int)h3d.H3DResTypes.Geometry, "icosa");
            int mat = h3d.findResource(( int )h3d.H3DResTypes.Material, "material");

            int indices  = h3d.getResParamI(geo, (int)h3d.H3DGeoRes.GeometryElem, 0, (int)h3d.H3DGeoRes.GeoIndexCountI);
            int vertices = h3d.getResParamI(geo, (int)h3d.H3DGeoRes.GeometryElem, 0, (int)h3d.H3DGeoRes.GeoVertexCountI);

            _model = h3d.addModelNode(h3d.H3DRootNode, "model", geo);
            int mesh = h3d.addMeshNode(_model, "icosahedron", mat, 0, indices, 0, vertices - 1);

            h3d.setNodeTransform(mesh, 0, 0, 0, 0, 0, 0, 20, 20, 20);
            h3d.setNodeParamI(mesh, ( int)h3d.H3DMesh.TessellatableI, 1);        // Set mesh to use tessellation

            // Add light source
            int light = h3d.addLightNode(h3d.H3DRootNode, "Light1", lightMatRes, "LIGHTING", "SHADOWMAP");

            h3d.setNodeTransform(light, 125, 25, 85, -10, 55, 0, 1, 1, 1);
            h3d.setNodeParamF(light, ( int )h3d.H3DLight.RadiusF, 0, 1000);
            h3d.setNodeParamF(light, ( int )h3d.H3DLight.FovF, 0, 75);
            h3d.setNodeParamI(light, ( int )h3d.H3DLight.ShadowMapCountI, 3);
            h3d.setNodeParamF(light, ( int )h3d.H3DLight.ShadowSplitLambdaF, 0, 0.9f);
            h3d.setNodeParamF(light, ( int )h3d.H3DLight.ShadowMapBiasF, 0, 0.001f);
            h3d.setNodeParamF(light, ( int )h3d.H3DLight.ColorF3, 0, 0.9f);
            h3d.setNodeParamF(light, ( int )h3d.H3DLight.ColorF3, 1, 0.7f);
            h3d.setNodeParamF(light, ( int )h3d.H3DLight.ColorF3, 2, 0.75f);
            h3d.setNodeParamF(light, ( int )h3d.H3DLight.ColorMultiplierF, 0, 1.0f);

            _initialized = true;

            return(true);
        }
Exemple #14
0
        public bool init()
        {
            // Initialize engine
            if (!h3d.init(h3d.H3DRenderDevice.OpenGL4))
            {
                Horde3DUtils.dumpMessages();
                return(false);
            }

            if (h3d.getDeviceCapabilities(h3d.H3DDeviceCapabilities.GeometryShaders) == 0 ||
                h3d.getDeviceCapabilities(h3d.H3DDeviceCapabilities.ComputeShaders) == 0)
            {
                return(false);
            }

            // Set options
            h3d.setOption(h3d.H3DOptions.LoadTextures, 1);
            h3d.setOption(h3d.H3DOptions.TexCompression, 0);
            h3d.setOption(h3d.H3DOptions.FastAnimation, 0);
            h3d.setOption(h3d.H3DOptions.MaxAnisotropy, 4);
            h3d.setOption(h3d.H3DOptions.ShadowMapSize, 2048);

            // Add resources
            // added horde3d 1.0
            // Pipelines
            _hdrPipeRes     = h3d.addResource((int)h3d.H3DResTypes.Pipeline, "pipelines/hdr.pipeline.xml", 0);
            _forwardPipeRes = h3d.addResource((int)h3d.H3DResTypes.Pipeline, "pipelines/forward.pipeline.xml", 0);
            // Overlays
            _fontMatRes  = h3d.addResource((int)h3d.H3DResTypes.Material, "overlays/font.material.xml", 0);
            _panelMatRes = h3d.addResource((int)h3d.H3DResTypes.Material, "overlays/panel.material.xml", 0);
            _logoMatRes  = h3d.addResource((int)h3d.H3DResTypes.Material, "overlays/logo.material.xml", 0);

            // Shader that contains geometry and compute shaders for particles
            _computeMatRes = h3d.addResource((int)h3d.H3DResTypes.Material, "materials/compute.material.xml", 0);
            int computeDrawMatRes = h3d.addResource((int)h3d.H3DResTypes.Material, "materials/computeDraw.material.xml", 0);

            // 2. Specify compute buffer parameters

            // Create compute buffer
            int compBuf = h3d.addResource((int)h3d.H3DResTypes.ComputeBuffer, "CompBuf", 0);

            // Generate random position data for particles
            int particlesCount = 1000000;

            ParticleData[] particles = new ParticleData[particlesCount];

            float maxDiapason10  = 10.0f;
            float minDiapason10  = -10.0f;
            float maxDiapason3   = 3.0f;
            float minDiapason3   = -3.0f;
            float maxDiapason30  = 30.0f;
            float minDiapason30  = -30.0f;
            float maxDiapason100 = 100.0f;
            float minDiapason100 = -100.0f;

            Random rand = new Random((int)DateTime.Now.Ticks);
            float  x, y, z = 0;
            float  tmpVal = 0;
            float  angle  = 0;

            for (int i = 0; i < particlesCount; i++)
            {
                ParticleData data = new ParticleData();

                data.position = new vec4();

                // Set random position
                x = (maxDiapason10 + 1 - minDiapason10) * (float)rand.NextDouble() + minDiapason10;
                y = (maxDiapason3 + 1 - minDiapason3) * (float)rand.NextDouble() + minDiapason3;
                z = (maxDiapason30 + 1 - minDiapason30) * (float)rand.NextDouble() + minDiapason30;

                normalize(ref x, ref y, ref z);

                tmpVal = (maxDiapason100 + 1 - minDiapason100) * (float)rand.NextDouble() + minDiapason100;

                data.position.x = x * tmpVal;
                data.position.y = y * tmpVal;
                data.position.z = z * tmpVal;

                angle = -(float)Math.Atan2(x, z);

                data.velocity   = new vec4();
                data.velocity.x = (float)Math.Cos(angle);
                data.velocity.y = 0;
                data.velocity.z = ( float )Math.Sin(angle) * 5.0f;

                particles[i] = data;
            }

            // Set size of the compute buffer
            h3d.setResParamI(compBuf, (int)h3d.H3DComputeBufRes.ComputeBufElem, 0, (int)h3d.H3DComputeBufRes.CompBufDataSizeI, particlesCount * 32);

            // Mark that compute buffer will be used for rendering as a vertex buffer
            h3d.setResParamI(compBuf, (int)h3d.H3DComputeBufRes.ComputeBufElem, 0, (int)h3d.H3DComputeBufRes.CompBufDrawableI, 1);

            // Set vertex binding parameters.
            // Name - name of the parameter. Used for binding parameter to shader variable.
            // Size - number of components (4 float for particle position, so 4),
            // Offset - number of bytes. For second parameter it is 16, because the first parameter had 4 floats (16 bytes)
            h3d.setResParamStr(compBuf, (int)h3d.H3DComputeBufRes.DrawParamsElem, 0, (int)h3d.H3DComputeBufRes.DrawParamsNameStr, "partPosition");
            h3d.setResParamI(compBuf, (int)h3d.H3DComputeBufRes.DrawParamsElem, 0, (int)h3d.H3DComputeBufRes.DrawParamsSizeI, /*3*/ 4);
            h3d.setResParamI(compBuf, (int)h3d.H3DComputeBufRes.DrawParamsElem, 0, (int)h3d.H3DComputeBufRes.DrawParamsOffsetI, 0);
            h3d.setResParamStr(compBuf, (int)h3d.H3DComputeBufRes.DrawParamsElem, 1, (int)h3d.H3DComputeBufRes.DrawParamsNameStr, "partVelocity");
            h3d.setResParamI(compBuf, (int)h3d.H3DComputeBufRes.DrawParamsElem, 1, (int)h3d.H3DComputeBufRes.DrawParamsSizeI, /*3*/ 4);
            h3d.setResParamI(compBuf, (int)h3d.H3DComputeBufRes.DrawParamsElem, 1, (int)h3d.H3DComputeBufRes.DrawParamsOffsetI, /*12*/ 16);

            // Fill compute buffer with generated data
            IntPtr dataPtr = h3d.mapResStream(compBuf, (int)h3d.H3DComputeBufRes.ComputeBufElem, 0, 0, false, true);

            // Some unsafe magic to copy array to c pointer
            unsafe
            {
                GCHandle handle = GCHandle.Alloc(particles, GCHandleType.Pinned);
                try
                {
                    IntPtr pointer = handle.AddrOfPinnedObject();
                    memcpy(dataPtr, pointer, particlesCount * 32);
                }
                finally
                {
                    if (handle.IsAllocated)
                    {
                        handle.Free();
                    }
                }
            }

            h3d.unmapResStream(compBuf);

            // Load resources
            Horde3DUtils.loadResourcesFromDisk("../Content");


            // horde3d 1.0
            // Add camera
            _cam = h3d.addCameraNode(h3d.H3DRootNode, "Camera", _forwardPipeRes);
            /////////////
            // Add scene nodes
            // In order to draw the results of compute buffer we need a compute node
            _compNode = h3d.addComputeNode(h3d.H3DRootNode, "Vortex", computeDrawMatRes, compBuf, 2, particlesCount);

            // Set node AABB size because currently there is no way to do it otherwise
            h3d.setNodeParamF(_compNode, (int)h3d.H3DComputeNode.AABBMinF, 0, -30.0f); // x
            h3d.setNodeParamF(_compNode, (int)h3d.H3DComputeNode.AABBMinF, 1, -30.0f); // y
            h3d.setNodeParamF(_compNode, (int)h3d.H3DComputeNode.AABBMinF, 2, -30.0f); // z
            h3d.setNodeParamF(_compNode, (int)h3d.H3DComputeNode.AABBMaxF, 0, 30.0f);  // x
            h3d.setNodeParamF(_compNode, (int)h3d.H3DComputeNode.AABBMaxF, 1, 30.0f);  // y
            h3d.setNodeParamF(_compNode, (int)h3d.H3DComputeNode.AABBMaxF, 2, 30.0f);  // z

            // Set material uniforms that will not be changed during runtime
            h3d.setMaterialUniform(_computeMatRes, "totalParticles", ( float )particlesCount, 0, 0, 0);

            // Calculate number of groups for compute shader
            int    numGroups = (particlesCount % 1024 != 0) ? ((particlesCount / 1024) + 1) : (particlesCount / 1024);
            double root      = Math.Pow(( double )numGroups, ( double )(1.0 / 2.0));

            root           = Math.Ceiling(root);
            _computeGroupX = _computeGroupY = ( int )root;


            _initialized = true;

            return(true);
        }