3B Grafiklere Genel Bakış
3-D İşlevindeki Windows Presentation Foundation (WPF) sağlayan geliştiricilere çizme, dönüştürme ve biçimlendirme ve 3-b grafik animasyonyordam kodunu. Geliştiriciler birleştirmek 2-D ve 3-D zengin denetimler oluşturmak için grafik veri, karmaşık çizimler sağlamak veya geliştirmek kullanıcı deneyiminin bir uygulamanın arabirimi. 3-D de destek WPF tam özellikli bir oyun geliştirme platformu sunmak için tasarlanmış değildir. Bu konuda genel bir bakış sağlar 3-D işlevindeki WPF Grafik sistemi.
Bu konu aşağıdaki bölümleri içerir.
- 3-B 2-B kabındaki
- 3-D Coordinate Space
- Kameralar ve tahminler
- Model ve kafes ilkel
- Modele uygulanan malzemeler
- Sahne illuminating
- Transforming Models
- Modelleri animasyon uygulama
- 3 Boyutlu içerik penceresine ekleyin
- İlgili Konular
3-B 2-B kabındaki
3-DGrafik içeriği WPF kapsüllenmiş bir öğesinde, Viewport3D, iki boyutlu öğesi yapısı katılmak Grafik sistem işler Viewport3D gibi birçok diğer iki boyutlu bir görsel öğe olarak WPF. Viewport3Dbir pencere olarak çalışır — bir görünüm penceresi — üç boyutlu bir sahnenin içine. Daha doğrusu, bir yüzey olan bir 3-D Sahne öngörülen.
Bir geleneksel olarak 2-D uygulama ve Viewport3D gibi yaptığınız başka bir kapsayıcı öğe gibi kılavuz veya tuval. Siz kullanabilirsiniz, ancak Viewport3D diğer 2-D Çizim nesneleri aynı Sahneyi grafikte, olamaz interpenetrate 2-D ve 3-D içinde nesneleri bir Viewport3D. Bu konuda çizmek konusunda odaklanacaktır 3-D Grafik Viewport3D.
3-D Coordinate Space
WPF Koordinat sistemi 2-D Grafik işleme alanı (normal ekran) üst sol kaynağını bulur. De 2-D sistemi, x ekseni değerlerini sağa devam edin ve pozitif y ekseni değerleri aşağı doğru devam pozitif. De 3-D koordinat sistemi, ancak kaynağı bulunur işleme alanında pozitif x ekseni değerlerini sağa devam ancak PROCEEDING yukarı doğru hareket ederek bunun yerine pozitif y ekseni değerleri ve pozitif z ekseni değerlerini PROCEEDING dışa doğru kaynaktan, doğru ortasındaviewer.
Geleneksel 2 ve 3 boyutlu koordinat sistemi sunumu
Bu eksenler tarafından tanımlanan sabit başvuru çerçevesi için yer 3-D nesneleri WPF. As you build models in this space and create lights and cameras to view them, it's helpful to distinguish this stationary frame of reference, or "world space," from the local frame of reference you create for each model when you apply transformations to it. Remember also that objects in world space might look entirely different, or not be visible at all, depending on light and camera settings, but the position of the camera does not change the location of objects in world space.
Kameralar ve tahminler
Çalışmak geliştiriciler 2-D iki boyutlu ekran. çizim ilkel konumlandırma için alışkın olan Oluşturduğunuzda, bir 3-D Sahne, onu gerçekten oluşturduğunuz unutmamak gerekir bir 2-D gösterimi 3-D nesneler. Çünkü bir 3-D Sahne onlooker'ın bakış açısı bağlı farklı görünüyor, belirtmeniz gerekir bu bakış açısı. Camera Sınıf bu bakış açısı için belirlemenizi sağlar bir 3-D Sahne.
Anlamak için başka bir yolu nasıl bir 3-D üzerinde Sahne temsil bir 2-D yüzeydir Sahneyi üzerine bir projeksiyon olarak açıklayan tarafındangörüntüleme yüzeyine. ProjectionCamera Farklı tahminler ve onlooker nasıl görür değiştirme özelliklerini belirtmenize olanak tanır 3-D modelleri. A PerspectiveCamera , foreshortens projeksiyon belirtirSahne. Başka bir deyişle, PerspectiveCamera sağlar kaybolmasını noktası perspektif. Sahne, yön ve görüş alanı kamera ve "up" yönünü tanımlayan bir vector öğesinin koordinat kamera konumunu belirtebilirsiniz sahnede. Aşağıdaki diyagramda gösterilmiştir PerspectiveCamera's projeksiyon.
NearPlaneDistance Ve FarPlaneDistance özelliklerini ProjectionCamera sınır aralığını kameranın projeksiyon. Kameralar Sahne içinde herhangi bir yerde bulunduğu için aslında bir model içinde veya yakınında nesneleri düzgün ayırt etmek zor duruma çok bir modeli yerleştirilmesine kamera için mümkündür. NearPlaneDistanceen az bir mesafe, daha büyük nesneler değil çizilip kameradan belirtmenize olanak verir. Tam tersine, FarPlaneDistance belirtmenizi bir mesafeden kamera ötesinde, nesneler değil çizilmiş, hangi sağlar, nesnelere çok uzakta tanınabilir olması bulunmayacaktır Sahne.
Kamera konumu
OrthographicCamerabir orthogonal projeksiyonunu belirtir bir 3-D için model bir 2-D görsel yüzey. Diğer kameralar gibi yön ve "yukarı" görüntüleme bir konumu belirtir yön. Aksine PerspectiveCamera, ancak OrthographicCamera foreshortening perspektif içermeyen bir projeksiyon açıklar. Başka bir deyişle, OrthographicCamera , kenarı yerine, yüz karşılamak noktasında kamera paralel görüntüleme kutusunu açıklar Aşağıdaki resimde aynı modeli kullanarak göründüğü haliyle gösterir PerspectiveCamera ve OrthographicCamera.
Perspektif ve Dikçizgisel tahminler
Aşağıdaki kod, bazı tipik kamera ayarlarını gösterir.
' 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.
Dim myPCamera As 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
// 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;
Model ve kafes ilkel
Model3DGenel gösteren soyut temel sınıfı olan 3-D nesne. Oluşturmak için bir 3-D Sahne, size gereken bazı nesneler görüntülemek, ve Sahne grafiği oluşturan nesneleri türetmek Model3D. Şu anda, WPF destekleyen modelleme geometrileri ile GeometryModel3D. Geometry Özelliği bu modelin götüren bir kafes temel.
Bir model oluşturmak için bir temel oluşturmak yoluyla başlamak ya da kafes. A 3-D ilkel kesişme noktaları tek bir form topluluğu 3-D varlık. Çoğu 3-D sistemleri, basit kapalı Şekil modellenmiştir ilkel sağlar: üç tepe noktaları tarafından tanımlanan bir üçgen. Üçgenin üç nokta coplanar, çünkü daha modellemek için üçgenler eklemeye devam edebilirsiniz karmaşık şekiller, kafesler olarak adlandırılır.
WPF 3-D Sistemi şu anda sağlar MeshGeometry3D sınıf, hangi belirtmenize olanak tanır herhangi geometri; şu anda desteklemediği önceden tanımlanmış 3-D ilkel gibi Küreler ve küp formları. Yaratmadan bir MeshGeometry3D Üçgenin kesişme noktaları listesi belirterek, Positions özelliği. Her köşe olarak belirtilen bir Point3D. (De Extensible Application Markup Language (XAML), bu özellik olarak her köşe. koordinatlarını gösteren threes içinde gruplandırılmış numaralarının listesini belirtin) Geometrisini bağlı birçok üçgenler, bazıları da aynı köşeler (vertices) paylaşmak, kafes oluşan. Kafes doğru çizmek için WPF gereken bilgi, Tepe noktaları paylaşılan hakkında hangi üçgenler. Üçgen indisler ile listesi belirterek bu bilgileri verdikten TriangleIndices özelliği. Bu liste içinde puan öğesinde belirtilen sırayı belirtir Positions listesini belirler üçgeni.
<GeometryModel3D>
<GeometryModel3D.Geometry>
<MeshGeometry3D
Positions="-1 -1 0 1 -1 0 -1 1 0 1 1 0"
Normals="0 0 1 0 0 1 0 0 1 0 0 1"
TextureCoordinates="0 1 1 1 0 0 1 0 "
TriangleIndices="0 1 2 1 3 2" />
</GeometryModel3D.Geometry>
<GeometryModel3D.Material>
<DiffuseMaterial>
<DiffuseMaterial.Brush>
<SolidColorBrush Color="Cyan" Opacity="0.3"/>
</DiffuseMaterial.Brush>
</DiffuseMaterial>
</GeometryModel3D.Material>
<!-- Translate the plane. -->
<GeometryModel3D.Transform>
<TranslateTransform3D
OffsetX="2" OffsetY="0" OffsetZ="-1" >
</TranslateTransform3D>
</GeometryModel3D.Transform>
</GeometryModel3D>
Önceki örnekte, Positions listesi belirtir sekiz kesişme noktaları tanımlama bir küp şeklinde kafes. TriangleIndices Özelliği, üç indices oniki gruplarının bir listesini belirtir Listede her sayıya bir Ofset gösterir Positions listesi. Örneğin, belirtilen ilk üç vertices Positions listesi olan (1,1,0) (0,1,0) ve (0,0,0). Tarafından belirtilen ilk üç indisler TriangleIndices listesi, 0, 2 ve için birinci, üçüncü, karşılık gelen ve ikinci nokta 1, Positions listesi. Sonuç olarak, küp modelini yaptığı ilk üçgen (1,1,0) (0,1,0) için (0,0,0) için oluşan ve kalan onbir üçgenler benzer şekilde belirlenmiştir.
Model için değerler belirterek tanımlama devam Normals ve TextureCoordinates özellikleri. Modelin yüzey göstermek için grafik sistem yön yüzey herhangi verilen üçgen hakkında karşılıklı bilgi gerekiyor. Modeli için aydınlatma hesaplamaları yapmak için bu bilgileri kullanır: doğrudan bir ışık kaynağının doğru yönde yüzeyler ışığı uzağa açılı olandan daha parlak görünür. Ancak WPF varsayılan normal vektörler belirleyebilirsiniz konum koordinatları kullanarak da Eğimli yüzeyler. görünümünü yaklaştırmak için farklı normal vektörler belirtebilirsiniz
TextureCoordinates Özelliği belirtir topluluğu Points nasıl eşleme koordinatlarını belirlemek doku nasıl çizilen kafes. kesişme noktaları için söylemek grafik sistemi TextureCoordinatessıfır ve 1, (dahil) arasında bir değer olarak belirtilir. Olduğu gibi Normals özelliği grafikler Sistem hesaplamak varsayılan doku koordinatları, ancak seçtiğiniz bir doku örneği için bir yinelenen desen parçası içeren eşleme denetlemek için farklı doku koordinatlarını ayarlamak Sonraki konularda veya Direct3D yönetilen SDK'sındaki doku koordinatları hakkında daha fazla bilgi bulunabilir.
Aşağıdaki örnek, küp modelinin bir yüz yordam kodunda oluşturulması gösterilmiştir. Küpün tek GeometryModel3D olarak çizebilirsiniz dikkat edin; Bu örnek küp yüz ayrı dokuları her yüzeyi daha sonra uygulamak için ayrı bir model olarak çizer.
Private side1Plane As New MeshGeometry3D()
MeshGeometry3D side1Plane = new MeshGeometry3D();
side1Plane.Positions.Add(New Point3D(-0.5, -0.5, -0.5))
side1Plane.Positions.Add(New Point3D(-0.5, 0.5, -0.5))
side1Plane.Positions.Add(New Point3D(0.5, 0.5, -0.5))
side1Plane.Positions.Add(New Point3D(0.5, 0.5, -0.5))
side1Plane.Positions.Add(New Point3D(0.5, -0.5, -0.5))
side1Plane.Positions.Add(New Point3D(-0.5, -0.5, -0.5))
side1Plane.TriangleIndices.Add(0)
side1Plane.TriangleIndices.Add(1)
side1Plane.TriangleIndices.Add(2)
side1Plane.TriangleIndices.Add(3)
side1Plane.TriangleIndices.Add(4)
side1Plane.TriangleIndices.Add(5)
side1Plane.Normals.Add(New Vector3D(0, 0, -1))
side1Plane.Normals.Add(New Vector3D(0, 0, -1))
side1Plane.Normals.Add(New Vector3D(0, 0, -1))
side1Plane.Normals.Add(New Vector3D(0, 0, -1))
side1Plane.Normals.Add(New Vector3D(0, 0, -1))
side1Plane.Normals.Add(New Vector3D(0, 0, -1))
side1Plane.TextureCoordinates.Add(New Point(1, 0))
side1Plane.TextureCoordinates.Add(New Point(1, 1))
side1Plane.TextureCoordinates.Add(New Point(0, 1))
side1Plane.TextureCoordinates.Add(New Point(0, 1))
side1Plane.TextureCoordinates.Add(New Point(0, 0))
side1Plane.TextureCoordinates.Add(New Point(1, 0))
side1Plane.Positions.Add(new Point3D(-0.5, -0.5, -0.5));
side1Plane.Positions.Add(new Point3D(-0.5, 0.5, -0.5));
side1Plane.Positions.Add(new Point3D(0.5, 0.5, -0.5));
side1Plane.Positions.Add(new Point3D(0.5, 0.5, -0.5));
side1Plane.Positions.Add(new Point3D(0.5, -0.5, -0.5));
side1Plane.Positions.Add(new Point3D(-0.5, -0.5, -0.5));
side1Plane.TriangleIndices.Add(0);
side1Plane.TriangleIndices.Add(1);
side1Plane.TriangleIndices.Add(2);
side1Plane.TriangleIndices.Add(3);
side1Plane.TriangleIndices.Add(4);
side1Plane.TriangleIndices.Add(5);
side1Plane.Normals.Add(new Vector3D(0, 0, -1));
side1Plane.Normals.Add(new Vector3D(0, 0, -1));
side1Plane.Normals.Add(new Vector3D(0, 0, -1));
side1Plane.Normals.Add(new Vector3D(0, 0, -1));
side1Plane.Normals.Add(new Vector3D(0, 0, -1));
side1Plane.Normals.Add(new Vector3D(0, 0, -1));
side1Plane.TextureCoordinates.Add(new Point(1, 0));
side1Plane.TextureCoordinates.Add(new Point(1, 1));
side1Plane.TextureCoordinates.Add(new Point(0, 1));
side1Plane.TextureCoordinates.Add(new Point(0, 1));
side1Plane.TextureCoordinates.Add(new Point(0, 0));
side1Plane.TextureCoordinates.Add(new Point(1, 0));
Modele uygulanan malzemeler
Bir kafes gibi üç boyutlu bir nesneyi aramak, kesişme noktaları ve üçgenler Yakılan başlatma ve kamera tarafından öngörülen şekilde tanımlanan yüzey kapsamasını uygulanan bir doku olması gerekir. De 2-D, kullandığınız Brush sınıfına uygulanan renkleri, desenleri, degradeleri veya diğer görsel içerik alanlarına ekran. Görünümünü 3-D nesneleri, ancak aydınlatma modeli, rengi veya deseni uygulanmış, yalnızca bir işlev olur. Gerçek nesneleri kendi yüzey kalitesi bağlı farklı ışık yansıtma: Parlak ve parlak yüzeyini inceleyerek yüzeyleri aynı kaba veya mat yüzeyler görünmüyor ve bazı nesneler gibi görünmektedir iken diğerleri Parlayan ışık bazen. Fırçalar için aynı uygulama 3-D için uygulayabileceğiniz nesneleri 2-D nesneleri, ancak alamazsınız uygulamak bunları doğrudan.
Bir modelin yüzey özelliklerini tanımlamak için WPF kullanan Material Özet sınıfa Beton sınıfları malzeme bazı modelin yüzey görünümü özelliklerini belirlemek ve her, SolidColorBrush, TileBrush veya VisualBrush iletebilirsiniz fırça özelliği sağlar.
DiffuseMaterialBu modelin Yakılan başlatma gibi rağmen diffusely fırça modeli uygulanacağını belirtir. DiffuseMaterial en kullanarak benzer doğrudan üzerinde fırçaları kullanarak 2-D modelleri; model yüzeylerinin ışık olarak yine de parlak yüzeyini inceleyerek göstermez.
SpecularMaterialmodelin yüzey oturuyormuş gibi sabit veya parlak yüzeyini inceleyerek, vurguları yansıtma yeteneğine fırça modeli uygulanacağını belirtir. Kendisine bu yansıtıcı kalitesi ya da "shine" doku önereceği derecesini ayarlayabilirsiniz için bir değer belirterek SpecularPower özelliği.
EmissiveMaterialmodeli olan yayma gibi rağmen fırça rengi hafif eşit doku uygulanacağını belirlemenizi sağlar. Bu model bir ışık yapmaz; Ancak, bunu farklı bir şekilde DiffuseMaterial veya SpecularMaterial ile dokulu, düğmelerden gölgeleme katılacaktır.
Arka yüzlerini, daha iyi performans için bir GeometryModel3D (Bu yüzeyleri olan görünümü dışında çünkü olduklarından kameradan yapılan modelinin ters tarafındaki) culled Sahne. Belirtmek için bir Material uygulamak için bir uçak gibi bir modelin arka yüz modelinin set BackMaterial özelliği.
Işıyan veya yansıtıcı efektleri gibi bazı yüzey biçemiyle elde etmek için bir model art arda birkaç farklı fırçalar uygulamak isteyebilirsiniz. Uygulama ve birden fazla malzeme kullanarak yeniden MaterialGroup sınıfa MaterialGroup, çocukların ilk birden fazla işleme geçişlerindeki son uygulanır.
Aşağıdaki kod bir düz renk ve çizim olarak fırçalar için nasıl uygulanacağı örnekler 3-D modelleri.
<GeometryModel3D.Material>
<DiffuseMaterial>
<DiffuseMaterial.Brush>
<SolidColorBrush Color="Cyan" Opacity="0.3"/>
</DiffuseMaterial.Brush>
</DiffuseMaterial>
</GeometryModel3D.Material>
<DrawingBrush x:Key="patternBrush" Viewport="0,0,0.1,0.1" TileMode="Tile">
<DrawingBrush.Drawing>
<DrawingGroup>
<DrawingGroup.Children>
<GeometryDrawing Geometry="M0,0.1 L0.1,0 1,0.9, 0.9,1z"
Brush="Gray" />
<GeometryDrawing Geometry="M0.9,0 L1,0.1 0.1,1 0,0.9z"
Brush="Gray" />
<GeometryDrawing Geometry="M0.25,0.25 L0.5,0.125 0.75,0.25 0.5,0.5z"
Brush="#FFFF00" />
<GeometryDrawing Geometry="M0.25,0.75 L0.5,0.875 0.75,0.75 0.5,0.5z"
Brush="Black" />
<GeometryDrawing Geometry="M0.25,0.75 L0.125,0.5 0.25,0.25 0.5,0.5z"
Brush="#FF0000" />
<GeometryDrawing Geometry="M0.75,0.25 L0.875,0.5 0.75,0.75 0.5,0.5z"
Brush="MediumBlue" />
</DrawingGroup.Children>
</DrawingGroup>
</DrawingBrush.Drawing>
</DrawingBrush>
Dim side5Material As New DiffuseMaterial(CType(Application.Current.Resources("patternBrush"), Brush))
DiffuseMaterial side5Material = new DiffuseMaterial((Brush)Application.Current.Resources["patternBrush"]);
Sahne illuminating
İçinde ışık 3-D Grafik yapmak gerçek dünyada ışık ne: Bunlar yüzeyleri görünür olmasını sağlayın. Daha bir sahnenin hangi bölümünün projeksiyon dahil edilecek noktasına ışıkları belirler. Açık nesneleri WPF çeşitli ışık ve gölge efektleri oluşturmak ve davranışını sonra modellenmiştirçeşitli gerçek dünya ışık. En az bir ışık sahnenizdeki dahil veya hiçbir modeller görünür olacaktır.
Aşağıdaki ışık temel sýnýftan türemesine Light:
AmbientLight: Tüm nesneleri birörnek olsun konumlarına veya yönünü illuminates ortamdaki ışıklandırma sağlar.
DirectionalLight: Uzaktaki bir ışık kaynağı gibi illuminates. İki ışık sahip bir Direction belirtildiği gibi bir Vector3D ancak belirli bir konumu yok.
PointLight: Yakındaki bir ışık kaynağı gibi illuminates. PointLights bir konuma sahiptir ve o konumdan ışık artığını. Sahnedeki nesnelere, kendi pozisyon ve mesafe açısından ışık bağlı yandığından. PointLightBasesergiler bir Range özelliği, ötesinde, modeller değil ışıklı ışık. mesafeyi belirler PointLight de ışığın yoğunluğu mesafede nasıl diminishes belirleyen Zayıflatma özellikleri sunar. Işığın zayıflaması için sabit, Doğrusal veya quadratic interpolations belirtebilirsiniz.
SpotLight: Devraldığı PointLight. Sahne Işıkları gibi PointLight nlatmak ve konum ve yön vardır. Bunlar ışık ayarlanmış bir koni şeklinde alanında proje InnerConeAngle ve OuterConeAngle Özellikler, belirtilen derece.
Işıklarının Model3D nesneleri, böylece dönüştürme ve animasyon ışık özellikleri gibi konum, renk, yön ve aralık.
<ModelVisual3D.Content>
<AmbientLight Color="#333333" />
</ModelVisual3D.Content>
Private myDirLight As New DirectionalLight()
DirectionalLight myDirLight = new DirectionalLight();
myDirLight.Color = Colors.White
myDirLight.Direction = New Vector3D(-3, -4, -5)
myDirLight.Color = Colors.White;
myDirLight.Direction = new Vector3D(-3, -4, -5);
modelGroup.Children.Add(myDirLight)
modelGroup.Children.Add(myDirLight);
Transforming Models
When you create models, they have a particular location in the scene. To move those models around in the scene, to rotate them, or to change their size, it's not practical to change the vertices that define the models themselves. Bunun yerine, yalnızca gibi 2-D, uyguladığınız dönüştürmeleri için modeller.
Each model object has a Transform property with which you can move, re-orient, or resize the model. Bir dönüşüm uyguladığınızda, verimli modelinin tüm noktaları ne olursa olsun vektör ya da dönüşüm tarafından belirtilen değeri tarafından mahsup. In other words, you've transformed the coordinate space in which the model is defined ("model space"), but you haven't changed the values that make up the model's geometry in the coordinate system of the entire scene ("world space").
Modelleri dönüştürme hakkında daha fazla bilgi için bkz: 3B Dönüşümler Genel Bakış.
Modelleri animasyon uygulama
WPF 3-D Aynı zamanlama ve animasyon sistemi olarak uygulamasına katılan 2-D grafik. In other words, to animate a 3-D scene, animate the properties of its models. It's possible to animate properties of primitives directly, but it's typically easier to animate transformations that change the position or appearance of models. Dönüştürmeleri uygulanabilir çünkü Model3DGroup nesnelerin yanı sıra tek tek modeller, onu olası animasyonlar için bir Model3DGroup ve animasyonlar bir grup başka bir dizi alt kümesi uygulamakalt nesneler. Sizin sahnenin ışık özelliklerini animasyon uygulama çeşitli görsel efektler elde edebilirsiniz. Son olarak, projeksiyon kamera konumunu veya görünüm alanı animasyon animasyon uygulamak isteyebilirsiniz. Arka plan bilgi WPF Zamanlama ve animasyon sistemi Bkz: Animasyona Genel bakış, Film Şeritlerine Genel Bakış, ve Freezable Nesnelerine Genel Bakış Konular.
Bir nesneye animasyon uygulamak için WPF, bir zaman çizelgesi oluşturun, bir animasyon (olduğu gerçekten bazı özellik değeri zaman içinde değişikliğe) tanımlamak ve belirleme özelliği olan uygulama animasyon. Çünkü tüm nesneleri bir 3-D Sahne olan alt Viewport3D, hedeflenen tarafından sahneye uygulamak istediğiniz animasyon özelliklerini özelliklerini Viewport3D.
Yerde wobble gibi bir model yapmak istediğinizi varsayalım. Uygulamak isteyebilirsiniz bir RotateTransform3D modeli ve animasyon, bir vektör dönüşten başka bir eksen. Aşağıdaki kod örneği, dönüşümün 's Rotation3D, bir TransformGroup modeliyle uygulanan çeşitli dönüşümler biri için RotateTransform3D varsayarak eksen özelliğine bir Vector3DAnimation uygulamak gösterilmiştir.
'Define a rotation
Dim myRotateTransform As New RotateTransform3D(New AxisAngleRotation3D(New Vector3D(0, 1, 0), 1))
//Define a rotation
RotateTransform3D myRotateTransform = new RotateTransform3D(new AxisAngleRotation3D(new Vector3D(0, 1, 0), 1));
Dim myVectorAnimation As New Vector3DAnimation(New Vector3D(-1, -1, -1), New Duration(TimeSpan.FromMilliseconds(5000)))
myVectorAnimation.RepeatBehavior = RepeatBehavior.Forever
Vector3DAnimation myVectorAnimation = new Vector3DAnimation(new Vector3D(-1, -1, -1), new Duration(TimeSpan.FromMilliseconds(5000)));
myVectorAnimation.RepeatBehavior = RepeatBehavior.Forever;
myRotateTransform.Rotation.BeginAnimation(AxisAngleRotation3D.AxisProperty, myVectorAnimation)
myRotateTransform.Rotation.BeginAnimation(AxisAngleRotation3D.AxisProperty, myVectorAnimation);
'Add transformation to the model
cube1TransformGroup.Children.Add(myRotateTransform)
//Add transformation to the model
cube1TransformGroup.Children.Add(myRotateTransform);
3 Boyutlu içerik penceresine ekleyin
Sahne işlemek için modelleri ve ışıklara ekleyin bir Model3DGroup, daha sonra Model3DGroup olarak Content , bir ModelVisual3D. Ekleme ModelVisual3D için Children topluluğu Viewport3D. Kameralara ekleme Viewport3D ayarlayarak, Camera özelliği.
Son olarak, ekleme Viewport3D Pencere. Zaman Viewport3D tuval gibi bir düzen öðenin içeriði belirtmek gibi Viewport3D boyutunu ayarlayarak bulunur, Height ve Width özellikleri (devralınan FrameworkElement).
<UserControl x:Class="HostingWpfUserControlInWf.UserControl1"
xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
>
<Grid>
<!-- Place a Label control at the top of the view. -->
<Label
HorizontalAlignment="Center"
TextBlock.TextAlignment="Center"
FontSize="20"
Foreground="Red"
Content="Model: Cone"/>
<!-- Viewport3D is the rendering surface. -->
<Viewport3D Name="myViewport" >
<!-- Add a camera. -->
<Viewport3D.Camera>
<PerspectiveCamera
FarPlaneDistance="20"
LookDirection="0,0,1"
UpDirection="0,1,0"
NearPlaneDistance="1"
Position="0,0,-3"
FieldOfView="45" />
</Viewport3D.Camera>
<!-- Add models. -->
<Viewport3D.Children>
<ModelVisual3D>
<ModelVisual3D.Content>
<Model3DGroup >
<Model3DGroup.Children>
<!-- Lights, MeshGeometry3D and DiffuseMaterial objects are added to the ModelVisual3D. -->
<DirectionalLight Color="#FFFFFFFF" Direction="3,-4,5" />
<!-- Define a red cone. -->
<GeometryModel3D>
<GeometryModel3D.Geometry>
<MeshGeometry3D
Positions="0.293893 -0.5 0.404509 0.475528 -0.5 0.154509 0 0.5 0 0.475528 -0.5 0.154509 0 0.5 0 0 0.5 0 0.475528 -0.5 0.154509 0.475528 -0.5 -0.154509 0 0.5 0 0.475528 -0.5 -0.154509 0 0.5 0 0 0.5 0 0.475528 -0.5 -0.154509 0.293893 -0.5 -0.404509 0 0.5 0 0.293893 -0.5 -0.404509 0 0.5 0 0 0.5 0 0.293893 -0.5 -0.404509 0 -0.5 -0.5 0 0.5 0 0 -0.5 -0.5 0 0.5 0 0 0.5 0 0 -0.5 -0.5 -0.293893 -0.5 -0.404509 0 0.5 0 -0.293893 -0.5 -0.404509 0 0.5 0 0 0.5 0 -0.293893 -0.5 -0.404509 -0.475528 -0.5 -0.154509 0 0.5 0 -0.475528 -0.5 -0.154509 0 0.5 0 0 0.5 0 -0.475528 -0.5 -0.154509 -0.475528 -0.5 0.154509 0 0.5 0 -0.475528 -0.5 0.154509 0 0.5 0 0 0.5 0 -0.475528 -0.5 0.154509 -0.293892 -0.5 0.404509 0 0.5 0 -0.293892 -0.5 0.404509 0 0.5 0 0 0.5 0 -0.293892 -0.5 0.404509 0 -0.5 0.5 0 0.5 0 0 -0.5 0.5 0 0.5 0 0 0.5 0 0 -0.5 0.5 0.293893 -0.5 0.404509 0 0.5 0 0.293893 -0.5 0.404509 0 0.5 0 0 0.5 0 "
Normals="0.7236065,0.4472139,0.5257313 0.2763934,0.4472138,0.8506507 0.5308242,0.4294462,0.7306172 0.2763934,0.4472138,0.8506507 0,0.4294458,0.9030925 0.5308242,0.4294462,0.7306172 0.2763934,0.4472138,0.8506507 -0.2763934,0.4472138,0.8506507 0,0.4294458,0.9030925 -0.2763934,0.4472138,0.8506507 -0.5308242,0.4294462,0.7306172 0,0.4294458,0.9030925 -0.2763934,0.4472138,0.8506507 -0.7236065,0.4472139,0.5257313 -0.5308242,0.4294462,0.7306172 -0.7236065,0.4472139,0.5257313 -0.858892,0.429446,0.279071 -0.5308242,0.4294462,0.7306172 -0.7236065,0.4472139,0.5257313 -0.8944269,0.4472139,0 -0.858892,0.429446,0.279071 -0.8944269,0.4472139,0 -0.858892,0.429446,-0.279071 -0.858892,0.429446,0.279071 -0.8944269,0.4472139,0 -0.7236065,0.4472139,-0.5257313 -0.858892,0.429446,-0.279071 -0.7236065,0.4472139,-0.5257313 -0.5308242,0.4294462,-0.7306172 -0.858892,0.429446,-0.279071 -0.7236065,0.4472139,-0.5257313 -0.2763934,0.4472138,-0.8506507 -0.5308242,0.4294462,-0.7306172 -0.2763934,0.4472138,-0.8506507 0,0.4294458,-0.9030925 -0.5308242,0.4294462,-0.7306172 -0.2763934,0.4472138,-0.8506507 0.2763934,0.4472138,-0.8506507 0,0.4294458,-0.9030925 0.2763934,0.4472138,-0.8506507 0.5308249,0.4294459,-0.7306169 0,0.4294458,-0.9030925 0.2763934,0.4472138,-0.8506507 0.7236068,0.4472141,-0.5257306 0.5308249,0.4294459,-0.7306169 0.7236068,0.4472141,-0.5257306 0.8588922,0.4294461,-0.27907 0.5308249,0.4294459,-0.7306169 0.7236068,0.4472141,-0.5257306 0.8944269,0.4472139,0 0.8588922,0.4294461,-0.27907 0.8944269,0.4472139,0 0.858892,0.429446,0.279071 0.8588922,0.4294461,-0.27907 0.8944269,0.4472139,0 0.7236065,0.4472139,0.5257313 0.858892,0.429446,0.279071 0.7236065,0.4472139,0.5257313 0.5308242,0.4294462,0.7306172 0.858892,0.429446,0.279071 " TriangleIndices="0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 " />
</GeometryModel3D.Geometry>
<GeometryModel3D.Material>
<DiffuseMaterial>
<DiffuseMaterial.Brush>
<SolidColorBrush
Color="Red"
Opacity="1.0"/>
</DiffuseMaterial.Brush>
</DiffuseMaterial>
</GeometryModel3D.Material>
</GeometryModel3D>
</Model3DGroup.Children>
</Model3DGroup>
</ModelVisual3D.Content>
</ModelVisual3D>
</Viewport3D.Children>
</Viewport3D>
</Grid>
</UserControl>
Ayrıca bkz.
Başvuru
Kavramlar
WPF 3B Başarımını En Yüksek Düzeye Çıkarma
WPF Genel Bakışı İçinde Şekiller ve Temel Çizimler
Resimler, Çizimler ve Görsellerle Boyama