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); } } }
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); }