background image

 

1

Obiektowy system graficzny

dr inż. Henryk Olszewski

background image

 

2

Ćwiczenia:
Przywrócić standardowe wartości obiektu root:

»

 

reset(0)

Wyświetlenie  bieżącego  ustawienia  cechy  ScreenSize  obiektu 
root:

»

 

get(0,’ScreenSize’)

Uaktywnienie układu współrzędnych o identyfikatorze id:

»

 

axes(id)

Operacje na obiektach graficznych - 

ćwiczenia

background image

 

3

Przykład przypisania zmiennej hh2 wartości identyfikatora:

»

 

x=0:pi/15:6*pi;

»

 

hh2=plot(x,cos(2.*x)./sqrt(x+1),’:’,x,sin(x.*2));

Zmienna  hh2  jest  wektorem  dwuelementowym  i  reprezentuje 
wykonanie wykresu:

»

 

hh2

hh2=

  3.0010

102.0009

Do  każdego  można  się  odwołać  (poprzez  nazwę  zmiennej 
zawierającej  identyfikator  obiektu),  oczytać  –  funkcja  get  lub 
zmienić jego właściwości – funkcja set. Nie zaleca się stosowanie 
identyfikatorów w postaci liczb. 

Operacje na obiektach graficznych - 

ćwiczenia

background image

 

4

Operacje na obiektach graficznych - 

ćwiczenia

0

2

4

6

8

10

12

14

16

18

20

-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

background image

 

5

Każdy obiekt graficzny posiada własną bazę danych, której pola 
zwierają  informacje  o  cechach  (argumentach)  tego  obiektu. 
Nazwy  i  ilość  pól  zależą  od  typu  obiektu.  Wartości  pól 
(argumenty  obiektów)  są  określane  w  momencie  tworzenia 
obiektów.

Pobranie informacji o aktywnym oknie:

»

 

get(gcf)

Pobranie informacji o aktywnym układzie współrzędnych:

»

 

get(gca)

Pobranie informacji o aktywnym obiekcie:

»

 

get(gco)

Dla  innych  obiektów  pierwszym  argumentem  funkcji  get  i  set 
jest identyfikator (handle). 

Cechy obiektów graficznych - 

ćwiczenia

background image

 

6

Rezultat działania funkcji get:

»

 

get(hh2(1))

Color = [0 0 1]
EraseMode = normal
LineStyle = :
LineWidth = [0.5]
Marker = none
MarkerSize = [6]
MarkerEdgeColor = auto
MarkerFaceColor = none
XData = [ (1 by 91) double array]
YData = [ (1 by 91) double array]
ZData = []

Cechy obiektów graficznych - 

ćwiczenia 

0

2

4

6

8

10

12

14

16

18

20

-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

background image

 

7

Rezultat działania funkcji get:

BeingDeleted = off

ButtonDownFcn = 

Children = []

Clipping = on

CreateFcn = 

DeleteFcn = 

BusyAction = queue

HandleVisibility = on

HitTest = on

Interruptible = on

Parent = [101.001]

Cechy obiektów graficznych - 

ćwiczenia

0

2

4

6

8

10

12

14

16

18

20

-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

background image

 

8

Rezultat działania funkcji get:

Selected = off

SelectionHighlight = on

Tag = 

Type = line

UIContextMenu = []

UserData = []

Visible = on

Cechy obiektów graficznych - 

ćwiczenia 

0

2

4

6

8

10

12

14

16

18

20

-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

background image

 

9

Informacje o przodku obiektu:

»

 

hp=get(hh2(1),’Parent’);get(hp)

Funkcja  set(handle)  umożliwia  wyświetlenie  listę  wariantów 

wartości  cech  obiektów.  Bieżące  wartości  cech  (atrybuty)  są 

umieszczone w nawiasach okrągłych:

»

 

set(hh2(1))

 Color
 EraseMode: [ {normal} | background | xor | none ]
 LineStyle: [ {-} | -- | : | -. | none ]
 LineWidth
 Marker: [ + | o | * | . | x | square | diamond | v | 

^   

]| > | < | pentagram | hexagram | {none} ]

 MarkerSize
 MarkerEdgeColor: [ none | {auto} ] -or- a ColorSpec.

Cechy obiektów graficznych - 

ćwiczenia

background image

 

10

 XData
 YData
 ZData

  ButtonDownFcn:  string  -or-  function  handle  -or-  cell   

array

 Children
 Clipping: [ {on} | off ]
 CreateFcn: string -or- function handle -or- cell array
 DeleteFcn: string -or- function handle -or- cell array
 BusyAction: [ {queue} | cancel ]
 HandleVisibility: [ {on} | callback | off ]
 HitTest: [ {on} | off ]
 

Cechy obiektów graficznych - 

ćwiczenia

background image

 

11

 

Interruptible: [ {on} | off ]

 Parent

 Selected: [ on | off ]

 SelectionHighlight: [ {on} | off ]

 Tag

 UIContextMenu

 UserData

 Visible: [ {on} | off ]

 

Cechy obiektów graficznych - 

ćwiczenia

0

2

4

6

8

10

12

14

16

18

20

-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

background image

 

12

Zmiana  wartości  cechy  dotyczącej  kolorowi  w  obiekcie  o 
identyfikatorze hh2(1):

set(hh2(1),’Color’,’r’)

powoduje zmianę koloru pierwszej linii na kolor czerwony. 

Cechy obiektów graficznych - 

ćwiczenia

0

2

4

6

8

10

12

14

16

18

20

-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

0

2

4

6

8

10

12

14

16

18

20

-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

background image

 

13

Dopuszczalna jest zmiana grupy (nieograniczonej) cech obiektów 
w jednym poleceniu set:

set(hh2(1),’Color’,’b’,’LineWidth’,2)

Cechy obiektów graficznych - 

ćwiczenia

0

2

4

6

8

10

12

14

16

18

20

-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

0

2

4

6

8

10

12

14

16

18

20

-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

background image

 

14

Zmiana rodzaju linii na linię ciągłą, pogrubioną:

set(hh2(1),’LineStyle’,’-’,’LineWidth’,2)

Cechy  obiektów  mogą  być  określone  w  momencie  tworzenia 
obiektów.  Dalsze  zmiany  obiektów  wymagają  znajomości  ich 
identyfikatorów. 

Cechy obiektów graficznych - 

ćwiczenia

0

2

4

6

8

10

12

14

16

18

20

-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

background image

 

15

W  programie  MATLAB  można  ustawić  domyślne  wartości  cech 
obiektów graficznych:

set(hh2(1),’DefaultLineStyle’,’-’,...

’ DefaultLineWidth’,2.0)

Powyższe  polecenia  można  zapisać  w  plikach  konfiguracyjnych 
matlabrc.m lub startup.m.

Cechy obiektów graficznych – 

ćwiczenia

background image

 

16

Cechy obiektów graficznych

background image

 

17

Cechy obiektów graficznych

background image

 

18

Funkcje dotyczące odbicia i źródła światła:

źródło światła, współrzędne kamery:

camlight

Ćwiczenie 1:

t=2/3:1/6:.7*pi;

y=sin(t)

[a,b,c]=cylinder(y);

%dane do narysowania bryły

subplot(1,2,1),

h1=surf(a,b,c),

title(‘dzban’)

set(h1,’facecolor’,’y’)

%nadanie bryle koloru żółtego

subplot(1,2,2),

h2=surf(a,b,c) 

%druga bryła (prawa)

set(h2, ‘facelighting’,’phong’,’backfacelight’,’lit’)

%odblaski

Cechy obiektów graficznych – źródła 

światła

background image

 

19

set(h2,’facecolor’,’y’) %nadanie koloru żółtego

light(‘position’,[-2,-3,6])

%utworzenie obiektu

%źródła światła

title(‘dzban odbijający światło’)

Cechy obiektów graficznych – źródła 

światła

background image

 

20

Cechy obiektów graficznych – źródła 

światła

background image

 

21

Tekstura  –  nakładanie  płaskiego  rysunku  na  zakrzywioną 

powierzchnię trójwymiarową

%kontynuacja poprzedniego ćwiczenia

load mandrill 

%wczytanie ilustracji, tablice X, map

x=[X X];

%dwukrotne powtórzenie ilustracji

x=flipud(x);

%odbicie lustrzane ilustracji:

%góra/dół

set(h1,’CData’,x,’FaceColor’,’texturemap’) 

%nałożenie

%tekstury

colormap(map)

%paleta barw

set(h1,’facelighting’,’phong’,’backfacelight’,’lit’)

%odbicie światła

light(‘position’,[-2,-3,.6])

%utworzenie obiektu

%źródło światła

Cechy obiektów graficznych – tekstury

background image

 

22

brighten(0.05)

%rozjaśnienie rysunku

W rysunku wykorzystano plik z grafiką:

matlab\toolbox\matlab\demos\mandrill.mat

Funkcję  findobj  użyto  w  celu  znalezienia  identyfikatora 
powierzchni  narysowanej  bryły.  Nałożenie  tekstury  na  obiekt 
graficzny wymaga przypisania odpowiednich wartości polom tego 
obiektu:

texturemap

do pola:

FaceColor

x=[X,X]

do pola:

CData

Cechy obiektów graficznych – tekstury

background image

 

23

Cechy obiektów graficznych – tekstury

background image

 

24

Ćwiczenie 2:

Narysować  trójwymiarowy  wykres  funkcji:  z(x,y)=sin(x)
+cos(2*y)
 w przedziale: x,y

<-2

,2

>.

Zmienić cechy obiektu axis: typ linii pomocniczych na linie 
ciągłe, położenia oznaczeń na osiach x i y określone są zaś 
wektorem [-2

, -

, 0, 

, 2

].

Cechy obiektów graficznych

-6.2832

-3.1416

0

3.1416

6.2832

-6.2832

-3.1416

0

3.1416

6.2832

-2

-1

0

1

2

background image

 

25

Ćwiczenie 2:
Polecenia skryptu osie.m:

clf         

%czyszczenie aktywnego okna rysunkowego

[x,y]=meshgrid(-2*pi:0.2:2*pi);
z=sin(x)+cos(2*y);
mesh(x,y,z)
grid on;    

%dodanie do rysunku siatki

axis=([-2*pi 2*pi -2*pi 2*pi])  

%ustawienie zakresu osi

xt=-2*pi:pi:2*pi;
yt=-2*pi:pi:2*pi;
set(gca,'GridLineStyle','-')  

%zmiana cechy obiektu

set(gca,'XTick',xt)      

%określonego przez funkcję gca

set(gca,'YTick',yt)

Cechy obiektów graficznych

background image

 

26

-6.2832

-3.1416

0

3.1416

6.2832

-6.2832

-3.1416

0

3.1416

6.2832

-2

-1

0

1

2

Ćwiczenie 2:

Cechy obiektów graficznych

background image

 

27

Animacja – przykłady (3)

Wizualizacja ruchu cząsteczek powietrza
Wizualizacja ruchu cząsteczek powietrza jest pomocna przy analizie 
kierunku  przepływu  powietrza  i  badaniu  pola  prędkości.  Cząsteczki 
powietrza  (przedstawione  za  pomocą  markerów)  przesuwają  się 
wzdłuż  linii  prądu  powietrza,  Prędkość  każdej  cząstki  jest 
proporcjonalna do amplitudy (wartości bezwzględnej) pola prędkości 
w każdym jego punkcie znajdującym się na linii prądu.

1.  Warunki początkowe i  zakres obliczeń 
Analiza objętość powietrza na początku obliczeń obejmuje:

 

load wind

[sx sy sz] = meshgrid(100,20:2:50,5);

background image

 

28

Animacja – przykłady (3)

2. Wykres linii przepływu cząsteczek powietrza
W  przykładzie  użyto  funkcje  rysujące  linie  przepływu  stream3
streamline  wizualizujące  ruch  cząsteczek  powietrza.  Parametrami 
funkcji  stream3  są:  x,  y,  u  –  współrzędne  pola  prędkości,  u,  v,  w  – 
wartości pola prędkości, sx,sysz – początkowe położenie linii prądu. 

Funkcja  view  definiuje  punkt,  z  którego  oglądamy  wykres.  Funkcja 
view(2) ustala widok  dwuwymiarowy. Funkcja  view(3) ustala widok 
trójwymiarowy izoparametryczny.

 verts = stream3(x,y,z,u,v,w,sx,sy,sz);
 sl = streamline(verts);
 view(3)

background image

 

29

Animacja – przykłady (3)

100

110

120

130

20

30

40

50

3.5

4

4.5

5

background image

 

30

Animacja – przykłady (3)

3. Defincja widoku
Wszystkie linie prądu rozpoczynają się z płaszczyzny z = 5, niektóre linie prądu 
spadają  spiralnie  w  dół.  Kształt  linii  prądu  określa  miejsce,  z  którego  będzie 
oglądana animacja (tak by linie prądu znające się w pobliżu płaszczyzny z = 5 i 
linie spiralne były widoczne) – funkcja view

Przyjęto  współczynniki  perspektywy  [2  2  0.125]  (polecenie  daspect),  co 
pozwala  na  uzyskanie  największej  rozdzielczości  w  kierunku  osi  z  układu 
współrzędnych dzięki czemu wyeksponowane są spiralne linie prądu. 

Przy  pomocy  polecenia  axis  tight  zamrożono  osie  wykresu  (odpowiednik 
polecenie  axis  manual).  Wykres  3D  rysowany  objęty  jest  krawędziami 
prostopadłościanu – polecenie box on

  

view(-10.5,18)

 daspect([2 2 0.125]) 
 axis tight; box on

background image

 

31

Animacja – przykłady (3)

100

105

110

115

120

125

130

20

30

40

50

3.4

3.6

3.8

4

4.2

4.4

4.6

4.8

5

background image

 

32

Animacja – przykłady (3)

4. Wizualizacja prędkości cząsteczek powietrza
W  pierwszym  etapie  określane  są  prędkości  wzdłuż  linii  prądu  w 
miejscach,  w  których  rysowane  są  cząsteczki  powietrza  (za  pomocą 
markerów). Funkcja interpstreamspeed oblicza powyższe parametry 
w  oparciu  o  wartości  współrzędnych  linii  prądu  oraz  prędkości 
cząsteczek.  Przyjęto  współczynnik  scali  0,05  w  celu  zwiększenia 
liczby interpolowanych wartości prędkości. 

W  celu  zwiększenia  szybkości  animacji  ustalono  dla  osi  wykresu 
właściwość DrawMode=fast   (set(gca,'drawmode','fast'). 

Funkcja  streamparticles  pozwala  na  ustalenie  następujących 
właściwości:
1) animacja zostanie uruchomiona 10 razy (właściwość Animate),
2) ruch wszystkich cząsteczek powietrza rozpocznie się równocześnie
    (właściwość ParticleAlignment),

background image

 

33

Animacja – przykłady (3)

3) krawędzie markerów cząsteczek powietrza nie są rysowane
    (właściwość MarkerEdgeColor), co zazwyczaj zwiększa szybkość
    animacji,
4) kolor markerów ustalona na czerwony (właściwość
    MarkerFaceColor),
5) markery są rysowane w postaci kółek (właściwość Marker). 

iverts = interpstreamspeed(x,y,z,u,v,w,verts,0.05);
set(gca,'drawmode','fast');
streamparticles(iverts,15,...
    'Animate',10,...
    'ParticleAlignment','on',...
    'MarkerEdgeColor','none',...
    'MarkerFaceColor','red',...
    'Marker','o');

background image

 

34

Animacja – przykłady (4)

W przykładzie tym kamera przemieszcza się w trójwymiarowej przestrzeni  rysunku  wiru  powietrza. W 
programie  MATLAB  istnieje  możliwość  przesuwania  kamery  przez  poszczególne  regiony  sceny 
wykresu
 (ostrość kamery jest na bieżąco dostrajana na obserwowane obiekty) lub  poruszania kamery 
stale skierowanej na określony punkt wykresu
 (ostrość kamery  jest ustawiona na ten punkt). 

W celu osiągnięcia powyższych efektów przesuwamy krokowo  kamerę wzdłuż zadanej osi x. Efekt 

lotu  kamery  uzyskamy  równocześnie  przesuwając  położenie  kamery  i  zmieniając  punkt,  na  który 
skierowana jest kamera 

W  przykładzie  tym  zamodelowano  ruch  kamery  wewnątrz  izopowietrzni  wiru  powietrza 

(powierzchni,  na  której  cząstki  powietrza  mają  stałą  prędkość)  wybranej  z  przestrzennego  modelu  pola 
prędkości cząstek powietrza tornada zaobserwowanego w 1998 r. w stanie Teksas, USA.

background image

 

35

Animacja – przykłady (4)

W przykładzie zastosowano:
• izopowierzchnie  i  wykresy,  w  których  punkty  zaznaczane  są  markerami  w  postaci  stożków,  w  celu 

ilustracji przepływu powietrza w zadanej objętości powietrza,

• źródła światła w oświetlenia izopowierzchni i stożków w zadanej objętości powietrza,
• linie prądu w celu zdefiniowania trajektorii ruchu kamery,
• równoczesną zmianę położenia kamery, punktu na który skierowana jest kamera oraz źródeł światła.

1. Wczytanie danych i ich wizualizacja

W pierwszy etapie animacji wczytano dane wykresu z pliku wind.mat  i na ich postawie wykonano rysunek 
przepływu powietrza przy pomocy funkcji coneplot.

load wind
wind_speed = sqrt(u.^2 + v.^2 + w.^2);

background image

 

36

Animacja – przykłady (4)

W programie MATLAB funkcja patch tworzy wypełnione wielokąty zwane płatami (ang. patches).

 

id=patch(x,y,c)
id=patch(x,y,z,c)
id=patch(x,y,c,nazwa_cechy1, wartość1,...
   nazwa_cechy2, wartość2,...)
id=patch(x,y,z,c,nazwa_cechy1, wartość1,...
   nazwa_cechy2, wartość2,...)

Wektory xyz określają współrzędne wierzchołków wielokąta, zaś c określa jego kolor. Kolor jest określony przez 

podanie indeksu koloru w powiązanej z aktualnym układem mapie kolorów. Argument c może być:
1) skalarem – płat będzie jednokolorowy,
2) jednoznakowym ciągiem – płat będzie jednokolorowy, oznaczenia
    kolorów są takie same jak w przypadku funkcji plot,

background image

 

37

Animacja – przykłady (4)

3) wektorem o takim samym wymiarze jak wektory xyz elementy
    wektora określają kolory w odpowiednich wierzchołkach, kolory
    poszczególnych punktów wielokąta będą miały kolory pośrednie,
    płynnie zmieniające się w zależności od położenia punktu, kolor
    każdego punktu będzie wynikiem interpolacji dwuliniowej kolorów
    wierzchołków. 

Argumenty  x,  y,  z  mogą  być  macierzami  o  identycznych  wymiarach.  Utworzony  zostanie  jeden  płat  dla  każdej 
kolumny macierzy. W tym przypadku argument c będzie wektorem wierszowym dla płatów jednokolorowych i macierzą 
dla płatów o kolorach interpolowanych. 

Funkcja  patch  zwraca  kolumnowy  wektor  identyfikatorów  obiektów  typu  patch.  Za  każdą  trójką  parametrów  x,  y,  z 
może wystąpić zestaw par: nazwa cechywartość cechy określającej dodatkowe cechy poszczególnych płatów. 

background image

 

38

Animacja – przykłady (4)

Funkcja isosurface:

 fv = isosurface(X,Y,Z,V,isovalue)

 

oblicza  współrzędne  izopowierzchni  dla  danych  zdefiniowanych  w  zadanej  objętości  V,  dla  określonej  wartości 
parametru  isovalue  (wszystkie  punkty  izopowierzchni    mają  tę  wartość  parametru  isovalue).  Macierze  X,  Y  i  Z 
określają dane analizowanej objętości, w której wyznaczana jest izopowierzchnia. W rezultacie otrzymujemy zmienną 
fx zawierającą parametry siatki wielokątów i współrzędne wierzchołków izopowierzchni, które mogą być bezpośrednio 
użyte jako dane funkcji patch

 hpatch = patch(isosurface(x,y,z,wind_speed,35));

Funkcja isonormals:

 n = isonormals(X,Y,Z,V,vertices)

background image

 

39

Animacja – przykłady (4)

oblicza  wektory  normalne  do  izopowierzchni  w  jej  wierzchołkach  vertices  dla  gradientu  danej  objętości  V
Macierze XY i Z zawierają współrzędne objętości V. Obliczone normalne są zapamiętane w zmiennej n.

 isonormals(x,y,z,wind_speed,hpatch)
 set(hpatch,'FaceColor','red','EdgeColor','none');

Funkcja reducepatch:

 reducepatch(p,r) 

redukuje  liczbę  wypełnionych  wielokątów  zwanych  płatami  (ang.  patches)  zadanego  obiektu  p  przy 
zachowaniu  ogólnego  kształtu  wyjściowego  obiektu.  Jeżeli  r  jest  mniejsze  niż  1,  liczba  wielokątów  ulega 
redukcji, np. dla r=0.2 liczba wielokątów (płatów) ulega zredukowaniu o 20%. Jeżeli r jest większe lub równe 1, 
to r jest docelową liczbą wielokątów, np. dla r=400 liczba wielokąt zostaje zredukowana do 400. 

background image

 

40

Animacja – przykłady (4)

 [f vt] = reducepatch(isosurface(x,y,z,wind_speed,45),0.05); 

Funkcja  daspect  umożliwia  określenie  współczynników  skali  dla  osi  x,  y  i  z  układu  współrzędnych.  Przyjęcie  współczynników  skali 
[1,1,1] przed rysowaniem markerów - stożków pozwala na właściwe przeliczenie wymiarów markerów dla końcowego widoku:
 

daspect([1,1,1]);

Funkcja coneplot:
 coneplot(X,Y,Z,U,V,W,Cx,Cy,Cz) 
wyświetla  wektory  prędkości  w  postaci  stożków
  rysowanych  w  punktach  pola  prędkości,  których  osie  są  zgodne  z  kierunkami 
wektorów prędkości, o długościach proporcjonalnych do długości wektorów prędkości. 
   XYZ – współrzędne punktów pola prędkości,
   UVW – składowe wektorów prędkości, macierze te muszą mięć te
   same wymiary, monotoniczne (podobnie jak dane generowane przez
   funkcję meshgrid),
   CxCyCz – położenie markerów – stożków w polu prędkości.

background image

 

41

Animacja – przykłady (4)

hcone = coneplot(x,y,z,u,v,w,vt(:,1),vt(:,2),vt(:,3),2);
set(hcone,'FaceColor','blue','EdgeColor','none');

2. Parametry widoku
Kolejnym  etapem  animacji  jest  ustalenie  parametrów  widoku.  Przyjęcie  perspektywy  umożliwia  uzyskanie  efektu  głębi  podczas 
ruchu kamery wewnątrz izopowierzchni (funkcja  camproj). Przypisanie kątowi widoku kamery stałej wartości zabezpiecza przed 
automatyczną regulacją kąta tak, by wszystkie obiekty znajdowały się w obserwowanej scenie (również i powiększenie przyjmuje 
zadaną wielkość – funkcja camva).

 camproj perspective 
 camva(25)

3. Źródła światła
Ustawienie  źródła  światła  w  miejscu  ustawienia  kamery  oraz  zmiana  współczynników  odbicia  światła  izopowierzchni  i  stożków 
poprawia realizm sceny. 

background image

 

42

Animacja – przykłady (4)

Ustawienie źródła światła w miejscu ustawienia kamery pozwala na podświetlanie (efekt reflektora) filmowanej 
sceny  podczas  przesuwania  kamery  wewnątrz  izopowierzchni  (funkcja  camlight).  Określenie  współczynników 
odbicia  izopowierzchni  umożliwia  uzyskanie  efektu  ciemnego  pomieszczenia    (własność  AmbientStrength  = 
0.1
).  Dodatkowo  przyjęto  wysoki  współczynnik  odbicia  materiału  (własność  SpecularStrength  =  1  oraz 
DiffuseStrength  =  1).  Przyjęcie  w  przypadku  stożków  cechy  SpecularStrength  =  1  pozwala  na  uzyskanie 
wysokiego odbicia światła: 

hlight = camlight('headlight'); 
set(hpatch,'AmbientStrength',.1,...
      'SpecularStrength',1,...
      'DiffuseStrength',1);
set(hcone,'SpecularStrength',1);
set(gcf,'Color','k')

background image

 

43

Animacja – przykłady (4)

4. Cieniowanie sceny
W przykładzie ustalono źródła światła, stąd konieczne jest wykonanie cieniowania sceny. 

 

lighting gouraud

 set(gcf,'Renderer','OpenGL')

lub:

 lighting phong
 set(gcf,'Renderer','zbuffer')

5. Definiowanie trajektorii kamery i linii prądu
Linie prądu obrazują kierunek przepływu w polu prędkości. W przykładzie użyto współrzędne xy i z danych pojedynczej 
linii prądu do zdefiniowania trajektorii przebiegającej przez zadaną objętość. Po trajektorii tej przemieszcza się kamera. 

background image

 

44

Animacja – przykłady (4)

Wygenerowano  linię  prądu  rozpoczynające  się  w  punkcie  o  współrzędnych:  x  =  80,  y  =  30,  z  =  11.  Przy 
pomocy  funkcji  get  pobrano  współrzędne  x,  y,  z  linii  prądu,  następnie  usunięto  linię  prądu  (w  programie 
MATLAB istnieje również możliwość użycia funkcji stream3 do obliczeń parametrów linii prądu bez rysowania jej 
w oknie rysunkowym).

  

hsline = streamline(x,y,z,u,v,w,80,30,11);

 xd = get(hsline,'XData');
 yd = get(hsline,'YData');
 zd = get(hsline,'ZData');  
 delete(hsline)

6. Przelot kamery
W  celu  uzyskania  przelotu  kamery  przez  scenę  zastosowano  zmianę  położenia  kamery  i  punktu,  na  który 
skierowana jest kamera wzdłuż tej samej trajektorii. 

background image

 

45

Animacja – przykłady (4)

W przykładzie celem kamery jest pięć elementów znajdujących się przed kamerą wzdłuż osi  x lokalnego układu współrzędnych 
kamery.  Dodanie  niewielkiej  wartości  do  położenia  kamery  w  kierunku  x  lokalnego  układu  współrzędnych  zabezpiecza  przed 
przypadkiem, w którym kamera i cel kamery znajdują się w jednym punkcie (co następuje, gdy spełniony jest warunek:  xd(n) = 
xd(n+5)
). Przelot kamery uzyskano:
1) zmieniając położenie kamery i celu kamery – obydwa obiekty poruszają
    się wzdłuż zadanych współrzędnych linii prądu,
2) przesuwając źródło światła wraz z kamerą,
3) używając funkcję drawnow wyświetlającą wynik animacji

for i=1:length(xd)-50
  campos([xd(i),yd(i),zd(i)])
  camtarget([xd(i+5)+min(xd)/100,yd(i),zd(i)])
  camlight(hlight,'headlight')
  drawnow
end

background image

 

46

Animacja – przykłady (4)

background image

 

47

Animacja – przykłady (4)

background image

 

48

Animacja – przykłady (4)

background image

 

49

Dziękuję za uwagę


Document Outline