Exemplo n.º 1
0
        void DrawHemiCubeTextures(AAFace radSourceFace, SatComponent radSource)
        {
            // Set camera position on radition source face
            Vector3 Position = radSource.GetFaceCenter(radSourceFace);
            // Get List of camera orientations
            List <AAFace> CameraDirections = HemiCube.GetFaceList(radSourceFace);

            for (int i = 0; i < CameraDirections.Count; i++)
            {
                // Orient camera
                Vector3 CameraPointingTarget = radSource.GetFaceDirection(Position, CameraDirections[i]);
                CamHemiCube.SetPositionTarget(Position, CameraPointingTarget, true);

                // Prepare rendertarget
                GraphicsDevice.SetRenderTarget(HemiCube.RTIndividual[i]);
                GraphicsDevice.Clear(Color.Black);

                // Render complete model without source
                if (Settings.f_DrawCompleteModel)
                {
                    Model.DrawCompleteModel(CamHemiCube, false, Color.White);
                }
                // Render only currently active radiation source (single face)
                else
                {
                    // Draw black bounding boxes for complete model
                    Model.DrawCompleteModel(CamHemiCube, true, Color.Black);
                    // Draw single bounding box face
                    //Model.Components[RadTargetIdx].DrawBoundingBoxFace(CamHemiCube, radTargetFace, Color.White);
                    Model.Components[RadTargetIdx].DrawMesh(CamHemiCube, Color.White);
                }
            }
        }
Exemplo n.º 2
0
        protected override void Draw(GameTime gameTime)
        {
            AAFace SourceFace = FaceList[RadSourceFaceIdx];

            #region free view

            if (!Settings.f_ComputationRunning)
            {
                GraphicsDevice.SetRenderTarget(RTFree);
                GraphicsDevice.Clear(Color.White);
                Model.DrawCompleteModel(CamFree, false, Color.Black, -1, true);
                Model.Components[RadSourceIdx].DrawBoundingBoxFace(CamFree, SourceFace, Color.Firebrick);
                Model.Components[RadTargetIdx].DrawMesh(CamFree, Color.Green);
                // Draw pointer
                if (Settings.f_DrawPointer)
                {
                    Vector3 CamPosition = Model.Components[RadSourceIdx].GetFaceCenter(SourceFace);
                    DrawModel(CamFree, Pointer, CamPosition);
                    foreach (AAFace face in HemiCube.GetFaceList(SourceFace))
                    {
                        DrawModel(CamFree, Pointer, Model.Components[RadSourceIdx].GetFaceDirection(CamPosition, face));
                    }
                }
            }

            #endregion

            #region verification

            if (f_StartVerification)
            {
                CamHemiCube.TranslateZ(v_StepNum * v_DistStep);
            }

            #endregion

            #region hemicube view

            // Generate HemiCube textures
            DrawHemiCubeTextures(SourceFace, Model.Components[RadSourceIdx]);
            MergeHemiCubeTextures();

            // Apply transfer map
            GraphicsDevice.SetRenderTarget(RTViewFactor);
            GraphicsDevice.Clear(Color.White);
            ApplyMultiplierMap();

            #endregion

            #region rendertargets

            // Draw rendertargets
            GraphicsDevice.SetRenderTarget(null);
            GraphicsDevice.Clear(Color.White);
            SBatch.Begin();

            // Free view
            if (!Settings.f_ComputationRunning)
            {
                SBatch.Draw(RTFree, RTFree.Bounds, Color.White);
            }

            // View factor map
            Vector2 Position = new Vector2(RTFree.Bounds.Width, 0);
            SBatch.Draw(RTViewFactor, Position, Color.White);

            // Multiplier texture
            if (Settings.f_DrawMultiplierMap)
            {
                SBatch.Draw(HemiCube.MultiplierMap, Position, Color.White);
            }

            // FPS counter
            string Text = TimerMaxFPS + " fps";
            Position = Settings.D_FontPadding * Vector2.One;
            SBatch.DrawString(Font, Text, Position, Color.Black);

            SBatch.End();

            #endregion

            if (Settings.f_ComputeArea)
            {
                ComputeViewFactor();
            }

            base.Draw(gameTime);
        }