Simple DirectMedia Layervcg.isti.cnr.it/~tarini/teaching/sm2/Lezione5.pdf · T&UM?E+V'W S UT&X&M...

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>

Transcript of Simple DirectMedia Layervcg.isti.cnr.it/~tarini/teaching/sm2/Lezione5.pdf · T&UM?E+V'W S UT&X&M...

Page 1: Simple DirectMedia Layervcg.isti.cnr.it/~tarini/teaching/sm2/Lezione5.pdf · T&UM?E+V'W S UT&X&M F&W MZY YO[&\&\']'^ \'_`O+aN'M b&T'G R&M c*X&T&W W d Y N R:V&ePG F?fê » ^] \ ½

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

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

$+����� �����$+����� �����$+����� �����$+����� �����10+20+20+20+24365 713815:9 81;=<6>"9?86@9 ;A36B 71;=71CD 815 7

E�F&G H'IKJLF'G M N'MPO'Q�M RPS T&U�M?E+V'W S M U�T&X&M F&W MZY Y�O�[&\&\']'^ \'_`O+a�N'M b&T'G R&M S c*X&T&W W d Y N R:V&ePG M F?fg[ ^ ] \

h ;Ai69 71CD 7j@19?k�l"9 B m6363<njo�prq srtPsru=vrwrx v=yzs={rvrw�v=|z}ru=v=~r��sr� �rwr~r�rv=sr� x tP}r�� $������+��� �� ������ ����� (������ � ����*%'� ������&%'� ����� �� ���� ����$��� ��� ������� � ��� � # � #��z�� � ����� ���������(���� � ��� ��� ���� ���&��/'� #�#��� �����+����+����+���������+����&����� �+���+����(��������+������������� (���� � ������ ��� ��� � ��� �*%'����� � (������ �� �� � ��� ��� � ����������� ��(��� ����������$�������$�� � � ���+��� � ������Z��(������ �+��� ������6� � �L�g� �&�?� ��� �& g¡g�&¢�£ �g¤Z¥L¦L§g¨L� ¡L© ¦L¨g¢&¨Lªg¡g�&�

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

�6«�¡g¤Z¬ ­g£ �z® �&¥g� � ¯ ¥g�:�z® ¦L�g� ¡g� ¡K�&�&¨g¤ ¬ �&¨g¤ ¡*� ¨*� ¡g°"±+§g¡L�'�&�g¤ �:�*§g¬&� ¨g²*� ¬ ­gªL¥g¨LªgªL¬ ³ g� � ¦´³ © © µ&�&ª´¶ ¬ �:� ¬ ¶ �&­g¤'¶ ¬ � © ·¸� ¨g¤ ¬ ­g¬ © ¹Lº´±

E�F&G H'IKJLF'G M N'MPO'Q�M RPS T&U�M?E+V'W S M U�T&X&M F&W MZY Y�O�[&\&\']'^ \'_`O+a�N'M b&T'G R&M S c*X&T&W W d Y N R:V&ePG M F?fL» ^ ] \

• 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++¼ ��� � ��2 / / ������� � � ������� � ��� � E�F&G H'IKJLF'G M N'MPO'Q�M RPS T&U�M?E+V'W S M U�T&X&M F&W MZY Y�O�[&\&\']'^ \'_`O+a�N'M b&T'G R&M S c*X&T&W W d Y N R:V&ePG M F?fg] ^ ] \

½ D�5:mD D�m65 8¾365 <6¿15 81;A;=8njÀ�x tP�rx x �rtPs=|z� srÁzÁzq |zs=ÂrvrqzÃrtP}rÄrtPsru=uÅqzs=� q wrvrs=Ârqz|z}ru=srwrÂr}rÆ

main(){

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

}

­g�L­Kµ&¨`²g¡L­g¡*¦L¡g¤¨g¦L¦g� ¬ �&¨g°&¬ �L­g¬Ç ÈLÉ ÊgË ÌgÉ É Ç Í ÊÇ ÈLÉ ÊgË ÌgÉ É Ç Í ÊÇ ÈLÉ ÊgË ÌgÉ É Ç Í ÊÇ ÈLÉ ÊgË ÌgÉ É Ç Í Ê�Î

E�F&G H'IKJLF'G M N'MPO'Q�M RPS T&U�M?E+V'W S M U�T&X&M F&W MZY Y�O�[&\&\']'^ \'_`O+a�N'M b&T'G R&M S c*X&T&W W d Y N R:V&ePG M F?fL_ ^ ] \

½ D�5:mD D�m65 8¾365 <6¿15 81;A;=8Ï ½ 9 k�D 71;=8j8j76l�71CD�9ÐÒÑ s=|zsr� � {rsr|zÓ Ñ6Ô } Ñ s=u=vrÁzÁzsrÄrv=prsrw�Âr� vrtPÁ Ñ vr|z|zÕ

main(){

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

}} ¡gµ&¡g­L� ¬&� ¬ ¦g�´³�ZÖ*�g¥g�:¡z® � ¨g�&� ¬ ¡g¤ ¨´¶ ¶ ¶�Z�&¬ �&� ¡LÖ*¨*§g¬&£ ¬ ­L¬ �&� ¤ ¡�Z¤ ¡g�& L¨L¦g¡´® ÖK¬ ­g¬ Ö*¬ °&°&¨g°&¬ �g­L¡z¶ ¶ ¶�ZªL¡g­L¡g¤ ¨L� ¬&§L¨L� � ¯ ¨g¦L¦g� ¬ �&¨g°:¬ �L­g¡*�&� ¡g�&�&¨�Z�*§L¨*�  g¤ ¡g¨L§*§L¬ £ £ ¡g¤ ¡g­L� ¬ E�F&G H'IKJLF'G M N'MPO'Q�M RPS T&U�M?E+V'W S M U�T&X&M F&W MZY Y�O�[&\&\']'^ \'_`O+a�N'M b&T'G R&M S c*X&T&W W d Y N R:V&ePG M F?fL× ^ ] \

Ø 8¾;A9 C69 ;=8j813636B 9 >�86ÙÚ9 <1C7 ½ÜÛ Ø6Ý6Þ 7686@6715 k

#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 Layervcg.isti.cnr.it/~tarini/teaching/sm2/Lezione5.pdf · T&UM?E+V'W S UT&X&M F&W MZY YO[&\&\']'^ \'_`O+aN'M b&T'G R&M c*X&T&W W d Y N R:V&ePG F?fê » ^] \ ½

E�F&G H'IKJLF'G M N'MPO'Q�M RPS T&U�M?E+V'W S M U�T&X&M F&W MZY Y�O�[&\&\']'^ \'_`O+a�N'M b&T'G R&M S c*X&T&W W d Y N R:V&ePG M F?fLß ^ ] \

Ø 8¾;A9 C69 ;=8j813636B 9 >�86ÙÚ9 <1C7 ½ÜÛ Ø6Ý ;=819 Cint 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 */{myDrawGLScene(); /* Questa poi la vediamo */SDL_Event event;SDL_WaitEvent(&event);switch(event.type)

{ case SDL_QUIT : done = 1; break ;case SDL_KEYDOWN :

if ( event.key.keysym.sym == SDLK_ESCAPE )done = 1;

break;}

}SDL_Quit();return 1;

}

E�F&G H'IKJLF'G M N'MPO'Q�M RPS T&U�M?E+V'W S M U�T&X&M F&W MZY Y�O�[&\&\']'^ \'_`O+a�N'M b&T'G R&M S c*X&T&W W d Y N R:V&ePG M F?fLà ^ ] \

á 76¿1B 9 < Ý

Ͼâ 9 @19 k�76¿1C8¾B 8jk�>�71C8jD�5 <13637jl�<1B D 7Ïjã 76k�D�9 81;=<j81C> Þ 7¾B ä 76l�71CD <å C76>�76k�k"9 D 86ä�@19�5:9 @19 k�76¿1C815 76æϾç 71B?>"9 >"B <j@676¿1B 9?76l�71CD�9 Ýcase SDL_VIDEOEXPOSE :

myDrawGLScene(); break; Ͼè D <6¿1B 9 81;=<¾9 B

myDrawGLScene@�81B?>"9 >"B <

@676¿1B 9?76l�71CD�9

E�F&G H'IKJLF'G M N'MPO'Q�M RPS T&U�M?E+V'W S M U�T&X&M F&W MZY Y�O�[&\&\']'^ \'_`O+a�N'M b&T'G R&M S c*X&T&W W d Y N R:V&ePG M F?fLé ^ ] \

Ø 8¾;A9 C69 ;=8 813636B 9 >�86ÙÚ9 <1C7 ½ÜÛ Ø ÝB 8¾3815 D 7j> Þ 7j@19 k�76¿1C8

void DrawGLScene(){

glClear(GL_COLOR_BUFFER_BIT);

/* disegna tutto */

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

}

E�F&G H'IKJLF'G M N'MPO'Q�M RPS T&U�M?E+V'W S M U�T&X&M F&W MZY Y�O�[&\&\']'^ \'_`O+a�N'M b&T'G R&M S c*X&T&W W d Y N R:V&ePG M F?f�ê \ ^ ] \

Û <1m6i6B 7¾i6më ë 715:9 C¿

ì íîïïðñòó

ô õö÷øùø öúù ûù üýþ ÿ� � � ������� � � ��� � � � � � � �

� ðíòó �ó�í�óðòò îòóô û�÷úùù ÷�� � � ��� � ��� � ������ � � ������ �! �

"#$%&' ()* #+*

%,-. -($$,+' #� � � /�0

� ��� � ��� � ������ ��������� � �� � � /�0

� ��� � ��� � �����0� � � �� � � /�0

Ï21 9 >�>�<1B <jD�5:m>�>�<¾mD�9 B 7j81B B 7j813636B 9 >�86Ù"9 <1C69�9 CD 715 86D D�9 l�7Ð wrsrÁz|z}rwrÂrvrtPv=q �43 tPsru=v={��53 3 vrt`u=vrwrx tPv=yzq vrwrv=tPq vru=Ãrq x }

� � ������� � � ���76� 8 � 9 � : � ; < 8 � � = �

��!> � ?��� @

E�F&G H'IKJLF'G M N'MPO'Q�M RPS T&U�M?E+V'W S M U�T&X&M F&W MZY Y�O�[&\&\']'^ \'_`O+a�N'M b&T'G R&M S c*X&T&W W d Y N R:V&ePG M F?f�ê ê ^ ] \

Û <1m6i6B 7¾i6më ë 715:9 C¿

ì íîïïðñòó

ô õö÷øùø öúù ûù üýþ ÿ� � � ������� � � ��� � 8 � 9 � : � ; < 8 � � = �

� ðíòó �ó�í�óðòò îòóô û�÷úùù ÷�� � � ��� � ��� � ������ � � ������ �! �

"#$%&' ()* #+*

%,-. -($$,+' #� � � /�0

� ��� � ��� � ������ ��������� � �� � � /�0

� ��� � ��� � �����0� � � �� � � /�0

Ï21 9 >�>�<1B <jD�5:m>�>�<¾mD�9 B 7j81B B 7j813636B 9 >�86Ù"9 <1C69�9 CD 715 86D D�9 l�7Ð wrsrÁz|z}rwrÂrvrtPv=q �43 tPsru=v={��53 3 vrt`u=vrwrx tPv=yzq vrwrv=tPq vru=Ãrq x }

� � ������� � � ���76� � � � � � � ��!> � ?��� A

E�F&G H'IKJLF'G M N'MPO'Q�M RPS T&U�M?E+V'W S M U�T&X&M F&W MZY Y�O�[&\&\']'^ \'_`O+a�N'M b&T'G R&M S c*X&T&W W d Y N R:V&ePG M F?f�ê [ ^ ] \

ì íîïïðñòó

ô õö÷øùø öúù ûù üýþ ÿ�

â 9 86k�k"m6CD <¾36m6CD 86D 7¾365 76>�76@67�CD�9CB�D E

� ðíòó �óô û�÷úùù ÷�F � ��� G����%'� ����� �H N T W W IR H G T T N f e V I I T G J� ðíòó �

ó�í�óðòò îòóô û�÷úùù ÷�� �

K� ��� � ��� � ������ � � ������ �! �

"#$%&' ()* #+*

%,-. -($$,+' #

L

M

NO P O Q

O R

� � � /�0

O P O QO R

� ��� � ��� � ������ ��������� � �� � � /�0

� ��� � ��� � �����0� � � �� � � /�0

"#$%&' ()* #+*

%,-S,-'* ",

�g¤ ¨*§L¬�Tg¥L¬�&¨g¦g¦L¬ ¨gÖ*�*� ¥L� � �

Page 3: Simple DirectMedia Layervcg.isti.cnr.it/~tarini/teaching/sm2/Lezione5.pdf · T&UM?E+V'W S UT&X&M F&W MZY YO[&\&\']'^ \'_`O+aN'M b&T'G R&M c*X&T&W W d Y N R:V&ePG F?fê » ^] \ ½

E�F&G H'IKJLF'G M N'MPO'Q�M RPS T&U�M?E+V'W S M U�T&X&M F&W MZY Y�O�[&\&\']'^ \'_`O+a�N'M b&T'G R&M S c*X&T&W W d Y N R:V&ePG M F?f�ê » ^ ] \

½ D�5:mD D�m65 8 h 3636B 9 >�86Ù"9 <1C7VU 371C ã Ø�W ½ÜÛ Ø

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

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

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

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

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

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

������

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

�������

���

�������

���

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

E�F&G H'IKJLF'G M N'MPO'Q�M RPS T&U�M?E+V'W S M U�T&X&M F&W MZY Y�O�[&\&\']'^ \'_`O+a�N'M b&T'G R&M S c*X&T&W W d Y N R:V&ePG M F?f�ê ] ^ ] \

ç <1CjB <jk�D�m@19 81;=<VX1m69 Y6;=8j76k"9 k�D 7Ï Û 9 5 76>�D E ÛÐ[Z srtPx v=Ârq4\�q tPvr|zx ]¼ ��� ��� �����&%'�

Ð À�x vrÁzÁzqzÁz|z}rÃrqzÂrq4^ Ãrvrw5_a`¼ ���*)"�����+���������� �� ���� ������������� �&����� �¼ ��� � ��� � ��� ����+���� ����� (�� � �

Ð `5b sr� x vrtPwrsrx q yzs=Ãrq �5b�|z}ru=�rwrv=sc^ Ãrv�w5_a`

E�F&G H'IKJLF'G M N'MPO'Q�M RPS T&U�M?E+V'W S M U�T&X&M F&W MZY Y�O�[&\&\']'^ \'_`O+a�N'M b&T'G R&M S c*X&T&W W d Y N R:V&ePG M F?f�ê _ ^ ] \

Ï U 371C ã 5 813 Þ 9 > Ø 81C¿1m86¿67Ï Ø 9 i65 715:9 8VdÐ o�tP}rÁzÁ Ãr� srx 3 }rtPuÐ[e �rsr� |zprv=|zvrwrx q wrsrq }=ÂrqztP}��rx q wrvrÁ

ÏVfgfgfih <1371C¿1B h <15 ¿Ð ÁzÃrvr|zq 3 q |zprv

½ 376>"9 ë�9 > Þ 7l�715kj h l

E�F&G H'IKJLF'G M N'MPO'Q�M RPS T&U�M?E+V'W S M U�T&X&M F&W MZY Y�O�[&\&\']'^ \'_`O+a�N'M b&T'G R&M S c*X&T&W W d Y N R:V&ePG M F?f�ê × ^ ] \

njq wrq mzq sr� u=vrwrx v=Ázyzq � �rÃrÃrsrx }=Ârs=À�q � q |z}�wc_ tPsrÃrprq |zÁ

nj}rtPsrÆ^ Ãrvrw5_a` hh hh tP|zprq x vr|zx �rtPv ââ ââ vryzq v5n oo oo }rsrtPÂ� (������ � ����������+��� ��� ���� � p qsrut�v w v t�xur� ����� ��� �������� � �+��� ��2 ,+� -,+� -,+� -,+� -� ���������(����+����� ���+���*����� �

nj|zqzÁz}rwr}=srwr|zprv=� v y5z4{ y5|5z4} ~C|5} ÃrtPq y´srx v� ������� ��� � ��� � � �

½ D <15:9 8

h â oh â oh â oh â o

E�F&G H'IKJLF'G M N'MPO'Q�M RPS T&U�M?E+V'W S M U�T&X&M F&W MZY Y�O�[&\&\']'^ \'_`O+a�N'M b&T'G R&M S c*X&T&W W d Y N R:V&ePG M F?f�ê ß ^ ] \

� 9 >"9 C69?@19?>�86k�8nV^ Ãrvrw5_a` v5�zq �z� s5�zvrt`Ârqz{rsrÁzvnV_a`5� Ô _a`=�rx q � q x vrÁzÕ� � ����� ��(����� %'������� ���������Z��� � � � � ��������� � ��� � �������� ����������"$����� ��� ����(�������+�������� �� ������(���� � void gluLookAt(eyex,eyey,eyez,

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

nV_a`5��� v5�zq �4�`}r}r� Ózq xrÂrqzq wrx vrt�3 sr|z|zq sÅ|z}rw=q �zÀ�^nV�AÄr� v _a`5� Áz}rwr}=qzÁz}rx x }rq wrÁzq vru=qzÂ�q4^ Ãrvrw5_a`=|zprvÂrq ÃrvrwrÂr}rwr}=Ârs��zÀ�^

E�F&G H'IKJLF'G M N'MPO'Q�M RPS T&U�M?E+V'W S M U�T&X&M F&W MZY Y�O�[&\&\']'^ \'_`O+a�N'M b&T'G R&M S c*X&T&W W d Y N R:V&ePG M F?f�ê à ^ ] \

½�� CD 8��ÏV� mD D 7¾B 7jë�m6CÙ"9 <1C69?@19�U 371C¿1B?k"9?> Þ 9 81;=81C< Ý

glSomethingXXXÐ \�}ryzvc]�]�]AÁzÃrvr|zq 3 q |zs Ô wr�ru=vrtP}rÕ`q �´x q Ãr}=ÂrvrqzÃrsrtPsru=vrx tPq ÆÐ vrÁzvru=Ãrq }rÆglColor3f(float, float, float);

glColor3fv( float*);3 Æ53 � }rsrxÂrÆrÂr}r�r{r� v=� � �yzÆryzvrx x }rtPvÐ[� }rw=v5�zo��k���

Page 4: Simple DirectMedia Layervcg.isti.cnr.it/~tarini/teaching/sm2/Lezione5.pdf · T&UM?E+V'W S UT&X&M F&W MZY YO[&\&\']'^ \'_`O+aN'M b&T'G R&M c*X&T&W W d Y N R:V&ePG F?fê » ^] \ ½

E�F&G H'IKJLF'G M N'MPO'Q�M RPS T&U�M?E+V'W S M U�T&X&M F&W MZY Y�O�[&\&\']'^ \'_`O+a�N'M b&T'G R&M S c*X&T&W W d Y N R:V&ePG M F?f�ê é ^ ] \

½�� CD 8��Ï á 8j81C> Þ 7 Ý

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 E�F&G H'IKJLF'G M N'MPO'Q�M RPS T&U�M?E+V'W S M U�T&X&M F&W MZY Y�O�[&\&\']'^ \'_`O+a�N'M b&T'G R&M S c*X&T&W W d Y N R:V&ePG M F?fg[ \ ^ ] \

o 86k�86D <jk"m6B B <jk�D 86D <Ï2� C8jk�D 86D 7¾;=86> Þ 9 C7Ð srÂ=vrÁzvru=Ãrq }¼ ����� � ����������� ���¼ ������� ��� ������ �����¼ (���� � � ���3 srwrwr}=ÃrsrtPx v=Ârvr� � }=Ázx srx }=|z}rt'tPvrwrx v

Ï á <1B D�9?>�<1;=81C@19�U 371C ã Ø C<1CÅë 81C6C<¾C6m6B B 8Ð Ázv=wr}rw=|zsru={rq srtPv=� }=Ázx srx }

E�F&G H'IKJLF'G M N'MPO'Q�M RPS T&U�M?E+V'W S M U�T&X&M F&W MZY Y�O�[&\&\']'^ \'_`O+a�N'M b&T'G R&M S c*X&T&W W d Y N R:V&ePG M F?fg[ ê ^ ] \

o 86k�86D <jk"m6B B <jk�D 86D <Ï ½ D 86D <j>�<1;A365 71C@67Vj¾;=86D�5:9 >"9��:7j@1m7jk�D 86>��?kC�

Ï2� C8j@19�X1m76k�D 7j76ä�k�71;A365 7¾B 8¾;=86D�5:9 >�7j@19�B 86l�<15 <Ð � s=u=srx tPq |zv=|z}rtPtPvrwrx v

Ï2� >�<1;=81C@19?> Þ 7¾;=<6@19 ë�9 >�81C<¾;=86D�5:9 >"9�B 86l�< 5 81C<k"m�X1m76k�D 8¾;=86D�5:9 >�7

E�F&G H'IKJLF'G M N'MPO'Q�M RPS T&U�M?E+V'W S M U�T&X&M F&W MZY Y�O�[&\&\']'^ \'_`O+a�N'M b&T'G R&M S c*X&T&W W d Y N R:V&ePG M F?fg[ [ ^ ] \

á 86D�5:9 >"9n � }rx srÆrsrÁzÁz�ru=v=|zprv=Ázq srwr}=u=vru=}rt'q m4mzsrx v=Ãrvrt`|z}r� }rwrwrv� ����� � ������������ ������ ��(��(���� ������ �����

����

����

151173

141062

13951

12840

aaaa

aaaa

aaaa

aaaa

E�F&G H'IKJLF'G M N'MPO'Q�M RPS T&U�M?E+V'W S M U�T&X&M F&W MZY Y�O�[&\&\']'^ \'_`O+a�N'M b&T'G R&M S c*X&T&W W d Y N R:V&ePG M F?fg[ » ^ ] \

á 86D�5:9 >"9Ï21 715K>�81;Ai69 815 7VX�m81B 7��¾B 8¾;=8�D�5:9 >�7j@19�B 86l�<15 < ÝglMatrixMode(***);GL_MODELVIEWGL_PROJECTION

Ï21 715Ú5:9 ;A369 86Ù�Ù�815 7¾B 8¾;=86D�5:9 >�7j@�9�B 86l�<15 <– glLoadIdentity();– glLoadMatrixf( float* m );

ÏV� mD D�9?¿1B 9?81B D�5:9?>�<1;=81C@19�;=<�@19 ë�9 >�81C<V�+;=<1B D�9 36B 9 >�81C<3715Úm6C=81B D�5 8¾;=86D�5:9 >�7�� B 8¾;=86D�5&9 >�7j>�<15:5 71CD 7 h

E�F&G H'IKJLF'G M N'MPO'Q�M RPS T&U�M?E+V'W S M U�T&X&M F&W MZY Y�O�[&\&\']'^ \'_`O+a�N'M b&T'G R&M S c*X&T&W W d Y N R:V&ePG M F?fg[ ] ^ ] \

á 86D�5:9 >"9Ͼâ <6D 86Ù"9 <1C69

– glRotatef(angle,ax,ay,az);ÏV� 5 86k"B 86Ù"9 <1C69– glTranslatef(dx,dy,dz);Ï ½ >�81B 86D�m65 7 � ���������� %'��� (�� �– glScalef(ax,ay,az);Ïjã 71C715:9 >�8– glMultMatrixf(float f*);

¬ ­*ªg¤ ¨L§L¬

¨g�&�&¡K§L¬'¤ �g� ¨g°:¬ �L­g¡¦g¨g�&�&¨L­g� ¡*¦L¡g¤�� ¯ �g¤ ¬ ªL¬ ­L¡

Page 5: Simple DirectMedia Layervcg.isti.cnr.it/~tarini/teaching/sm2/Lezione5.pdf · T&UM?E+V'W S UT&X&M F&W MZY YO[&\&\']'^ \'_`O+aN'M b&T'G R&M c*X&T&W W d Y N R:V&ePG F?fê » ^] \ ½

E�F&G H'IKJLF'G M N'MPO'Q�M RPS T&U�M?E+V'W S M U�T&X&M F&W MZY Y�O�[&\&\']'^ \'_`O+a�N'M b&T'G R&M S c*X&T&W W d Y N R:V&ePG M F?fg[ _ ^ ] \

á 86D�5:9 >"9Ï � 9 k�D 8 Ý

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

�&¡g­g� ¤ �z¶ �L¨*§g¬ ¤ ¡g°&¬ �g­L¡¡g¯�� �5 r¡7¡&¡ ¢

E�F&G H'IKJLF'G M N'MPO'Q�M RPS T&U�M?E+V'W S M U�T&X&M F&W MZY Y�O�[&\&\']'^ \'_`O+a�N'M b&T'G R&M S c*X&T&W W d Y N R:V&ePG M F?fg[ × ^ ] \

Ï U 3715 86Ù"9 <1C´7jk"m6B B < ½ D 86>�� ÝglPushMatrix()

glPopMatrix()

á 86D�5:9 >"9

E�F&G H'IKJLF'G M N'MPO'Q�M RPS T&U�M?E+V'W S M U�T&X&M F&W MZY Y�O�[&\&\']'^ \'_`O+a�N'M b&T'G R&M S c*X&T&W W d Y N R:V&ePG M F?fg[ ß ^ ] \

Ï á 86D�5:9 >"9?@19�365 <19 76Ù"9 <1C7 ÝglOrtho2D(left, right,

bottom top);void gluPerspective(

fovy,aspect,zNear,zFar);

á 86D�5:9 >"9?@19�365 <19 76Ù"9 <1C7

¬ ­*ªg¤ ¨L§L¬

E�F&G H'IKJLF'G M N'MPO'Q�M RPS T&U�M?E+V'W S M U�T&X&M F&W MZY Y�O�[&\&\']'^ \'_`O+a�N'M b&T'G R&M S c*X&T&W W d Y N R:V&ePG M F?fg[ à ^ ] \

Ï21 715Kk�76D D 815 7¾9 B?l"9 7 f 3<15 D Ý

glViewPort(int x, int y,

int w, int h);

5 71;A9 C@6715 Ý 9 B�5 81363<15 D <jë�5 8 f 7 Þ @�76l�7j76k�kr715 7¾B <k�D 76k�k�<jk"3´76>"9 ë�9 >�86D <¾C´71B B 8¾;=86D¸5:9 >�7j@19�365 <19 76Ù"9 <1C7¤£

� 9 7 f 3<15 D

E�F&G H'IKJLF'G M N'MPO'Q�M RPS T&U�M?E+V'W S M U�T&X&M F&W MZY Y�O�[&\&\']'^ \'_`O+a�N'M b&T'G R&M S c*X&T&W W d Y N R:V&ePG M F?fg[ é ^ ] \

è l�71CD <�¥ 9 C@6< f4â 76k Þ 813´7Ï ½ m>�>�76@67A81B B ¦P9 C69 Ù"9 <Ð v=}rÄrwrqzyz}r� x s=|zprv=� b �rx vrwrx v|zsru={rq s=Ârq u=vrwrÁzq }rwrqzs�� � sc3 q wrvrÁzx tPsÐ Ârvryz}=ÃrvrtPu=vrx x vrtPv=sr� � b �rx vrwrx v=Ârq43 srt'� }5§rÂr�rtPsrwrx v� b q wrq mzq sr� q m4mzs5mzq }rwrvrÆ

Ð ÄrvrÁzx q }rwrv=Ârvr� � b vryzvrwrx }rÆ � §g¡gµ:�K£ ¨g¤ ¡*§g¬&­L¥g�gµ&�*¬ �'�&¡g�L¥L¦K§L¡g�&µ&¬ §L¡L�7¢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); E�F&G H'IKJLF'G M N'MPO'Q�M RPS T&U�M?E+V'W S M U�T&X&M F&W MZY Y�O�[&\&\']'^ \'_`O+a�N'M b&T'G R&M S c*X&T&W W d Y N R:V&ePG M F?fL» \ ^ ] \

h @686D D 815 7 B 8j>�81;=715 8 81B B 8jë�9 C´7�k�D�5 8 Ý365 <19 76Ù"9 <1C7A<15 D <�¿15 86ë�9 >�8void 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);

}

Page 6: Simple DirectMedia Layervcg.isti.cnr.it/~tarini/teaching/sm2/Lezione5.pdf · T&UM?E+V'W S UT&X&M F&W MZY YO[&\&\']'^ \'_`O+aN'M b&T'G R&M c*X&T&W W d Y N R:V&ePG F?fê » ^] \ ½

E�F&G H'IKJLF'G M N'MPO'Q�M RPS T&U�M?E+V'W S M U�T&X&M F&W MZY Y�O�[&\&\']'^ \'_`O+a�N'M b&T'G R&M S c*X&T&W W d Y N R:V&ePG M F?fL» ê ^ ] \

â 9 >�<15 @6815 7jk�71;A365 7 ÝU 371C ã Ø�¨ k�D 8�D 7¾;=86> Þ 9 C7

¦g¤ ¬ ÖK¬ � ¬ µ&¡Tg¥L¬

¦g¬ ©&¡L� �� ¥g� � �K¬ �&¦g¬ ¦g¡L� ¬ ­L¡� ¦g¤ �L¬ ¡g°:¬ �L­g¡´® �&¡g� ¥g¦z® ¤ ¨g�&� ¡g¤ ¬ °&°&¨g°&¬ �g­L¡z¶ ¶ ¶ ¢

�&� ¨g� �*§g¬�ªr¦L¡g­7«C�

������� 0 �! � ��� ���� ?�� � � � � ¬ ��� ­�� � � � ��� �®! �®��� � � � ¯ ��°

E�F&G H'IKJLF'G M N'MPO'Q�M RPS T&U�M?E+V'W S M U�T&X&M F&W MZY Y�O�[&\&\']'^ \'_`O+a�N'M b&T'G R&M S c*X&T&W W d Y N R:V&ePG M F?fL» [ ^ ] \

d <1;=7jk"9�±Lk"3815 81C<�±=9?D�5:9 81C´¿6<1B 9�C71B�369 371B 9 C´7

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();

¦g¤ ¬ ÖK�*� ¤ ¬ ¨g­LªL�g� �

�&¡g�&�g­L§g�*� ¤ ¬ ¨g­LªL�g� �

� ¡g¤ °&�K� ¤ ¬ ¨L­Lªg�L� �

E�F&G H'IKJLF'G M N'MPO'Q�M RPS T&U�M?E+V'W S M U�T&X&M F&W MZY Y�O�[&\&\']'^ \'_`O+a�N'M b&T'G R&M S c*X&T&W W d Y N R:V&ePG M F?fL» » ^ ] \

d <1;=7jk"9�±Lk"3815 81C<�±=9?D�5:9 81C´¿6<1B 9�C71B�369 371B 9 C´7

glVertex3d(x,y,z);

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

�&�g�g¤ §L¬ ­g¨g� ¨K°5²´³�&�g� � �L¬ ­g� ¡g�&¨ Î

�&�g�g¤ §L¬ ­g¨g� ¨kµ¶²�±�&�g� � �L¬ ­g� ¡g�&¨ Î

E�F&G H'IKJLF'G M N'MPO'Q�M RPS T&U�M?E+V'W S M U�T&X&M F&W MZY Y�O�[&\&\']'^ \'_`O+a�N'M b&T'G R&M S c*X&T&W W d Y N R:V&ePG M F?fL» ] ^ ] \

ç <1CÅk�<1B <glBegin (GL_TRIANGLES);

� ¬ ­g¡L¨K£ ¬ ­L¨g� ¡sTg¥L¨g­L§L��&¬'£ ¨*� ¨*ªL� ·:­g§7� ¢

E�F&G H'IKJLF'G M N'MPO'Q�M RPS T&U�M?E+V'W S M U�T&X&M F&W MZY Y�O�[&\&\']'^ \'_`O+a�N'M b&T'G R&M S c*X&T&W W d Y N R:V&ePG M F?fL» _ ^ ] \

ç <1CÅk�<1B <glBegin (GL_TRIANGLES);Tg¥L¨g­g� ¬É Ë Ç ÌLÈ7¸º¹º» Ç'Ë Ì7¼&É ÊgË Ç ½�½&ÌgÉ Ç¦g¡g¤¾Tg¥L¨L­g� ¬Í ÊgË É Ç ¿&Ç�ÀgË ¹gÇ ÊgÉ É ÌgÉ Ç ¹

�g¡K�:¦g¡g�&¬ £ ¬ �& L¡ªr¦g¡L­7«5�*­g�L­¦g¤ ¡g�&�&¤ ¬ µ&�L­L�kTL¥L¨g� ¡§g¬ ¨gªL�g­L¨L� ¡*¥g�&¨g¤ ¡Á Â Ã Ä Å Æ Ä Æ Ä Ç È Å Æ ÈÆ É Ê Ê Ë Ä Ì´Ç Ê È ÌºÈ Å Í É Î Ä Ï Å È