.NET Framework 类库
Viewport3D 类

更新:2007 年 11 月

为三维可视内容提供呈现图面。

命名空间:  System.Windows.Controls
程序集:  PresentationFramework(在 PresentationFramework.dll 中)
用于 XAML 的 XMLNS:http://schemas.microsoft.com/winfx/xaml/presentation

 语法
Visual Basic(声明)
<LocalizabilityAttribute(LocalizationCategory.NeverLocalize)> _
<ContentPropertyAttribute("Children")> _
Public Class Viewport3D _
Inherits FrameworkElement _
Implements IAddChild

Visual Basic (用法)
Dim instance As Viewport3D

C#
[LocalizabilityAttribute(LocalizationCategory.NeverLocalize)]
[ContentPropertyAttribute("Children")]
public class Viewport3D : FrameworkElement, IAddChild

Visual C++
[LocalizabilityAttribute(LocalizationCategory::NeverLocalize)]
[ContentPropertyAttribute(L"Children")]
public ref class Viewport3D : public FrameworkElement,
IAddChild

J#
/** @attribute LocalizabilityAttribute(LocalizationCategory.NeverLocalize) */
/** @attribute ContentPropertyAttribute("Children") */
public class Viewport3D extends FrameworkElement implements IAddChild

JScript
public class Viewport3D extends FrameworkElement implements IAddChild

XAML 对象元素用法
<Viewport3D>
Children
</Viewport3D>

 备注

此控件显示三维内容,同时提供与二维布局(如剪辑、高度和宽度及鼠标事件)一致的属性。

当此控件作为布局元素(如 Canvas)的内容包含时,可通过设置其 Height 和 Width 属性(继承自 FrameworkElement)来指定 Viewport3D 的大小。

Viewport3D 可提供三维场景级别的命中测试。 调用 HitTest 方法可返回有关命中可视对象、模型、网格和交点的详细命中结果信息。

在 Microsoft Windows XP 上,如果显示颜色质量没有设置为 32 位或 16 位,则 Viewport3D 可能无法正常呈现。

 示例

本示例演示如何创建类似于已旋转的平板纸的三维对象。利用 Viewport3D 以及下面的组件创建这一简单的三维场景:

  • 使用 PerspectiveCamera 创建一个照相机。该照相机指定三维场景的哪个部分是可见的。

  • 创建一个网格,以使用 GeometryModel3D 的 Geometry 属性指定三维对象(平板纸)的形状。

  • 使用 GeometryModel3D 的 Material 属性指定要在对象表面显示的材料(本示例中是线性渐变)。

  • 使用 DirectionalLight 创建在对象上发光的光源。

下面的代码演示如何以 XAML 创建三维场景。

XAML
复制代码

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" >
<DockPanel>
<Viewbox>
<Canvas Width="321" Height="201">
<!-- The Viewport3D provides a rendering surface for 3-D visual content. -->
<Viewport3D ClipToBounds="True" Width="150" Height="150" Canvas.Left="0" Canvas.Top="10">
<!-- Defines the camera used to view the 3D object. -->
<Viewport3D.Camera>
<PerspectiveCamera Position="0,0,2" LookDirection="0,0,-1" FieldOfView="60" />
</Viewport3D.Camera>
<!-- The ModelVisual3D children contain the 3D models -->
<Viewport3D.Children>
<!-- This ModelVisual3D defines the light cast in the scene. Without light, the 3D
object cannot be seen. Also, the direction of the lights affect shadowing. If desired,
you can create multiple lights with different colors that shine from different directions. -->
<ModelVisual3D>
<ModelVisual3D.Content>
<DirectionalLight Color="#FFFFFF" Direction="-0.612372,-0.5,-0.612372" />
</ModelVisual3D.Content>
</ModelVisual3D>
<ModelVisual3D>
<ModelVisual3D.Content>
<GeometryModel3D>
<!-- The geometry specifes the shape of the 3D plane. In this sample, a flat sheet is created. -->
<GeometryModel3D.Geometry>
<MeshGeometry3D
TriangleIndices="0,1,2 3,4,5 "
Normals="0,0,1 0,0,1 0,0,1 0,0,1 0,0,1 0,0,1 "
TextureCoordinates="0,0 1,0 1,1 1,1 0,1 0,0 "
Positions="-0.5,-0.5,0.5 0.5,-0.5,0.5 0.5,0.5,0.5 0.5,0.5,0.5 -0.5,0.5,0.5 -0.5,-0.5,0.5 " />
</GeometryModel3D.Geometry>
<!-- The material specifies the material applied to the 3D object. In this sample a linear gradient
covers the surface of the 3D object.-->
<GeometryModel3D.Material>
<MaterialGroup>
<DiffuseMaterial>
<DiffuseMaterial.Brush>
<LinearGradientBrush StartPoint="0,0.5" EndPoint="1,0.5">
<LinearGradientBrush.GradientStops>
<GradientStop Color="Yellow" Offset="0" />
<GradientStop Color="Red" Offset="0.25" />
<GradientStop Color="Blue" Offset="0.75" />
<GradientStop Color="LimeGreen" Offset="1" />
</LinearGradientBrush.GradientStops>
</LinearGradientBrush>
</DiffuseMaterial.Brush>
</DiffuseMaterial>
</MaterialGroup>
</GeometryModel3D.Material>
<!-- Apply a transform to the object. In this sample, a rotation transform is applied, rendering the
3D object rotated. -->
<GeometryModel3D.Transform>
<RotateTransform3D>
<RotateTransform3D.Rotation>
<AxisAngleRotation3D Axis="0,3,0" Angle="40" />
</RotateTransform3D.Rotation>
</RotateTransform3D>
</GeometryModel3D.Transform>
</GeometryModel3D>
</ModelVisual3D.Content>
</ModelVisual3D>
</Viewport3D.Children>
</Viewport3D>
</Canvas>
</Viewbox>
</DockPanel>
</Page>

下面的代码演示如何以程序代码创建同一三维场景。

C#
复制代码

using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Media.Media3D;
namespace SDKSample
{
public partial class Basic3DShapeExample : Page
{
public Basic3DShapeExample()
{
// Declare scene objects.
Viewport3D myViewport3D = new Viewport3D();
Model3DGroup myModel3DGroup = new Model3DGroup();
GeometryModel3D myGeometryModel = new GeometryModel3D();
ModelVisual3D myModelVisual3D = new ModelVisual3D();
// Defines the camera used to view the 3D object. In order to view the 3D object,
// the camera must be positioned and pointed such that the object is within view
// of the camera.
PerspectiveCamera myPCamera = new PerspectiveCamera();
// Specify where in the 3D scene the camera is.
myPCamera.Position = new Point3D(0, 0, 2);
// Specify the direction that the camera is pointing.
myPCamera.LookDirection = new Vector3D(0, 0, -1);
// Define camera's horizontal field of view in degrees.
myPCamera.FieldOfView = 60;
// Asign the camera to the viewport
myViewport3D.Camera = myPCamera;
// Define the lights cast in the scene. Without light, the 3D object cannot
// be seen. Also, the direction of the lights affect shadowing. Note: to
// illuminate an object from additional directions, create additional lights.
DirectionalLight myDirectionalLight = new DirectionalLight();
myDirectionalLight.Color = Colors.White;
myDirectionalLight.Direction = new Vector3D(-0.61, -0.5, -0.61);
myModel3DGroup.Children.Add(myDirectionalLight);
// The geometry specifes the shape of the 3D plane. In this sample, a flat sheet
// is created.
MeshGeometry3D myMeshGeometry3D = new MeshGeometry3D();
// Create a collection of normal vectors for the MeshGeometry3D.
Vector3DCollection myNormalCollection = new Vector3DCollection();
myNormalCollection.Add(new Vector3D(0,0,1));
myNormalCollection.Add(new Vector3D(0,0,1));
myNormalCollection.Add(new Vector3D(0,0,1));
myNormalCollection.Add(new Vector3D(0,0,1));
myNormalCollection.Add(new Vector3D(0,0,1));
myNormalCollection.Add(new Vector3D(0,0,1));
myMeshGeometry3D.Normals = myNormalCollection;
// Create a collection of vertex positions for the MeshGeometry3D.
Point3DCollection myPositionCollection = new Point3DCollection();
myPositionCollection.Add(new Point3D(-0.5, -0.5, 0.5));
myPositionCollection.Add(new Point3D(0.5, -0.5, 0.5));
myPositionCollection.Add(new Point3D(0.5, 0.5, 0.5));
myPositionCollection.Add(new Point3D(0.5, 0.5, 0.5));
myPositionCollection.Add(new Point3D(-0.5, 0.5, 0.5));
myPositionCollection.Add(new Point3D(-0.5, -0.5, 0.5));
myMeshGeometry3D.Positions = myPositionCollection;
// Create a collection of texture coordinates for the MeshGeometry3D.
PointCollection myTextureCoordinatesCollection = new PointCollection();
myTextureCoordinatesCollection.Add(new Point(0, 0));
myTextureCoordinatesCollection.Add(new Point(1, 0));
myTextureCoordinatesCollection.Add(new Point(1, 1));
myTextureCoordinatesCollection.Add(new Point(1, 1));
myTextureCoordinatesCollection.Add(new Point(0, 1));
myTextureCoordinatesCollection.Add(new Point(0, 0));
myMeshGeometry3D.TextureCoordinates = myTextureCoordinatesCollection;
// Create a collection of triangle indices for the MeshGeometry3D.
Int32Collection myTriangleIndicesCollection = new Int32Collection();
myTriangleIndicesCollection.Add(0);
myTriangleIndicesCollection.Add(1);
myTriangleIndicesCollection.Add(2);
myTriangleIndicesCollection.Add(3);
myTriangleIndicesCollection.Add(4);
myTriangleIndicesCollection.Add(5);
myMeshGeometry3D.TriangleIndices = myTriangleIndicesCollection;
// Apply the mesh to the geometry model.
myGeometryModel.Geometry = myMeshGeometry3D;
// The material specifies the material applied to the 3D object. In this sample a
// linear gradient covers the surface of the 3D object.
// Create a horizontal linear gradient with four stops.
LinearGradientBrush myHorizontalGradient = new LinearGradientBrush();
myHorizontalGradient.StartPoint = new Point(0, 0.5);
myHorizontalGradient.EndPoint = new Point(1, 0.5);
myHorizontalGradient.GradientStops.Add(new GradientStop(Colors.Yellow, 0.0));
myHorizontalGradient.GradientStops.Add(new GradientStop(Colors.Red, 0.25));
myHorizontalGradient.GradientStops.Add(new GradientStop(Colors.Blue, 0.75));
myHorizontalGradient.GradientStops.Add(new GradientStop(Colors.LimeGreen, 1.0));
// Define material and apply to the mesh geometries.
DiffuseMaterial myMaterial = new DiffuseMaterial(myHorizontalGradient);
myGeometryModel.Material = myMaterial;
// Apply a transform to the object. In this sample, a rotation transform is applied,
// rendering the 3D object rotated.
RotateTransform3D myRotateTransform3D = new RotateTransform3D();
AxisAngleRotation3D myAxisAngleRotation3d = new AxisAngleRotation3D();
myAxisAngleRotation3d.Axis = new Vector3D(0,3,0);
myAxisAngleRotation3d.Angle = 40;
myRotateTransform3D.Rotation = myAxisAngleRotation3d;
myGeometryModel.Transform = myRotateTransform3D;
// Add the geometry model to the model group.
myModel3DGroup.Children.Add(myGeometryModel);
// Add the group of models to the ModelVisual3d.
myModelVisual3D.Content = myModel3DGroup;
//
myViewport3D.Children.Add(myModelVisual3D);
// Apply the viewport to the page so it will be rendered.
this.Content = myViewport3D;
}
}
}

 继承层次结构
System..::.Object
  System.Windows.Threading..::.DispatcherObject
    System.Windows..::.DependencyObject
      System.Windows.Media..::.Visual
        System.Windows..::.UIElement
          System.Windows..::.FrameworkElement
            System.Windows.Controls..::.Viewport3D

 线程安全
此类型的任何公共 static(在 Visual Basic 中为 Shared) 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

 平台

Windows Vista

.NET Framework 和 .NET Compact Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表,请参见.NET Framework 系统要求。

 版本信息

.NET Framework

受以下版本支持:3.5、3.0

 另请参见

参考

Viewport3D 成员
System.Windows.Controls 命名空间
Viewport3DVisual

其他资源

三维图形概述

Viewport3D 类Viewport3D 类Viewport3D 类相关推荐

  1. C++ 笔记(16)— 类和对象(类定义、类实例对象定义、访问类成员、类成员函数、类 public/private/protected 成员、类对象引用和指针)

    1. 类的定义 类定义是以关键字 class 开头,后跟类的名称.并在它后面依次包含类名,一组放在 {} 内的成员属性和成员函数,以及结尾的分号. 类声明将类本身及其属性告诉编译器.类声明本身并不能改 ...

  2. Python Qt GUI设计:QCalendar日历类和QDateTimeEdit时间类(基础篇—20)

    目录 1.QCalendar日历类 2.QDateTimeEdit时间类 1.QCalendar日历类 QCalendar是一个日历控件,它提供了一个基于月份的视图,允许用户通过鼠标或键盘选择日期,默 ...

  3. Python Qt GUI设计:QTimer计时器类、QThread多线程类和事件处理类(基础篇—8)

    目录 1.QTimer计时器类 2.QThread多线程类 3.事件处理类 一般情况下,应用程序都是单线程运行的,但是对于GUI程序来说,单线程有时候满足不了需求.例如,如果需要执行一个特别耗时的操作 ...

  4. Python源码学习:Python类机制分析-用户自定义类

    Python源码分析 本文环境python2.5系列 参考书籍<<Python源码剖析>> 上一文,分析了Python在启动初始化时,对内置类的一个基本的初始化流程,本文就简析 ...

  5. java 嵌套类 继承_Java嵌套类 - 爱吃苹果的搬运工的个人空间 - OSCHINA - 中文开源技术交流社区...

    在Java中可以创建几种不同类型的嵌套类: 静态嵌套类: 静态内部类可以独立于外部类被实例化,无法访问外部类中的非静态属性和方法,只能外部类的实例来访问外部类的非静态变量 public class O ...

  6. python的类和对象_Python类与对象实验

    一.任务描述 本实验任务主要对Python类与对象进行一些基本操作,通过完成本实验任务,要求学生熟练掌握Python类与对象的关系,并对Python类与对象的基本操作进行整理并填写工作任务报告. 二. ...

  7. 时间序列分析工具:Prophet、statsmodels、DeepAR、Xgboost类模型、RNN类模型

    时间序列分析工具:Prophet.statsmodels.DeepAR.Xgboost类模型.RNN类模型 目录 时间序列分析工具:Prophet.statsmodels.DeepAR.Xgboost ...

  8. c++ 实现一个object类_说说Object类下面有几种方法呢?

    欢迎关注头条号:Java小野猫 今天说一道基础题型,不过很多人会忽略或者至少说不完整,但是面试时被问到的几率还是很大的. 面试题 Object有几种方法呢? Java语言是一种单继承结构语言,Java ...

  9. python元类编程_python元类编程

    什么叫元类?   年轻人先不要在意这些细节.我们一步一步的来! 001. oop的世界里有一句话 "万物皆对象" classPerson(object): name=Noneif ...

  10. Java File类总结和FileUtils类

    Java File类总结和FileUtils类 文件存在和类型判断 创建出File类的对象并不代表该路径下有此文件或目录. 用public boolean exists()可以判断文件是否存在. Fi ...

最新文章

  1. 计算机网络智能化在铁路通信的发展,计算机网络在铁路信号中的应用
  2. 一个功能函数所具备的要素
  3. java venus_来认识一下venus-init——一个让你仅需一个命令开始Java开发的命令行工具...
  4. MCU提高ADC采样精度的几种方案
  5. java天气预报webservice_webservice之实现天气预报
  6. 和哪个专业的男生谈恋爱最惨?
  7. 中国 各大银行bankCode 开户行代码和名称 高清银行图标
  8. python输入名字配对情侣网名_输入名字配置情侣网名-网名搜索
  9. python 列表 元组_python基础:元组(tuple)列表(list)介绍
  10. SpringBoot中的Banner(Banner)
  11. [渝粤教育] 浙江大学 2021秋冬微积分(一) 参考 资料
  12. matlab dwt实现原理,基于DWT的数字水印算法的MatLab实现.pdf
  13. JAVA程序员常用网址
  14. onlyoffice安装之二:centos7安装
  15. 数仓分层的意义及通用设计
  16. asp.net留言板管理源代码
  17. 华为“二次替代”的本事如何练就?
  18. springboot——任务处理
  19. 谈谈我对去中心化交易所鲸交所的感受
  20. 2022-1-30 Leetcode 5981.分组得分最高的所有下标

热门文章

  1. Java Calendar hashCode()方法与示例
  2. setmonth_日期setMonth()方法以及JavaScript中的示例
  3. centos重新安装yum
  4. linux 常用命令02--文件属性 以及软硬链接
  5. c++动态内存管理题目
  6. Linux内核驱动之GPIO子系统(一)GPIO的使用
  7. 【Java学习笔记十】输入输出流
  8. 基于单链表的生产者消费者问题
  9. 解决iex -S mix报错
  10. 【Linux系统编程学习】 GCC编译器