Tam giác ba chiều hiển thị trên bên phải là tham chiếutừ một tập hợp tam giác của cọ vẽ hai
chiều được hiển thị bên trái. Các tập con được lựa chọn của cọ vẽ được kéo dài để phù hợp với toàn bộ tam giác 3D. Bạn xác định các MeshGeometry3D như sau:
<MeshGeometry3D TriangleIndices="0 1 2"
Trang 68
TextureCoordinates="0.25 0, 1 1, 0 0.5" />
Brush là một hình chữ nhật hai chiều với bốn đỉnh, và lưới bao gồm các hình tam giác với ba đỉnh. Nó chỉ đơn giản là không thể xác định giá trị để TextureCoordinates của một brush tồn bộ hình chữ nhật phù hợp trong một tam giác duy nhất.
Với TextureCoordinates là thuộc tính được xác định b i MeshGeometry3D với ba thuộc tính nữa là Position, TriangleIndices, và Normals.
MeshGeometry3D cũng thừa hư ng một thuộc tính Bounds từ Geometry3D, thuộc tính này
là của loại Rect3D và cho biết tổng kích thước của con số trước khi chuyển đổi được áp dụng.
Các thuộc tính Bounds đơi khi hữu ích cho định vị một con số. Ví dụ, bạn có thể muốn vị trí một con số để dưới cùng của nó nằm trên mặt phẳng XZ. Thiết lập một thuộc tính OffsetY của TranslateTransform3D đến giá trị âmcủa các thuộc tính Bounds Y.
Hãy ghi nhớ rằng mỗi GeometryModel3D bao gồm một MeshGeometry3D và một đối tượng của loại Material, như vậy bằng cách cần thiết bạn sử dụng cọ vẽ giống nhau cho tất cả các hình tam giác đó bao gồm các con số. Nếu bạn muốn sử dụng cọ vẽ khác nhau cho các tam giác khác
nhau, bạn có thể chia hình thành nhiều đối tượng GeometryModel3D. Trong một số trư ng hợp, bạn có thể bao gồm một MeshGeometry3D duy nhất với hai vật liệu bằng cách xác định chỉ số tam giác theo cách như vậy cho phép bạn sử dụng cả Material và BackMaterial.
Dưới đây là bốn mặt kim tự tháp, để giữ cho nó đơn giản, kim tự tháp khơng có đáy.
PyramidWithGradientBrush.xaml
<!-- =========================================================== PyramidWithGradientBrush.xaml (c) 2007 by Charles Petzold =========================================================== --> <Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
WindowTitle="Pyramid with LinearGradientBrush" Title="Pyramid with LinearGradientBrush"> <DockPanel>
<ScrollBar Name="horz" DockPanel.Dock="Bottom" Orientation="Horizontal" Minimum="-180" Maximum="180" LargeChange="10" SmallChange="1" /> <Viewport3D> <ModelVisual3D> <ModelVisual3D.Content> <Model3DGroup> <GeometryModel3D> <GeometryModel3D.Geometry>
Trang 69
<!-- Pyramid: Front, back, left, right. --> <MeshGeometry3D Positions="0 1 0, -0.5 0 0.5, 0.5 0 0.5, 0 1 0, 0.5 0 -0.5, -0.5 0 -0.5, 0 1 0, -0.5 0 -0.5, -0.5 0 0.5, 0 1 0, 0.5 0 0.5, 0.5 0 -0.5" TriangleIndices="0 1 2, 3 4 5, 6 7 8, 9 10 11" TextureCoordinates="1 0, 0 1, 1 1, 1 0, 0 1, 0 0, 1 0, 0 0, 0 1, 1 0, 1 1, 0 1" /> </GeometryModel3D.Geometry> <GeometryModel3D.Material> <DiffuseMaterial> <DiffuseMaterial.Brush> <LinearGradientBrush StartPoint="0 0" EndPoint="1 1"> <GradientStop Color="#FF0000" Offset="0" /> <GradientStop Color="#FFFF00" Offset="0.2" /> <GradientStop Color="#00FF00" Offset="0.4" /> <GradientStop Color="#00FFFF" Offset="0.6" /> <GradientStop Color="#0000FF" Offset="0.8" /> <GradientStop Color="#FF00FF" Offset="1" /> </LinearGradientBrush> </DiffuseMaterial.Brush> </DiffuseMaterial> </GeometryModel3D.Material> <GeometryModel3D.Transform> <RotateTransform3D> <RotateTransform3D.Rotation> <AxisAngleRotation3D Axis="0 1 0"
Angle="{Binding ElementName=horz, Path=Value}"
/> </RotateTransform3D.Rotation> </RotateTransform3D> </GeometryModel3D.Transform> </GeometryModel3D> <!-- Light sources. --> <AmbientLight Color="Gray" />
<DirectionalLight Color="Gray" Direction="2 -3 -1" /> </Model3DGroup>
</ModelVisual3D.Content> </ModelVisual3D>
<!-- Camera. --> <Viewport3D.Camera>
<PerspectiveCamera Position="-2 2 4" LookDirection="2 -2 -4" UpDirection="0 1 0" FieldOfView="22.5" /> </Viewport3D.Camera>
</Viewport3D> </DockPanel> </Page>
Trang 70
Góc trên bên phải của cọ vẽ là điểm (1, 0), luôn luôn ánh xạ tới đỉnh của kim tự tháp tại các
điểm (0, 1, 0). Ba góc khác của cọ vẽ được ánh xạ tới các đỉnh khác nhau của kim tự tháp: