simple directmedia layer - cnrvcg.isti.cnr.it/~tarini/teaching/cg07/lez05.implementaz.pdf• simple...

6
Simple DirectMedia Layer cross-platform multimedia library GNU LGPL fornisce accesso (a livello abb basso) a audio, keyboard, mouse, joystick, windowing 3D hardware via OpenGL 2D video framebuffer. gira su: Linux, Windows, BeOS, MacOS X ... completato di librerie "figlie" per vari scopo (e.g. SDL_png per file png) – C++ main() { init(); do_my_beautiful_algorithm(); exit(); } main() { init(); while (true) { get_event() ; process_event(); } } #ifdef WIN32 #define WIN32_LEAN_AND_MEAN #include <windows.h> #endif #include <GL/gl.h> #include <GL/glu.h> #include <stdlib.h> #include <SDL.h>

Upload: others

Post on 24-Jul-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Simple DirectMedia Layer - CNRvcg.isti.cnr.it/~tarini/teaching/cg07/Lez05.Implementaz.pdf• Simple DirectMedia Layer – cross-platform multimedia library – GNU LGPL – fornisce

����� ������� � ���

���� ����� ��� � ������ � � � ��������� � ��������� � ���������� ����������� ��� !"��� �����# ��� �������$������ ���� �� �&%'��� (���� � ���)"�����*)"�����+����(�� ���,�-+-�.&/'-+0

$+����� �����$+����� �����$+����� �����$+����� �����21�31�31�31�35476 894:26<; :2=?>7@";A:7B; =C47D 82=?82EF :26 8

G�H&I J'KMLNH'I O P'OAQ�R�K&S+T&U V W'IYXZI H<T&['O J \]QM^&_&_&`ba _'c]Q+d�P&O e&W'I \&O V f*g&W&h h i j P \<U&kbI O HAlm^

n =Co7; 82EF 8CB2;Ap�q"; D r7474>sut�vxw yxzbyx{?|x}x~ |?��y?�x|x}�|?���x{?|?�x��yx� �x}x�x�x|?yx� ~ zb�x�� $������+��� �� ������ ����� (������ � ����*%'� ������&%'� �9��� �� ���� ����$��� ��� ������� � ��� � # � #����� � ����� ���������(���� � ��� ��� ���� ���&��/'� #�#��� �����+����+����+���������+����&�9��� �+���+����(��������+������������� (���� � ������ ��� ��� � ��� �*%'����� � (������ �� �� � ��� ��� � ����������� ��(��� ����������$�������$�� � � ���+��� � ������Z��(������ �+��� ������7� � �N�m  ¡&�Z¢ £�� ¤&¥N¦m¤&§x¨ �m©�ªN«N¬m­m� ¦m® «m­m§<­m¯N¦m¡&�

� �������� ������ �������� °(������+��� �+�� ± (���� � ��± �

�7²�¦m©Z³ ´m¨ �M¡&ªN    µ ªm¡&��¶ «N�m� ¦N� ¦M¡&¤&­m© ³ ¤&­m© ¦M  ­*  ¦m·"¸�¬N¦N &¤&�m© ¡&�M¬N³&  ­N¹*  ³ ´m¯Nªm­N¯N¯m³ º¥m� � «Yº ® ® »&¤&¯�¼ ³ ¡&� ³ ¼ ¤&´m©'¼ ³ � ® ½¾� ­m© ³ ´N³ ® ¿NÀ�¸

G�H&I J'KMLNH'I O P'OAQ�R�K&S+T&U V W'IYXZI H<T&['O J \]QM^&_&_&`ba _'c]Q+d�P&O e&W'I \&O V f*g&W&h h i j P \<U&kbI O HAlNÁ

• Simple DirectMedia Layer – cross-platform multimedia library

– GNU LGPL

– fornisce accesso (a livello abb basso) a

• audio,

• keyboard, mouse, joystick,

• windowing

• 3D hardware via OpenGL

• 2D video framebuffer.

– gira su: Linux, Windows, BeOS, MacOS X ...

– completato di librerie "figlie" per vari scopo (e.g. SDL_png per file png)

– C++ ��� � ��3 / / �����9� � � ������� � ��� � G�H&I J'KMLNH'I O P'OAQ�R�K&S+T&U V W'IYXZI H<T&['O J \]QM^&_&_&`ba _'c]Q+d�P&O e&W'I \&O V f*g&W&h h i j P \<U&kbI O HAlmÃ

Ä F�6<rF F�r76 :Å476 >7Æ26 :2=C=?:

suÇ�~ zb�x~ ~ �xzby?��� yxÈ�È�w ��y?Éx|xw�Êxzb�xËxzbyx{?{Ìw�y?� w }x|xy?Éxw����x{?yx}xÉx�xÍ

main(){

init();do_my_beautiful_algorithm();exit();

}

´m�N´M»&­*¹m¦N´N¦M«N¦m©­m«N«m  ³ ¤&­m·&³ �N´m³Î ÏNÐ ÑmÒ ÓmÐ Ð Î Ô ÑÎ ÏNÐ ÑmÒ ÓmÐ Ð Î Ô ÑÎ ÏNÐ ÑmÒ ÓmÐ Ð Î Ô ÑÎ ÏNÐ ÑmÒ ÓmÐ Ð Î Ô Ñ�Õ

G�H&I J'KMLNH'I O P'OAQ�R�K&S+T&U V W'IYXZI H<T&['O J \]QM^&_&_&`ba _'c]Q+d�P&O e&W'I \&O V f*g&W&h h i j P \<U&kbI O HAlNÖ

Ä F�6<rF F�r76 :Å476 >7Æ26 :2=C=?:

× Ä ; p�F 82=?:u:u87qx82EF�;ØÚÙ y?��yx� � �xyx��Û Ù7Ü � Ù y?{?|xÈ�È�yxËx|?vxyx}�Éx� |xzbÈ Ù |x����Ý

main(){

init();while (true) {get_event() ;process_event();

}} ¦m»&¦m´N� ³'� ³ «m��º�ZÞM�Nªm¡&¦�¶ � ­m¡&� ³ ¦m© ­�¼ ¼ ¼�Z¡&³ ¡&� ¦NÞM­*¬m³&¨ ³ ´m³ ¡&� © ¦�Z© ¦m¡&¥N­m«N¦�¶ ÞM³ ´m³ Þ*³ ·&·&­m·&³ �m´N¦�¼ ¼ ¼�Z¯m¦N´m¦m© ­m� ³'¬N­N    µ ­m«N«m  ³ ¤&­m·<³ �N´m¦M¡&� ¦m¡&¡&­�Z�M¬N­M� ¥m© ¦N­N¬M¬N³ ¨ ¨ ¦m© ¦N´m� ³ G�H&I J'KMLNH'I O P'OAQ�R�K&S+T&U V W'IYXZI H<T&['O J \]QM^&_&_&`ba _'c]Q+d�P&O e&W'I \&O V f*g&W&h h i j P \<U&kbI O HAlNß

à :á=C; E7; =?:u:24�47D ; @�:7â"; >2E8 Ääã à7å7æ 87:7B�826 p

#ifdef WIN32#define WIN32_LEAN_AND_MEAN#include <windows.h>#endif

#include <GL/gl.h>#include <GL/glu.h>#include <stdlib.h>#include <SDL.h>

Page 2: Simple DirectMedia Layer - CNRvcg.isti.cnr.it/~tarini/teaching/cg07/Lez05.Implementaz.pdf• Simple DirectMedia Layer – cross-platform multimedia library – GNU LGPL – fornisce

G�H&I J'KMLNH'I O P'OAQ�R�K&S+T&U V W'IYXZI H<T&['O J \]QM^&_&_&`ba _'c]Q+d�P&O e&W'I \&O V f*g&W&h h i j P \<U&kbI O HAlN`

à :á=C; E7; =?:u:24�47D ; @�:7â"; >2E8 Ääã à7å =?:2; E

int main(int argc, char **argv) { SDL_Init(SDL_INIT_VIDEO);SDL_SetVideoMode(640, 480, 0, SDL_OPENGL);

int done = 0;while ( ! done ) /* Loop, drawing and checking events */

{SDL_Event event;SDL_WaitEvent(&event);switch(event.type)

{ case SDL_VIDEOEXPOSE: /* evento "ridisegnati" */

rendering(); /* riempi screen buffer*/break;

case SDL_QUIT: done = 1; break ;

case SDL_KEYDOWN: if ( event.key.keysym.sym == SDLK_ESCAPE )done = 1;break;

} }SDL_Quit();return 1;

}

G�H&I J'KMLNH'I O P'OAQ�R�K&S+T&U V W'IYXZI H<T&['O J \]QM^&_&_&`ba _'c]Q+d�P&O e&W'I \&O V f*g&W&h h i j P \<U&kbI O HAlNc

à :á=C; E7; =?: :24�47D ; @�:7â"; >2E8 Ääã à åD :á4:26 F 8C@ æ 8CB2; p�87Æ9E:

void rendering(){

glClear(GL_COLOR_BUFFER_BIT);

/* disegna tutto */

glFinish(); /* aspetta che sia tutto finito */SDL_GL_SwapBuffers(); /* vediamo questa fra un sec */

}

×?ç >7F : å B7:Årp�:26 p"; è�é7ê é ; Eu6<; p"4Y>7p�F :u:�Bár�E:6<; @ æ 87p�F :CB2;�6 87B26 :7ë�ZìmªN­m´N¬N�M¡&­N«m«N³ ­NÞ*�M¤&¥N¦M³  'í�îï� ð*¬N­m¤&¤&�m© ¬N�m��Z­m  � © ³ ÞM¦N´m� ³'³  '¤&�N´m� ¦m¡&� �*¬m³'î�«m¦N´mñxò*«N�m� © ¦N¹N¹m¦*´m�N´¦m¡&¡&¦m© ¦*´N¦mÞ*Þ*¦m´N�*­m� � ³ »<� Õ�Z«m�m� © ¦N¹m¹N¦m© �*¦m¡&¡&¦m© ¤&³&¦m»&¦N´m� ³'«N³ óM³ Þ*«m�m© � ­m´N� ³&¬m­]«m© �m¤&¦m¡&¡&­m© ¦

G�H&I J'KMLNH'I O P'OAQ�R�K&S+T&U V W'IYXZI H<T&['O J \]QM^&_&_&`ba _'c]Q+d�P&O e&W'I \&O V f*g&W&h h i j P \<U&kbI O HAlNô

Ä 8uq�>7Æ2D ; >á6<; B2; p�87Æ9E:26 8ÅD :up�@�89E:7õ

×uö :7Bu87p�82=C47; >9÷7; Eu6<; p"4>7p�F :u:�BÅr7Eu; E74�rF�B782D D øbrF 82EF 8@ æ 8 æ :u@�:2=Co7; :áD :Cp�@�82EY:2÷7; D�4�r7EF >CB2;Aq"; p�F :2÷Y87F @�ùØûú �x}ú �x}ú �x}ú �x}�Í ü yx����w �?�x}?zb|x}xÉx|xzbw }xË� ������� � ������� ���� ������� ���� �����+������� �������� � � ����� ����� ��(�� �Øûý yxÍý yxÍý yxÍý yxÍ {?w�yx�x~ �xþb{?yx}xÉx�?�x}?È�|xËx}xyx� |ÌÉxw Ù zbw Éxw È�|xËx}xyx~ w Ù� � ������������� ���� � � ����� ���� � ÿ ������� � ������� ���+���

/* ci automandiamo un messaggio che (s.o. permettendo)ci fara' ridisegnare la finestra*/

void updateScene(){

SDL_Event e;e.type=SDL_VIDEOEXPOSE;SDL_PushEvent(&e); // metto il segnale nella coda degli

// eventi da processare} G�H&I J'KMLNH'I O P'OAQ�R�K&S+T&U V W'IYXZI H<T&['O J \]QM^&_&_&`ba _'c]Q+d�P&O e&W'I \&O V f*g&W&h h i j P \<U&kbI O HAl�� _

ã >2r7o7D 8áo�r�� � 826<; EÆ

� ������

� ����� ��� �� ��� �� � � ������� � � ��� !" # $ % & ' % (

) ��� *�+�,� � ��� �-���� �./ � � ��0 1 ��� 2 3����1 � 2 ��4�5�6�7 2

89:;<= >?@ 9A@

;BCD C>::BA= 90 � 1 E �F

� ��0 1 ��� 2 3����0 ��5�����4 1 20 � 1 E �F

� ��0 1 ��� 2 3����F� 4 1 20 � 1 E �F

×HG ; @�@�>2D >uF�6<r@�@�>árF�; D 8C:2D D 8u:94747D ; @�:7â"; >2E7;�; EF 826 :7F F�; q�8Ø }xyxÈ����x}xÉx|xzb|?w ��ü zbyx{?|?���xü ü |xz]{?|x}x~ zb|?��w |x}x|?zbw |x{?Êxw ~ �

� � ������� � � ���JI" K & L % M ' $ N O K % & P (

��7Q�2 R���6 S

G�H&I J'KMLNH'I O P'OAQ�R�K&S+T&U V W'IYXZI H<T&['O J \]QM^&_&_&`ba _'c]Q+d�P&O e&W'I \&O V f*g&W&h h i j P \<U&kbI O HAl�� �

ã >2r7o7D 8áo�r�� � 826<; EÆ

� ������

� ����� ��� �� ��� �� � � ������� � � ��� !" K & L % M ' $ N O K % & P (

) ��� *�+�,� � ��� �-���� �./ � � ��0 1 ��� 2 3����1 � 2 ��4�5�6�7 2

89:;<= >?@ 9A@

;BCD C>::BA= 90 � 1 E �F

� ��0 1 ��� 2 3����0 ��5�����4 1 20 � 1 E �F

� ��0 1 ��� 2 3����F� 4 1 20 � 1 E �F

×HG ; @�@�>2D >uF�6<r@�@�>árF�; D 8C:2D D 8u:94747D ; @�:7â"; >2E7;�; EF 826 :7F F�; q�8Ø }xyxÈ����x}xÉx|xzb|?w ��ü zbyx{?|?���xü ü |xz]{?|x}x~ zb|?��w |x}x|?zbw |x{?Êxw ~ �

� � ������� � � ���JI" # $ % & ' % ( ��7Q�2 R���6T

G�H&I J'KMLNH'I O P'OAQ�R�K&S+T&U V W'IYXZI H<T&['O J \]QM^&_&_&`ba _'c]Q+d�P&O e&W'I \&O V f*g&W&h h i j P \<U&kbI O HAl�� ^

U 82=C; EB7826

Scheda Grafica

Driver Scheda grafica

API

Applicazioni

Monitor

Algoritmi

SDK

Page 3: Simple DirectMedia Layer - CNRvcg.isti.cnr.it/~tarini/teaching/cg07/Lez05.Implementaz.pdf• Simple DirectMedia Layer – cross-platform multimedia library – GNU LGPL – fornisce

G�H&I J'KMLNH'I O P'OAQ�R�K&S+T&U V W'IYXZI H<T&['O J \]QM^&_&_&`ba _'c]Q+d�P&O e&W'I \&O V f*g&W&h h i j P \<U&kbI O HAl�� Á

ç >2EuD >up�F�rYB2; :2=?>WV9r7; ÷7=?:u87p"; p�F 8× ã ; 6 87@�F X ãØZY yxzb~ |?Éxw\[�w zb|x��~ ] ��� ��� �����&%'�

Ø Ç�~ |xÈ�È�w�È����xÊxw�Éxw\^ Êx|x}`_ba ���*)"�����+���������� �� ���� ������������� �&�9��� � ��� � ��� � ��� ���������� ����� (�� � �

Ø a`c yx� ~ |xzb}xyx~ w ��y?Êxw �`c����x{?�x}x|?yd^ Êx|�}`_ba

G�H&I J'KMLNH'I O P'OAQ�R�K&S+T&U V W'IYXZI H<T&['O J \]QM^&_&_&`ba _'c]Q+d�P&O e&W'I \&O V f*g&W&h h i j P \<U&kbI O HAl�� Ã

×We 482Edf 6 :24 æ ; @ à :2EYÆ2rY:7Æ78× à ; o76 826<; :WgØ t�zb�xÈ�È Êx� yx~ ü �xzb{ØZh �xyx� ��vx|?��|x}x~ w }xyxw �?Éxw�zb���x~ w }x|xÈ

× ëûëûëji >2482EÆ2D i >26 ÆØ È�Êx|x��w ü w ��vx|

Ä 487@"; ��; @ æ 8q�826lkmi n

G�H&I J'KMLNH'I O P'OAQ�R�K&S+T&U V W'IYXZI H<T&['O J \]QM^&_&_&`ba _'c]Q+d�P&O e&W'I \&O V f*g&W&h h i j P \<U&kbI O HAl�� Ö

suw }xw o�w yx� {?|x}x~ |?È���w � �xÊxÊxyx~ �?Éxy?Ç�w � w ����}d_ zbyxÊxvxw ��È

su�xzbyxÍ^ Êx|x}`_ba nn nn zb��vxw ~ |x��~ �xzb| UU UU |x��w |`p qq qq �xyxzbÉ� (������ � ����������+��� ��� ���� � r sutwv�x y x v�zwt� ����� ��� �������� � �+��� ��3 ,+� {,+� {,+� {,+� { || || } ~ �} ~ �} ~ �} ~ � � � � � � �� � � � � �� � � � � �� � � � � �� ���������(����+����� ���+���*����� �

su��w�È��x}x�?yx}x��vx|?� | �`�\� �`�`�\� ���`� Êxzbw �Yyx~ |� ������� ��� � ��� � � �

Ä F >26<; :

n�U qn�U qn�U qn�U q

G�H&I J'KMLNH'I O P'OAQ�R�K&S+T&U V W'IYXZI H<T&['O J \]QM^&_&_&`ba _'c]Q+d�P&O e&W'I \&O V f*g&W&h h i j P \<U&kbI O HAl�� ß

� ; @"; E7;AB2;A@�:7p�:sW^ Êx|x}`_ba |`��w ��� y`��|xz]Éxw��xyxÈ�|sW_ba`� Ü _ba?�x~ w � w ~ |xÈ�Ý� � ����� ��(����� %'������� ���������Z��� � � � � ��������� � ��� � �������� ����������"$����� ��� ����(�������+�������� �� ������(���� � void gluLookAt(eyex,eyey,eyez,

cx,cy,cz, upx, upy, upz);

sW_ba`��� |`��w � � �x�x� Û�w ~xÉxw�w }x~ |xzbü yx����w yÌ���x}?w ��Ç�^sW_ba`��� Ü �`�\� �`�`�\� �`�������`�`�`� �`� Ý]È�w��������xÊxy?Éx|x� � |?|xÈ�~ |x}xÈ�w �x}xwsW�CËx� | _ba`  È��x}x�?w�È��x~ ~ �xw }xÈ�w |x{?w�É�w\^ Êx|x}`_ba?��vx|Éxw Êx|x}xÉx�x}x�?Éxy���Ç�^

G�H&I J'KMLNH'I O P'OAQ�R�K&S+T&U V W'IYXZI H<T&['O J \]QM^&_&_&`ba _'c]Q+d�P&O e&W'I \&O V f*g&W&h h i j P \<U&kbI O HAl�� `

Ä¢¡ EF :¤£×W¥ rF F 8áD 8���r�Eâ"; >2E7;AB2; e 482EYÆ2DAp�;A@ æ ; :2=?:2E> å

glSomethingXXXØ [��x��|d]�]�]CÈ�Êx|x��w ü w ��y Ü }x�x{?|xzb�xÝ]w �Y~ w Êx�?Éx|xw�Êxyxzbyx{?|x~ zbw ÍØ |xÈ�|x{?Êxw �xÍglColor3f(float, float, float);glColor3fv( float*);ü Íxü � �xyx~ÉxÍxÉx�x�x�x� |?� � ���Íx��|x~ ~ �xzb|ØZY |xzb��vx|`¦d��c

Sú Ç�§ þbt�¨x}x�x}?t�©l©«ª

 ����&����� � ���+��� ���w¬�

G�H&I J'KMLNH'I O P'OAQ�R�K&S+T&U V W'IYXZI H<T&['O J \]QM^&_&_&`ba _'c]Q+d�P&O e&W'I \&O V f*g&W&h h i j P \<U&kbI O HAl�� c

Ä¢¡ EF :¤£×H­ :u:2E@ æ 8 å

glColor3b, glColor3d, glColor3f,glColor3i, glColor3s, glColor3ub,glColor3ui, glColor3us, glColor4b, glColor4d, glColor4f, glColor4i,glColor4s, glColor4ub, glColor4ui,glColor4us, glColor3bv, glColor3dv,glColor3fv, glColor3iv, glColor3sv,glColor3ubv, glColor3uiv, glColor3usv, glColor4bv, glColor4dv, glColor4fv,glColor4iv, glColor4sv, glColor4ubv, glColor4uiv, glColor4usv

Page 4: Simple DirectMedia Layer - CNRvcg.isti.cnr.it/~tarini/teaching/cg07/Lez05.Implementaz.pdf• Simple DirectMedia Layer – cross-platform multimedia library – GNU LGPL – fornisce

G�H&I J'KMLNH'I O P'OAQ�R�K&S+T&U V W'IYXZI H<T&['O J \]QM^&_&_&`ba _'c]Q+d�P&O e&W'I \&O V f*g&W&h h i j P \<U&kbI O HAl�� ô

q :7p�:7F >Cp"r7D D >up�F :7F >×H® E:up�F :7F 8á=?:7@ æ ; EY8Ø yxÉ?|xÈ�|x{?Êxw � ����� � ����������� ��� ������� ��� ������ ����� (���� � � ���ü yx}x}x�?Êxyxzb~ |?Éx|x� � �?È�~ yx~ �?���xz'zb|x}x~ |

×H­ >2D F�;A@�>2=?:2EB2; e 4Y82E�f à E>9Ed� :2E7EY>áE�r7D D :uB2;; =C=?87B2; :7F >Ø È�|?}x�x}?��yx{?�xw yxzb|?� �?È�~ yx~ �

G�H&I J'KMLNH'I O P'OAQ�R�K&S+T&U V W'IYXZI H<T&['O J \]QM^&_&_&`ba _'c]Q+d�P&O e&W'I \&O V f*g&W&h h i j P \<U&kbI O HAlm^ _

q :7p�:7F >Cp"r7D D >up�F :7F >× Ä F :7F >u@x>2=C476 82EYB78�ká=?:7F�6<; @"; ö 8uB2rY8up�F :7@°¯Ap�ù

×H® E:uB2;±V9r87p�F 8C8¤²�p�82=C476 8ÅD :Å=?:7F�6<; @�8uB2;�D :7q�>26 >Ø � y?{?yx~ zbw ��|?���xzbzb|x}x~ |

×H³ @�>2=?:2EB2;A@ æ 8á=?>�B2; ��; @�:2E>á=û:7F�6<; @";�D :7q�>26 :2E>p"r´V2rY87p�F :á=?:�F�6<; @�8

G�H&I J'KMLNH'I O P'OAQ�R�K&S+T&U V W'IYXZI H<T&['O J \]QM^&_&_&`ba _'c]Q+d�P&O e&W'I \&O V f*g&W&h h i j P \<U&kbI O HAlm^ �

­ :7F�6<; @";s ú �x~ yxÍxyxÈ�È��x{?|?��vx|?È�w yx}x�?{?|x{?�xz'w o\o�yx~ |?Êx|xz]���x� �x}x}x|� ����� � ������������ ������ ��(��(���µ ������ �����

����

����

������

������

����

����

����

����

����

����

G�H&I J'KMLNH'I O P'OAQ�R�K&S+T&U V W'IYXZI H<T&['O J \]QM^&_&_&`ba _'c]Q+d�P&O e&W'I \&O V f*g&W&h h i j P \<U&kbI O HAlm^ ^

­ :7F�6<; @";×HG 826M@�:2=Co7; :26 8WV9r:2D 8�¶áD :á=?:�F�6<; @�8uB2;�D :7q�>26 > åglMatrixMode(***);GL_MODELVIEWGL_PROJECTION

×HG 826 6<; =C47; :7â�â�:26 8áD :á=?:7F�6<; @�8uB9;�D :7q�>26 >– glLoadIdentity();– glLoadMatrixf( float* m );

×W¥ rF F�;AÆ2D ;A:2D F�6<;A@�>2=?:2EB2;�=?>�B2; ��; @�:2E> ö =?>2D F�; 47D ; @�:2E>4826 r7E?:2D F�6 :á=?:7F�6<; @�87ù D :á=?:7F�6&; @�8u@�>26<6 82EF 8mi

G�H&I J'KMLNH'I O P'OAQ�R�K&S+T&U V W'IYXZI H<T&['O J \]QM^&_&_&`ba _'c]Q+d�P&O e&W'I \&O V f*g&W&h h i j P \<U&kbI O HAlm^ Á

­ :7F�6<; @";× U >7F :7â"; >2E7;

– glRotatef(angle,ax,ay,az);×W¥ 6 :7p"D :7â"; >2E7;

– glTranslatef(dx,dy,dz);× Ä @�:2D :7F�r76 8 � ���������� %'��� (�� �

– glScalef(ax,ay,az);× f 82E826<; @�:

– glMultMatrixf(float f*);

³ ´*¯m© ­N¬N³

­m¡&¡&¦M¬N³'© �m� ­m·<³ �N´m¦«m­m¡&¡&­N´m� ¦*«N¦m©�  µ �m© ³ ¯N³ ´N¦

G�H&I J'KMLNH'I O P'OAQ�R�K&S+T&U V W'IYXZI H<T&['O J \]QM^&_&_&`ba _'c]Q+d�P&O e&W'I \&O V f*g&W&h h i j P \<U&kbI O HAlm^ Ã

­ :7F�6<; @";× � ; p�F : å

void gluLookAt(eyex,eyey,eyez,cx,cy,cz,upx, upy, upz);

¤&¦m´m� © ��¼ òN­*¬m³ © ¦m·&³ �m´N¦¦mµ�· ¤`¸x¦J¹&¦ º

Page 5: Simple DirectMedia Layer - CNRvcg.isti.cnr.it/~tarini/teaching/cg07/Lez05.Implementaz.pdf• Simple DirectMedia Layer – cross-platform multimedia library – GNU LGPL – fornisce

G�H&I J'KMLNH'I O P'OAQ�R�K&S+T&U V W'IYXZI H<T&['O J \]QM^&_&_&`ba _'c]Q+d�P&O e&W'I \&O V f*g&W&h h i j P \<U&kbI O HAlm^ Ö

×We 4826 :7â"; >2EY8up"r7D D > Ä F :7@°¯ åglPushMatrix()

glPopMatrix()

­ :7F�6<; @";

G�H&I J'KMLNH'I O P'OAQ�R�K&S+T&U V W'IYXZI H<T&['O J \]QM^&_&_&`ba _'c]Q+d�P&O e&W'I \&O V f*g&W&h h i j P \<U&kbI O HAlm^ ß

×H­ :7F�6<; @";AB2;�476 >2; 87â"; >2E8 åglOrtho2D(left, right,

bottom top);void gluPerspective(

fovy,aspect,zNear,zFar);

­ :7F�6<; @";AB2;�476 >2; 87â"; >2E8

¨ ³ ¦N  ¬*�m¨m»<³ ¦¼»¡&ªm    ­l½·¿¾¼ÀMº ³ ´*¯m© ­N¬N³ º

G�H&I J'KMLNH'I O P'OAQ�R�K&S+T&U V W'IYXZI H<T&['O J \]QM^&_&_&`ba _'c]Q+d�P&O e&W'I \&O V f*g&W&h h i j P \<U&kbI O HAlm^ `

×HG 826Mp�87F F :26 8á; DAq"; 87ë 4>26 F å

glViewPort(int x, int y,

int w, int h);

6 82=C; EB7826 å ; D�6 :2474>26 F >W��6 :uë 8 æ B�87q�8u87p�px826 8áD >p�F 87p�p�>up"4Y87@"; ��; @�:7F >áEY82D D :á=?:7F¾6<; @�8uB2;�476 >2; 87â"; >2E8ÂÁ

� ; 87ë 4>26 F

G�H&I J'KMLNH'I O P'OAQ�R�K&S+T&U V W'IYXZI H<T&['O J \]QM^&_&_&`ba _'c]Q+d�P&O e&W'I \&O V f*g&W&h h i j P \<U&kbI O HAlm^ c

à q�82EF >�Ä ; EB7>7ë U 87p æ :24Y8× Ä r@�@�87B78C>7Æ9E7;Aq�>2D F :u@ æ 8áD ø rF 89EF 8@�:2=Co7; :uB2; =?82Ep"; >2E7;Z:2D D :W��; E8�p�F�6 :Ø Éx|x���?Êx|xzb{?|x~ ~ |xzb|?yx� � c �x~ |x}x~ |?Éxw�ü yxz'� �`¨xÉx�xzbyx}x~ |� c w }xw o�w yx� w o\o�y`o�w �x}x|xÍ

Ø Ëx|xÈ�~ w �x}x|?Éx|x� � c |x��|x}x~ �xÍ · ¬m¦m»<�M¨ ­m© ¦*¬m³&´Nªm�m»&�*³  '¡&¦m�NªN«M¬N¦m &»&³ ¬N¦N�JºSDL_SetVideoMode(640,480,0, SDL_OPENGL | SDL_RESIZABLE)

...

case SDL_VIDEORESIZE :SDL_SetVideoMode(event.resize.w,event.resize.h,

0, SDL_OPENGL |SDL_RESIZABLE);myReshapeFunc(event.resize.w,event.resize.h);

G�H&I J'KMLNH'I O P'OAQ�R�K&S+T&U V W'IYXZI H<T&['O J \]QM^&_&_&`ba _'c]Q+d�P&O e&W'I \&O V f*g&W&h h i j P \<U&kbI O HAlm^ ô

n B7:7F F :26 8 D :u@�:2=?826 : :2D D :W��; EY8�p�F�6 : å476 >2; 87â"; >2E8C>26 F >�Æ26 :¤��; @�:void myReshapeFunc(GLsizei w, GLsizei h){glMatrixMode (GL_PROJECTION); glLoadIdentity ();float ratio=(float)h/(float)w;glOrtho2D(-1,1,-ratio,ratio);

glViewport (0, 0, (GLsizei) w, (GLsizei) h); glMatrixMode (GL_MODELVIEW);

}

G�H&I J'KMLNH'I O P'OAQ�R�K&S+T&U V W'IYXZI H<T&['O J \]QM^&_&_&`ba _'c]Q+d�P&O e&W'I \&O V f*g&W&h h i j P \<U&kbI O HAlNÁ _

U ; @�>26 B7:26 8up�82=C476 8 åe 482E�f à´Å p�F :�F 8á=?:7@ æ ; E8

«m© ³ ÞM³ � ³ »&¦ìmªN³

«m³ Æ&¦N  ¡� ªm� � �M³  &«m³ «m¦N  ³ ´N¦· «m© �N³ ¦m·<³ �N´m¦Y¶ ¡&¦m� ªm«�¶ © ­m¡&� ¦m© ³ ·&·&­m·&³ �m´N¦�¼ ¼ ¼ º

¡&� ­m� �*¬m³&îx«N¦m´mñ�ò

����4�2 F 6�7 � 3�2 6�4�2 R�2 0 1 � 1 6Ç ��0 È�0 � 1 1 ��� �É7 �É��� 1 � 2 Ê ��Ë

Page 6: Simple DirectMedia Layer - CNRvcg.isti.cnr.it/~tarini/teaching/cg07/Lez05.Implementaz.pdf• Simple DirectMedia Layer – cross-platform multimedia library – GNU LGPL – fornisce

G�H&I J'KMLNH'I O P'OAQ�R�K&S+T&U V W'IYXZI H<T&['O J \]QM^&_&_&`ba _'c]Q+d�P&O e&W'I \&O V f*g&W&h h i j P \<U&kbI O HAlNÁ �

gû>2=?8up";±ÌNp"4:26 :2E>¤Ì?;AF�6<; :2EYÆ7>2D ;�E82D�47; 482D ; EY8

glBegin (GL_TRIANGLES);

glVertex3d(x1,y1,z1);glVertex3d(x2,y2,z2);glVertex3d(x3,y3,z3);

glVertex3d(x4,y4,z4);glVertex3d(x5,y5,z5);glVertex3d(x6,y6,z6);

glVertex3d(x7,y7,z7);glVertex3d(x8,y8,z8);glVertex3d(x9,y9,z9);...glEnd();

«m© ³ ÞM�*� © ³ ­m´N¯N�m  �

¡&¦m¤&�m´N¬m�*� © ³ ­m´N¯N�m  �

� ¦m© ·&�M� © ³ ­N´N¯m�N  �

G�H&I J'KMLNH'I O P'OAQ�R�K&S+T&U V W'IYXZI H<T&['O J \]QM^&_&_&`ba _'c]Q+d�P&O e&W'I \&O V f*g&W&h h i j P \<U&kbI O HAlNÁ ^

gû>2=?8up";±ÌNp"4:26 :2E>¤Ì?;AF�6<; :2EYÆ7>2D ;�E82D�47; 482D ; EY8

glVertex3d(x,y,z);

��������� �glVertex3f(x,y,z);��������� �glVertex3i(x,y,z);��������� �glVertex2d(x,y);��������� �glVertex4d(x,y,z,w);��������� �glVertex4dv(vett);��������� ��i i i

¤&�m�m© ¬N³ ´m­m� ­M·`ÍÏΡ&�m� � �N³ ´m� ¦m¡&­ Õ

¤&�m�m© ¬N³ ´m­m� ­l»ÐÍ�¸¡&�m� � �N³ ´m� ¦m¡&­ Õ

G�H&I J'KMLNH'I O P'OAQ�R�K&S+T&U V W'IYXZI H<T&['O J \]QM^&_&_&`ba _'c]Q+d�P&O e&W'I \&O V f*g&W&h h i j P \<U&kbI O HAlNÁ Á

ç >2EÌp�>2D >glBegin (GL_TRIANGLES);

  ³ ´m¦N­M¨ ³ ´N­m  ¦*ìmªN­m´N¬N�¡&³'¨ ­*  ­*¯N  Ñ<´m¬J· º

G�H&I J'KMLNH'I O P'OAQ�R�K&S+T&U V W'IYXZI H<T&['O J \]QM^&_&_&`ba _'c]Q+d�P&O e&W'I \&O V f*g&W&h h i j P \<U&kbI O HAlNÁ Ã

ç >2EÌp�>2D >glBegin (GL_TRIANGLES);ìmªN­m´m� ³Ð Ò Î ÓNÏJÒ¼Ó¼Ô Î'Ò ÓJÕ&Ð ÑmÒ Î Ö�Ö&ÓmРΫm¦m©ZìmªN­N´m� ³Ô ÑmÒ Ð Î ×&Î�ØmÒ ÓmÎ ÑmÐ Ð ÓmÐ Î ¿

òm¦M¡<«m¦m¤&³ ¨ ³ ¤&¥N¦îx«m¦N´mñxò*´m�N´«m© ¦m¡&¤&© ³ »&�N´N�MìNªN­m  ¦¬m³ ­m¯N�m´N­N  ¦*ªm¡&­m© ¦| Ù Ú Û Ü } Û } Û Ý Þ Ü } Þ} ~ � � ß Û àÏÝ � Þ à¼Þ Ü á ~ â Û ã Ü Þ