Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / wpf / src / Core / CSharp / System / Windows / Media3D / Camera.cs / 1 / Camera.cs
//---------------------------------------------------------------------------- // //// Copyright (C) Microsoft Corporation. All rights reserved. // // //--------------------------------------------------------------------------- using System; using System.Diagnostics; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Media.Composition; namespace System.Windows.Media.Media3D { ////// The Camera is the mechanism by which a 3D model is projected onto /// a 2D visual. The Camera itself is an abstract base class. /// public abstract partial class Camera : Animatable { //----------------------------------------------------- // // Constructors // //----------------------------------------------------- // Prevent 3rd parties from extending this abstract base class. internal Camera() {} //------------------------------------------------------ // // Public Methods // //----------------------------------------------------- //------------------------------------------------------ // // Public Properties // //------------------------------------------------------ //----------------------------------------------------- // // Public Events // //------------------------------------------------------ //----------------------------------------------------- // // Internal Methods // //----------------------------------------------------- #region Internal Methods // Creates a ray by projecting the given point on the viewport into the scene. // Used for bridging 2D -> 3D hit testing. // // The latter two parameters in this method are used to deal with the // case where the camera's near plane is far away from the viewport // contents. In these cases, we can sometimes construct a new, closer, // near plane and start the ray on that plane. To do this, we need an // axis-aligned bounding box of the viewport's contents (boundingRect). // We also need to return the distance between the original an new near // planes (distanceAdjustment), so we can correct the hit-test // distances before handing them back to the user. For more // information, see WindowsOS Bug #1329733. // internal abstract RayHitTestParameters RayFromViewportPoint(Point point, Size viewSize, Rect3D boundingRect, out double distanceAdjustment); internal abstract Matrix3D GetViewMatrix(); internal abstract Matrix3D GetProjectionMatrix(double aspectRatio); internal static void PrependInverseTransform(Transform3D transform, ref Matrix3D viewMatrix) { if (transform != null && transform != Transform3D.Identity) { PrependInverseTransform(transform.Value, ref viewMatrix); } } // Helper method to prepend the inverse of Camera.Transform to the // the given viewMatrix. This is used by the various GetViewMatrix() // and RayFromViewportPoint implementations. // // Transforming the camera is equivalent to applying the inverse // transform to the scene. We invert the transform and prepend it to // the result of viewMatrix: // // -1 // viewMatrix = Camera.Transform x viewMatrix // // If the matrix is non-invertable we set the viewMatrix to NaNs which // will result in nothing being rendered. This is the correct behavior // since the near and far planes will have collapsed onto each other. internal static void PrependInverseTransform(Matrix3D matrix, ref Matrix3D viewMatrix) { if (!matrix.InvertCore()) { // If the matrix is non-invertable we return a NaN matrix. viewMatrix = new Matrix3D( double.NaN, double.NaN, double.NaN, double.NaN, double.NaN, double.NaN, double.NaN, double.NaN, double.NaN, double.NaN, double.NaN, double.NaN, double.NaN, double.NaN, double.NaN, double.NaN); } else { viewMatrix.Prepend(matrix); } } #endregion Internal Methods //----------------------------------------------------- // // Internal Properties // //------------------------------------------------------ #region Internal Properties #endregion Internal Properties //----------------------------------------------------- // // Private Fields // //------------------------------------------------------ #region Private Fields #endregion Private Fields } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. //---------------------------------------------------------------------------- // //// Copyright (C) Microsoft Corporation. All rights reserved. // // //--------------------------------------------------------------------------- using System; using System.Diagnostics; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Media.Composition; namespace System.Windows.Media.Media3D { ////// The Camera is the mechanism by which a 3D model is projected onto /// a 2D visual. The Camera itself is an abstract base class. /// public abstract partial class Camera : Animatable { //----------------------------------------------------- // // Constructors // //----------------------------------------------------- // Prevent 3rd parties from extending this abstract base class. internal Camera() {} //------------------------------------------------------ // // Public Methods // //----------------------------------------------------- //------------------------------------------------------ // // Public Properties // //------------------------------------------------------ //----------------------------------------------------- // // Public Events // //------------------------------------------------------ //----------------------------------------------------- // // Internal Methods // //----------------------------------------------------- #region Internal Methods // Creates a ray by projecting the given point on the viewport into the scene. // Used for bridging 2D -> 3D hit testing. // // The latter two parameters in this method are used to deal with the // case where the camera's near plane is far away from the viewport // contents. In these cases, we can sometimes construct a new, closer, // near plane and start the ray on that plane. To do this, we need an // axis-aligned bounding box of the viewport's contents (boundingRect). // We also need to return the distance between the original an new near // planes (distanceAdjustment), so we can correct the hit-test // distances before handing them back to the user. For more // information, see WindowsOS Bug #1329733. // internal abstract RayHitTestParameters RayFromViewportPoint(Point point, Size viewSize, Rect3D boundingRect, out double distanceAdjustment); internal abstract Matrix3D GetViewMatrix(); internal abstract Matrix3D GetProjectionMatrix(double aspectRatio); internal static void PrependInverseTransform(Transform3D transform, ref Matrix3D viewMatrix) { if (transform != null && transform != Transform3D.Identity) { PrependInverseTransform(transform.Value, ref viewMatrix); } } // Helper method to prepend the inverse of Camera.Transform to the // the given viewMatrix. This is used by the various GetViewMatrix() // and RayFromViewportPoint implementations. // // Transforming the camera is equivalent to applying the inverse // transform to the scene. We invert the transform and prepend it to // the result of viewMatrix: // // -1 // viewMatrix = Camera.Transform x viewMatrix // // If the matrix is non-invertable we set the viewMatrix to NaNs which // will result in nothing being rendered. This is the correct behavior // since the near and far planes will have collapsed onto each other. internal static void PrependInverseTransform(Matrix3D matrix, ref Matrix3D viewMatrix) { if (!matrix.InvertCore()) { // If the matrix is non-invertable we return a NaN matrix. viewMatrix = new Matrix3D( double.NaN, double.NaN, double.NaN, double.NaN, double.NaN, double.NaN, double.NaN, double.NaN, double.NaN, double.NaN, double.NaN, double.NaN, double.NaN, double.NaN, double.NaN, double.NaN); } else { viewMatrix.Prepend(matrix); } } #endregion Internal Methods //----------------------------------------------------- // // Internal Properties // //------------------------------------------------------ #region Internal Properties #endregion Internal Properties //----------------------------------------------------- // // Private Fields // //------------------------------------------------------ #region Private Fields #endregion Private Fields } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ElementFactory.cs
- RenderDataDrawingContext.cs
- ProbeDuplex11AsyncResult.cs
- DataObjectMethodAttribute.cs
- HwndKeyboardInputProvider.cs
- IdentitySection.cs
- SizeConverter.cs
- InfoCardRSAOAEPKeyExchangeDeformatter.cs
- SynchronizationContext.cs
- ConfigurationException.cs
- _SpnDictionary.cs
- ComboBox.cs
- ApplicationHost.cs
- LostFocusEventManager.cs
- SpeakCompletedEventArgs.cs
- SecurityException.cs
- TabControlCancelEvent.cs
- StylusPlugInCollection.cs
- validationstate.cs
- COAUTHINFO.cs
- GeometryModel3D.cs
- AdapterDictionary.cs
- DataGridViewAutoSizeModeEventArgs.cs
- UrlPropertyAttribute.cs
- WebEvents.cs
- SafeBitVector32.cs
- DesignerView.xaml.cs
- WebResponse.cs
- NameSpaceEvent.cs
- WindowsTreeView.cs
- WindowsFormsDesignerOptionService.cs
- ColorConverter.cs
- SiteMapHierarchicalDataSourceView.cs
- Grant.cs
- HttpListenerPrefixCollection.cs
- NamedPipeHostedTransportConfiguration.cs
- PatternMatchRules.cs
- SqlFacetAttribute.cs
- CatalogPartCollection.cs
- DeviceSpecificDialogCachedState.cs
- AssemblyBuilder.cs
- OleDbInfoMessageEvent.cs
- DoubleLink.cs
- TaskHelper.cs
- BamlResourceDeserializer.cs
- ExpressionDumper.cs
- ImageListDesigner.cs
- CompilerErrorCollection.cs
- TraceEventCache.cs
- ByteAnimationUsingKeyFrames.cs
- UnsafeNetInfoNativeMethods.cs
- ForwardPositionQuery.cs
- MailMessageEventArgs.cs
- PeerNameResolver.cs
- infer.cs
- InputGestureCollection.cs
- AsyncResult.cs
- NamedPermissionSet.cs
- FixUp.cs
- ImageMap.cs
- OleDbException.cs
- DataTable.cs
- DataGridViewDataErrorEventArgs.cs
- XmlSchemaSimpleContentExtension.cs
- InfoCardPolicy.cs
- Scripts.cs
- StrokeCollection.cs
- ProcessThread.cs
- DataGridViewDesigner.cs
- HtmlImage.cs
- TemplateBamlTreeBuilder.cs
- ManipulationCompletedEventArgs.cs
- VectorAnimationBase.cs
- SubMenuStyleCollection.cs
- CacheSection.cs
- SqlNodeTypeOperators.cs
- ErrorRuntimeConfig.cs
- GridPattern.cs
- DBPropSet.cs
- CompositeTypefaceMetrics.cs
- CalendarDataBindingHandler.cs
- URIFormatException.cs
- PropertyChangedEventManager.cs
- TypeForwardedToAttribute.cs
- AttachInfo.cs
- XmlSecureResolver.cs
- SqlFunctionAttribute.cs
- PixelFormat.cs
- DateTimeUtil.cs
- Guid.cs
- Component.cs
- MappingItemCollection.cs
- TextEvent.cs
- SimpleLine.cs
- CodeArgumentReferenceExpression.cs
- WorkflowMarkupElementEventArgs.cs
- DiscreteKeyFrames.cs
- WindowsUpDown.cs
- WebPart.cs
- InProcStateClientManager.cs