Simple DirectMedia Layervcg.isti.cnr.it/~tarini/teaching/cg06/Lezione5.pdf• Simple DirectMedia...

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/cg06/Lezione5.pdf• Simple DirectMedia...

Page 1: Simple DirectMedia Layervcg.isti.cnr.it/~tarini/teaching/cg06/Lezione5.pdf• Simple DirectMedia Layer – cross-platform multimedia library – GNU LGPL – fornisce accesso (a livello

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

���� ����� ��� � ������ � � � ��������� � ��������� � ���������� ����������� ��� !"��� �����# ��� �������$������ ���� �� �&%'��� (���� � ���)"�����*)"�����+����(�� ���,�-+-�.&/'-+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    ´ ªm¡&�Y³ «N�m� ¦m� ¦M¡&¤&­m© ± ¤&­m© ¦*  ­*  ¦mµ"¶+¬m¦N '¤&�m© ¡&�*¬N±'  ­m·*  ± ²N¯mªN­N¯m¯N± ¸¥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 Layervcg.isti.cnr.it/~tarini/teaching/cg06/Lezione5.pdf• Simple DirectMedia Layer – cross-platform multimedia library – GNU LGPL – fornisce accesso (a livello

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; =?:u:24�47D ; @�:7ß"; >2E8 Âáà Ý7â =?:2; Eint 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;

}

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ä

å 87Ä2D ; > â

ÕÞæ ; B2; p�87Ä2E:ÞD :up�@�89E:CF�6 >24�48uqx>2D F 8Õuç 87p�F�; :2=?>u:9E@ ã 8ÞD è 87qx82EF >é E87@�87p�p"; F :7è�B2;�6<; B2; p�87Ä9E:26 87êÕÞë 82DA@"; @"D >uB787Ä2D ;A87q�82EYF�; âcase SDL_VIDEOEXPOSE :

myDrawGLScene(); break; ÕÞì F >7Ä2D ; :2=?>Þ; D

myDrawGLSceneB�:2DA@"; @"D >

B787Ä2D ;A87q�89EF�;

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; =?: :24�47D ; @�:7ß"; >2E8 Âáà Ý âD :Þ4:26 F 8C@ ã 8CB2; p�87Ä9E:

void DrawGLScene(){

glClear(GL_COLOR_BUFFER_BIT);

/* disegna tutto */

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

}

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Ä

ð ñòóóôõö÷

ø ùúûüýü úþý ÿý ��� �� � � ���� � � � �� � � � � � � �

� ôñö÷ �÷�ñ�÷ôöö òö÷ø ÿ�ûþýý û�� � � �� � � � !�� � � �"#$% �

&'()*+ ,-. '/.

)012 1,((0/+ '

� � 3 4� �� � � � !�� #��" � �� � 3 4

� �� � � � !�4 " � �� � 3 4

Õ65 ; @�@�>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 �87 zbyx{?|?���97 7 |xz]{?|x}x~ zb|?��w |x}x|?zbw |x{?Èxw ~ �

� � ���� � � �;:� < � = � > � � ? @ < � � A �

�%B!� C$ D

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Ä

ð ñòóóôõö÷

ø ùúûüýü úþý ÿý ��� �� � � ���� � � � �� < � = � > � � ? @ < � � A �

� ôñö÷ �÷�ñ�÷ôöö òö÷ø ÿ�ûþýý û�� � � �� � � � !�� � � �"#$% �

&'()*+ ,-. '/.

)012 1,((0/+ '

� � 3 4� �� � � � !�� #��" � �� � 3 4

� �� � � � !�4 " � �� � 3 4

Õ65 ; @�@�>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 �87 zbyx{?|?���97 7 |xz]{?|x}x~ zb|?��w |x}x|?zbw |x{?Èxw ~ �

� � ���� � � �;:� � � � � � � � �%B!� C$E

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�î ^

 F�6<rF F�r76 : n 4747D ; @�:7ß"; >2EY8GF 4Y89E ç Ý�H Âáà Ý

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

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

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

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

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

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

������

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

�������

���

�������

���

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

Page 3: Simple DirectMedia Layervcg.isti.cnr.it/~tarini/teaching/cg06/Lezione5.pdf• Simple DirectMedia Layer – cross-platform multimedia library – GNU LGPL – fornisce accesso (a livello

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=?>GI9r7; J7=?:u87p"; p�F 8Õ à ; 6 87@�F K àÖML yxzb~ |?Çxw8N�w zb|x��~ OÀ ��� ��� �����&%'�

Ö Å�~ |xÆ�Æ�w�Æ����xÈxw�Çxw8P Èx|x}9QSRÀ ���*)"�����+���������� �� ���� ������������� �&�9��� �À ��� � ��� � ��� ���������� ����� (�� � �

Ö R9T yx� ~ |xzb}xyx~ w ��y?Èxw �9T����x{?�x}x|?yUP Èx|�}9QSR

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�î Á

Õ F 482E ç 6 :24 ã ; @ Ý :2EYÄ2rY:7Ä78Õ Ý ; o76 826<; :GVÖ t�zb�xÆ�Æ Èx� yx~ 7 �xzb{ÖMW �xyx� ��vx|?��|x}x~ w }xyxw �?Çxw�zb���x~ w }x|xÆ

ÕGXYXYX[Z >2482EÄ2D Z >26 ÄÖ Æ�Èx|x��w 7 w ��vx|

 487@"; ï�; @ ã 8q�826]\ Z ^

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 _�w yx� {?|x}x~ |?Æ���w � �xÈxÈxyx~ �?Çxy?Å�w � w ����}UQ zbyxÈxvxw ��Æ

su�xzbyxËP Èx|x}9QSR nn nn zb��vxw ~ |x��~ �xzb| ææ ææ |x��w |9` aa aa �xyxzbÇ� (������ � ����������+��� ��� ���� � b cedgf!h i h f!jgd� ����� ��� �������� � �+��� ��3 ,+� k,+� k,+� k,+� k� ���������(����+����� ���+���*����� �

su��w�Æ��x}x�?yx}x��vx|?� | l9m8n l9o9m8p qro9p Èxzbw �Yyx~ |� ������� ��� � ��� � � �

 F >26<; :

n æ an æ an æ an æ a

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�î `

s ; @"; E7;AB2;A@�:7p�:sGP Èx|x}9QSR |9t�w ��� y9u�|xz]Çxw��xyxÆ�|sGQSR9v Ú QSR?�x~ w � w ~ |xÆ�Û� � ����� ��(����� %'������� ���������Z��� � � � � w�������� � ��� � �������� ����������"$����� ��� ����(�������+�������� �� ������(���� � void gluLookAt(eyex,eyey,eyez,

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

sGQSR9vyx |9t�w �8x]�x�x� Ù�w ~xÇxw�w }x~ |xzz7 yx����w yÊ���x}?w ��Å{PsG|CÉx� | QSR9} Æ��x}x�?w�Æ��x~ ~ �xw }xÆ�w |x{?w�Ç�w8P Èx|x}9QSR?��vx|Çxw Èx|x}xÇx�x}x�?Çxy���Å{P

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 :��ÕG� rF F 8ÞD 8Cï�r�Eß"; >2E7;AB2;�F 482EYÄ2DAp�;A@ ã ; :2=?:2E> â

glSomethingXXXÖ N��x��|UO{O{OCÆ�Èx|x��w 7 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*);7 Ë97 � �xyx~ÇxËxÇx�x�x�x� |?� � ���Ëx��|x~ ~ �xzb|ÖML |xzb��vx|9�U�{T

D{� Å{� �bty�x}x�x}?ty�]���À ����&����� � ���+��� ���g�

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 :��Õ å :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 Layervcg.isti.cnr.it/~tarini/teaching/cg06/Lezione5.pdf• Simple DirectMedia Layer – cross-platform multimedia library – GNU LGPL – fornisce accesso (a livello

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�î í

a :7p�:7F >Cp"r7D D >up�F :7F >Õ6� E:up�F :7F 8Þ=?:7@ ã ; EY8Ö yxÇ?|xÆ�|x{?Èxw �À ����� � ����������� ���À ������� ��� ������ �����À (���� � � ���7 yx}x}x�?Èxyxzb~ |?Çx|x� � �?Æ�~ yx~ �?���xz'zb|x}x~ |

Õ å >2D F�;A@�>2=?:2EB2;�F 4Y82E ç Ý E>9E?ï :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^ _

a :7p�:7F >Cp"r7D D >up�F :7F >Õ Â F :7F >u@x>2=C476 82EYB78�\Þ=?:7F�6<; @";��<8uB2rY8up�F :7@��Apr�

Õ6� E:uB2;�I9r87p�F 8C87è�p�82=C476 8ÃD :Ã=?:7F�6<; @�8uB2;�D :7q�>26 >Ö � y?{?yx~ zbw ��|?���xzbzb|x}x~ |

Õ6� @�>2=?:2EB2;A@ ã 8Þ=?>�B2; ï�; @�:2E>Þ= :7F�6<; @";�D :7q�>26 :2E>p"r�I2rY87p�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 _8_�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<; @";Õ65 826M@�:2=Co7; :26 8GI9r:2D 8��ÞD :Þ=?:�F�6<; @�8uB2;�D :7q�>26 > âglMatrixMode(***);GL_MODELVIEWGL_PROJECTION

Õ65 826 6<; =C47; :7ß�ß�:26 8ÞD :Þ=?:7F�6<; @�8uB9;�D :7q�>26 >– glLoadIdentity();– glLoadMatrixf( float* m );

ÕG� rF F�;AÄ2D ;A:2D F�6<;A@�>2=?:2EB2;�=?>�B2; ï�; @�:2E>G�+=?>2D F�; 47D ; @�:2E>4826 r7E?:2D F�6 :Þ=?:7F�6<; @�8�� D :Þ=?:7F�6&; @�8u@�>26<6 82EF 8 Z

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<; @";ÕÞæ >7F :7ß"; >2E7;

– glRotatef(angle,ax,ay,az);ÕG� 6 :7p"D :7ß"; >2E7;– glTranslatef(dx,dy,dz);Õ Â @�:2D :7F�r76 8 � ���������� %'��� (�� �– glScalef(ax,ay,az);Õuç 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<; @";Õ s ; p�F : â

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

¤&¦m²m� © ��º �N­*¬m± © ¦mµ&± �m²N¦¦m´z� ¤9�x¦;�&¦ �

Page 5: Simple DirectMedia Layervcg.isti.cnr.it/~tarini/teaching/cg06/Lezione5.pdf• Simple DirectMedia Layer – cross-platform multimedia library – GNU LGPL – fornisce accesso (a livello

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 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^ `

Õ å :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

± ²*¯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^ c

Õ65 826Mp�87F F :26 8Þ; DAq"; 8 X 4>26 F â

glViewPort(int x, int y,

int w, int h);

6 82=C; EB7826 â ; D�6 :2474>26 F >uï�6 : X 8 ã B�87q�8u87p�px826 8ÞD >p�F 87p�p�>up"4Y87@"; ï�; @�:7F >ÞEY82D D :Þ=?:7F¼6<; @�8uB2;�476 >2; 87ß"; >2E8��

s ; 8 X 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^ ä

ì q�82EF >�� ; EB7> X5æ 87p ã :24Y8Õ Â r@�@�87B78C>7Ä9E7;Aq�>2D F :u@ ã 8ÞD   rF 89EF 8@�:2=Co7; :uB2; =?82Ep"; >2E7;Z:2D D :uï�; E8�p�F�6 :Ö Çx|x���?Èx|xzb{?|x~ ~ |xzb|?yx� � T �x~ |x}x~ |?Çxw87 yxz'� �9�xÇx�xzbyx}x~ |� T w }xw _�w yx� w _8_�y9_�w �x}x|xË

Ö Éx|xÆ�~ w �x}x|?Çx|x� � T |x��|x}x~ �xË � ¬m¦m¹<�M¨ ­m© ¦*¬m±&²Nªm�m¹&�*±  '¡&¦m�NªN«M¬N¦m &¹&± ¬N¦N�;�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 :uï�; EY8�p�F�6 : â476 >2; 87ß"; >2E8C>26 F >�Ä26 :7ï�; @�: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¿ _

æ ; @�>26 B7:26 8up�82=C476 8 âF 482E ç Ý�¡ p�F :�F 8Þ=?:7@ ã ; E8

«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²;¥r�

���"� 4 $% � !� $"� C� � � � � $¦ � §� � � �� ¨% �¨��� � � � © ª

Page 6: Simple DirectMedia Layervcg.isti.cnr.it/~tarini/teaching/cg06/Lezione5.pdf• Simple DirectMedia Layer – cross-platform multimedia library – GNU LGPL – fornisce accesso (a livello

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¿ î

V >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¿ ^

V >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);��������� � Z Z Z

¤&�m�m© ¬N± ²m­m� ­Mµ9¬®­¡&�m� � �N± ²m� ¦m¡&­ Ó

¤&�m�m© ¬N± ²m­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¿ ¿

ë >2EÊp�>2D >glBegin (GL_TRIANGLES);

  ± ²m¦N­M¨ ± ²N­m  ¦ ¢ ªN­m²N¬N�¡&±'¨ ­*  ­*¯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¿ Á

ë >2EÊp�>2D >glBegin (GL_TRIANGLES);¢ ªN­m²m� ±Î Ð Ì ÑNÍ;²´³´µ Ì'Ð Ñ;¶&Î ÏmÐ Ì ··&ÑmÎ Ì«m¦m© ¢ ªN­N²m� ±Ò ÏmÐ Î Ì ¸&̹mÐ ³mÌ ÏmÎ Î ÑmÎ Ì ½

�m¦M¡<«m¦m¤&± ¨ ± ¤&¥N¦¤x«m¦N²;¥9�*²m�N²«m© ¦m¡&¤&© ± ¹&�N²N� ¢ ªN­m  ¦¬m± ­m¯N�m²N­N  ¦*ªm¡&­m© ¦º » ¼ ½ ¾ ¿ ½ ¿ ½ À Á ¾ ¿ Á¿ Â Ã Ã Ä ½ Å®À à Á Å´Á ¾ Æ Â Ç ½ È ¾ Á