|
Программирование >> Расширенный wf
Таблица 35.9. Классы 3-D Класс Light Camera Transform3D Описание ViewPort3D ModelVisual3D GeometryModel3D Geometry3D Material ViewPort3D определяет поверхность отображения объектов 3-D. Этот элемент содержит все визуальные элементы для трехмерного рисования. ModelVisual3D содержится в ViewPort3D и содержит все визуальные элементы. Вы можете назначить трансформацию всей модели сразу. GeometryModel3D содержится внутри ModelVisual3D и состоит из сетки и материала. Geometry3D - абстрактный базовый класс для определения геометрических фигур. Конкретный класс, производный от Geometry3D - это MeshGeometry3D. С помощью MeshGeometry3D вы можете определять позиции треугольников для построения трехмерной модели Material - абстрактный базовый класс для определения лицевой и изнаночной поверхности треугольников, определенный свойством MeshGeometry3D.Material и содержащийся внутри GeometryModel3D. В .NET 3.5 определено несколько классов материалов, такие как DiffuseMaterial, EmissiveMaterial и SpecularMaterial. В зависимости от типа материала освещение вычисляется по-разному. EmissiveMaterial предполагает такое вычисление освещения, которое исходит из того, что материал издает свет цвета кисти. DiffuseMaterial издает рассеянный свет, а SpecularMaterial определяет модель материала с зеркальным отражением. С классом MaterialGroup вы можете создавать комбинации, состоящие из разных материалов. Light - абстрактный базовый класс, описывающий освещение. Конкретные его реализации: AmbientLight, DirectionalLight, PointLight и SpotLight. Класс AmbientLight - неестественный свет, равномерно освещает сцену. При таком свете вы не увидите граней. DirectionalLight определяет направленный свет. Примером может служить солнечный свет. Свет поступает с одной стороны, и здесь вы можете видеть грани и тени. PointLight - свет, поступающий из определенной точки и распространяющийся от нее во всех направлениях. SpotLight светит в определенном направлении. Этот свет определяет конус освещенности, так что вы можете получить отдельную ярко освещенную область. Camera - абстрактный базовый класс для описания камеры, используемой для отображения трехмерной сцены на двумерную. Конкретные его реализации: PerspectiveCamera, OrthographicCamera и MatrixCamera. При использовании PerspectiveCamera трехмерные объекты выглядят тем меньше, чем дальше они находятся. Это отличает его от OrthographicCamera, где расстояние объекта от камеры не влияет на его размер. С помощью MatrixCamera вы можете определять вид и трансформацию матрицы. Transform3D - абстрактный базовый класс для описания трехмерных трансформаций. Конкретные реализации: RotateTransform3D, ScaleTransform3D, TranslateTransform3D, MatrixTransform3D и Transform3DGroup. Класс TranslateTransform3D позволяет трансформировать объект в направлениях x, y и z. ScaleTransform3D позволяет изменять размер объекта. С помощью класса RotateTransform3D вы можете вращать объект вокруг осей x, y и z. Посредством Transform3DGroup можно комбинировать другие трансформации. Рис. 35.23. Результирующий треугольник Треугольник Этот раздел мы начнем с простого примера 3-D. Модель 3-D состоит из треугольников, поэтому простейшая будет состоять из одного треугольника. Треугольник определяется свойством Position объекта MeshGeometry3D. Все три его точки имеют одинаковую координату z, равную -4, а координате! x/y равны -1 -1, 1 -1, и 0 1. Свойство TriangleIndices задает порядок позиций в порядке против часовой стрелки. Этим свойством вы можете определять видимую сторону треугольника. Одна сторона треугольника показывает цвет, заданный в свойстве Material класса GeometryModel3D, а другая сторона показывает свойство BackMaterial. Камера, используемая для отображения сценария, позиционируется в точке с координатами 0,0,0, и ориентирована в направлении 0,0,-8. Смещение позиции камеры влево приводит к перемещению прямоугольника вправо и наоборот. Изменение позиции y камеры приводит к увеличению и уменьшению прямоугольника. Свет, используемый в этой сцене - AmbientLight - освещает всю сцену белым цветом. На рис. 35.23 можно видеть конечный результат. <Window x:Class= Triangle3D.Window1 xmlns= http: schemas.microsoft.com/winfx/200 6/xaml/presentation xmlns:x= http: schemas.microsoft.com/winfx/2 00 6/xaml Title= 3D Height= 300 Width= 300 > <Grid> <Viewport3D> <Viewport3D.Camera> <PerspectiveCamera Position= 0 0 0 LookDirection= 0 0 -8 /> </Viewport3D.Camera> <ModelVisual3D> <ModelVisual3D.Content> <AmbientLight Color= White /> </ModelVisual3D.Content> </ModelVisual3D> <ModelVisual3D> <ModelVisual3D.Content> <GeometryModel3D> <GeometryModel3D.Geometry> <MeshGeometry3D Positions= -1 -1 -4, 1 -1 -4, 0 1 -4 TriangleIndices= 0, 1, 2 /> </GeometryModel3D.Geometry> <GeometryModel3D.Material> <MaterialGroup> <DiffuseMaterial> <DiffuseMaterial.Brush> <SolidColorBrush Color= Red /> </DiffuseMaterial.Brush> </DiffuseMaterial> </MaterialGroup> </GeometryModel3D.Material> </GeometryModel3D> </ModelVisual3D.Content> </ModelVisual3D> </Viewport3D> </Grid> </Window> Изменение освещения На рис. 35.23 просто показан простой треугольник - этот результат вы можете получить с меньшими усилиями, используя 2-D. Однако отсюда вы можете продолжить, используя средства 3-D. Например, изменяя свет от равномерного (ambient) к локальному (spotlight) с элементом SpotLight, вы можете немедленно изменить внешний вид треугольника. При локальном освещении вы определяете позицию источника света и его направление. Указывая в качестве позиции координаты -1 1 2, вы помещаете источник света над левым углом треугольника на высоту треугольника. Отсюда свет направлен вниз и влево. Вы можете видеть, как при этом выглядит треугольник, на рис. 35.24. <ModelVisual3D> <ModelVisual3D.Content> <SpotLight Position= -1 1 -2 Color= White Direction= -1.5, -1, -5 /> </ModelVisual3D.Content> </ModelVisual3D> Добавление текстур Вместо использования кисти сплошного цвета для материала треугольника вы можете использовать другу кисть, такую как LinearGradientBrush, как показано в следующем коде XAML. Элемент LinearGradientBrush, определенный с DiffuseMaterial, задает цвета конечных точек градиента - желтый, оранжевый, красный, синий и фиолетовый. Чтобы отобразить двухмерную поверхность такого объекта, как кисть, на трехмерную геометрию, должно быть установлено свойство TextCoordinates. Свойство TextCoordinates определяет коллекцию точек 2-D, которые отображаются на позиции 3-D. На рис. 35.25 показаны двухмерные координаты кисти из примера приложения. Первая позиция в треугольнике, -1 -1, отображается на координаты кисти 0 1; позиция 1 -1, представляющая нижний правый угол, отображается на точку 1 1 кисти, имеющую фиолетовый цвет, а 0 1 отображается на 0.5 0. На рис. 35.26 изображен треугольник из материала градиентной кисти, снова с рассеянным светом. <ModelVisual3D> <ModelVisual3D.Content> <GeometryModel3D> <GeometryModel3D.Geometry> <MeshGeometry3D Positions= -1 -1 -4, 1 -1 -4, 0 1 -4 TriangleIndices= 0, 1, 2 TextureCoordinates= 0 1, 1 1, 0.5 0 /> </GeometryModel3D.Geometry> <GeometryModel3D.Material> <MaterialGroup> <DiffuseMaterial> <DiffuseMaterial.Brush> Рис. 35.24. Изменение освещения треугольника Рис. 35.25. Двухмерные координаты кисти Рис. 35.26. Треугольник из материала градиентной кисти
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |