Ten wpis jest kontynuacją tematyki związanej z WPF 3D, w którym przedstawiony zostanie ważny element każdej sceny, a mianowicie światło.
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.
W WPF 3D światło
(Light) jest elementem każdej sceny i tak jak każdy element sceny
jest umieszczone w scenie jako zawartość (Content) obiektu
ModelVisual3D (wspominałem
o tym już wcześniej na etapie omawiana podstawowych elementów
sceny w WPF 3D). W scenie możemy stosować kilka różnych
świateł, a każde może być innego typu. Mamy do dyspozycji
następujące typy świateł: AmbientLight, DirectionalLight,
PointLight, SpotLight
AmbientLight
Jest ono
najprostszym sposobem oświetlenia sceny i nazywane jest światłem
otoczenia. Światło cechuje duże jego rozproszenie. Obiekty nim
oświetlane, są oświetlone równomiernie i chciałyby się rzec, że
światło to świeci z każdej strony. Często jest ono stosowane,
jako dodatkowe źródło światła, gdyż dzięki niemu łatwiej
spowodować, by żadne (nie oświetlone przez inne źródła światła)
ściany (trójkąty) w scenie nie były „czarne”. Jego jedynym
parametrem jest kolor (Color).
DirectionalLight
Jest to światło
kierunkowe. Można je porównać do bardzo odległego źródła
światła, którego promienie padające na obiekty w scenie są
niemal równoległe.
Posiada kolor (Color)
oraz kierunek promieni (Direction).
Nie posiada określonej pozycji, więc oświetla wszystkie obiekty na
scenie w ten sam sposób.
PointLight
Jest to źródło
światła o charakterze punktowym, świecące we wszystkich
kierunkach. Przy konfiguracji tego oświetlenia wskazujemy jego
pozycję (Position)
i kolor (Color).
Światło to może również przygasać wraz z rosnącą odległością
od oświetlanego obiektu (właściwości: ConstantAttenuation,
LinearAttenuation,
QuadraticAttenuation).
SpotLight
To światło to
„lampka” lub „reflektor”, który punktowo świeci na obiekt.
Jednak w odróżnieniu od oświetlenia typu PointLight,
światło to ma pewien charakter kierunkowy (wskazujemy Direction)
oraz charakteryzuje je też kąt przestrzenny świecenia (właściwości
InnerConeAngle
oraz OuterConeAngle)
Porównanie oświetlenia w scenie 3D
To porównanie
powstało w oparciu o scenę (opisaną w XAML):
<Viewport3D Name="mainViewport" ClipToBounds="True"> <Viewport3D.Camera> <PerspectiveCamera FarPlaneDistance="100" LookDirection="-10,-11,-12" UpDirection="0,1,0" NearPlaneDistance="1" Position="10,11,12" FieldOfView="70" /> </Viewport3D.Camera> <ModelVisual3D> <ModelVisual3D.Content> <!--<DirectionalLight Color="White" Direction="-1,-2,0" />--> <!--<PointLight Color="White" Position="2,2,2"/>--> <!--<SpotLight Color="White" Position="2,2,2" Direction="-1,-2,0"/>--> <AmbientLight Color="White" /> </ModelVisual3D.Content> </ModelVisual3D> </Viewport3D>
Światło w scenie było wybrane jako jedno z
występujących w kodzie XAML powyżej (od-komentowane było to
właściwe). Dodatkowo na scenie umieszczono dwa obiekty sześcian i
czworościan (zgodnie
z omawianymi wcześniej funkcjami):
ModelVisual3D mv3d = new ModelVisual3D(); mv3d.Content = CreateCubeModel3DGroup( -5, 0, 0, 4, 4, 4 ); this.mainViewport.Children.Add( mv3d ); ModelVisual3D mv3d_2 = new ModelVisual3D(); mv3d_2.Content = CreateTetraederModel3DGroup( 5, 0, 0, 4, 4, 4 ); this.mainViewport.Children.Add( mv3d_2 );
fajny artykuł, będę tu wracać
OdpowiedzUsuńCiekawe i interesujace wpisy
OdpowiedzUsuńwspaniały blok i fajne treści
OdpowiedzUsuń