public void SetPositionDirection(Vector3 NewPosition, Vector3 Direction, Vector3 Axis, bool IsOrthogonal) { RenderCamera.Position = NewPosition; if (IsOrthogonal) { RenderCamera.GenerateOrthogonalViewMatrix(RenderCamera.Position, RenderCamera.Position + Direction, Axis); } else { RenderCamera.GenerateLookAtViewMatrix(RenderCamera.Position, RenderCamera.Position + Direction, Axis); } }
private void RenderCubeMap(GraphicsDevice Graphics, Vector3 Position) { List <Geometry3D> RenderTargetGeometries = SceneNode.GetAllGeometries(Position); for (int i = 0; i < CubeDirections.Length; i++) { Graphics.SetRenderTarget(RenderTarget); Graphics.DepthStencilState = DepthStencilState.Default; RenderCamera.GenerateLookAtViewMatrix(RenderCamera.Position, RenderCamera.Position + CubeDirections[i], CubeUpVectors[i]); Matrix CameraProjection = RenderCamera.ProjectionMatrix; Matrix CameraView = RenderCamera.ViewMatrix; Graphics.Clear(Color.CornflowerBlue); for (int j = 0; j < RenderTargetGeometries.Count; j++) { Geometry3D Geom = RenderTargetGeometries[j]; Effect Shader = Geom.Shader; if (Geom.HasCull) { continue; } if (Shader.GetType() == typeof(BasicEffect)) { BasicEffect CastShader = (BasicEffect)Shader; CastShader.Projection = CameraProjection; CastShader.View = CameraView; CastShader.World = Matrix.CreateTranslation(Geom.Position); } else { Geom.Shader.Parameters["WorldViewProjection"].SetValue(CameraView * CameraProjection); } foreach (var pass in Shader.CurrentTechnique.Passes) { pass.Apply(); Graphics.SetVertexBuffer(Geom.VertexBuffer); Graphics.DrawPrimitives(PrimitiveType.TriangleList, 0, Geom.VertexBuffer.VertexCount / 3); } } Graphics.SetRenderTarget(null); Color[] Data = new Color[RenderTarget.Width * RenderTarget.Height]; RenderTarget.GetData(Data); CubeMap.SetData(CubeFaces[i], Data); } HasRendered = true; }