piątek, 6 sierpnia 2010

[WPF 3D] Światło, ... kamera, ... trójkąt [PL]

Promuj
W niniejszym post'cie chciałbym zaprezentować podstawowe elementy niezbędne do rozpoczęcia przygody z grafiką trójwymiarową opartą o Windows Presentation Foundation (WPF).
Niniejszy wpis poza prezentacją różnych i niezależnych od konkretnego wykorzystania treści stanowi również opis pewnych zagadnień związanych z projektem Mesh Diagram 3D.Informacje dotyczące projektu oznaczone są etykietą MeshDiagram3D.
Przed przystąpieniem do pisania jakiejkolwiek aplikacji wykorzystującej WPF 3D należy zrozumieć pewne podstawy:
  • potrzebujemy kontrolkę, która zapewni nam możliwość wyświetlania sceny 3D – w WPF będzie to Viewport3D,
  • należy ustawić kamerę, czyli położenie i kierunek patrzenia oglądającego. Ustawiamy to we właściwości Viewport3D.Camera, a do dyspozycji mamy kamery: OrtographicCamera oraz PerspectiveCamera,
  • następnie dodajemy elementy, które tworzą naszą scenę. Są to elementy typu ModelVisual3D. W tym miejscu należy pamiętać o następujących ważnych szczegółach:
    • do sceny jako Content obiektu ModelVisual3D należy dodać ŚWIATŁO! Do dyspozycji mamy: AmbientLight, DirectionalLight, PointLight, SpotLight.
    • obiekty oglądane na scenie składają się z najprostszych wycinków płaszczyzn, czyli TRÓJKĄTÓW!
Ostatecznie tworzymy strukturę zupełnie jak na rysunku:
Jako przykład gotowego kodu można wypróbować następujący zapis w XAML:
<Viewport3D Name="mainViewport" ClipToBounds="True">
    <Viewport3D.Camera>
        <PerspectiveCamera
    FarPlaneDistance="100"
    LookDirection="-11,-10,-9"
    UpDirection="0,1,0"
    NearPlaneDistance="1"
    Position="11,10,9"
    FieldOfView="70" />
    </Viewport3D.Camera>
    <ModelVisual3D>
        <ModelVisual3D.Content>
            <DirectionalLight
                    Color="White"
                    Direction="-2,-3,-1" />
        </ModelVisual3D.Content>
    </ModelVisual3D>
    <ModelVisual3D>
        <ModelVisual3D.Content>
            <Model3DGroup>
                <GeometryModel3D>
                    <GeometryModel3D.Material>
                        <DiffuseMaterial Brush="Blue" />
                    </GeometryModel3D.Material>
                    <GeometryModel3D.Geometry>
                        <MeshGeometry3D Positions="0,0,0 0,2,0 0,0,2" TriangleIndices="0 1 2"/>
                    </GeometryModel3D.Geometry>
                </GeometryModel3D>
            </Model3DGroup>
        </ModelVisual3D.Content>
    </ModelVisual3D>
</Viewport3D>
Powyższy kod daje w efekcie:
W następnym post'cie zostanie pokazana możliwość budowania sceny z poziomu kodu programu w C#.
Promuj

4 komentarze:

  1. Rzekłbym podręcznikowy przykład przepisany z książki progamming in 3d petzlorda ;)

    OdpowiedzUsuń
  2. Przyznam, że książki "progamming in 3d petzlorda" nie znam, może podaj dokładniej tytuł, być może warto bym do niej zajrzał...

    Ja na ten temat (WPF i 3D) szukałem jakichś informacji w Training Kit'cie do WPF'a i ... nic. Jeżeli ktoś zna jakąś wartą do przeczytania książkę to niech poda tytuł.

    Zgadzam się, że niniejszy post jest bardzo prosty, ale wydaje mi się, że może warto zacząć od podstaw, gdyż nie każdy je zna, a dopiero później przejdę do czegoś gęstszego.

    Zapraszam więc do dalszego czytania!

    OdpowiedzUsuń
  3. Chodzi o "3D Programming for Windows" (http://www.charlespetzold.com/3d/) Charlesa Petzolda, guru (między innymi) WPFa 3D. Polecam zapoznać się z biblioteką Petzold.Media3D.dll - robi wrażenie :)

    OdpowiedzUsuń
  4. Dzięki za informacje. Książka wygląda potencjalnie dość ciekawie. Bibliotece będę musiał się przyjrzeć. Wcześniej zaglądałem do 3dtools ale nie do końca spełnia moje potrzeby.

    W każdym razie jeszcze raz dzięki za informacje i zapraszam do dalszej lektury i komentowania wpisów.

    OdpowiedzUsuń

Posty powiązane / Related posts