„Számítógépes grafika házi feladat tutorial” változatai közötti eltérés

Rohamcsiga (vitalap | szerkesztései)
Hozzáadtam a görbék részt A második házihoz szükséges elmélet
Rohamcsiga (vitalap | szerkesztései)
a Néhány MSVC specifikus bugfix A második házihoz szükséges elmélet
275. sor: 275. sor:
* Projekció 2D-ben: a fényképezés módja nagyon egyszerű, egyszerűen eldobjuk a 'z' koordinátát, és az x-y pozició alapján rajzolunk. Vagy legalábbis ezt csináltuk eddig, de az NDC nem volt kényelmes. Itt viszont lehetőséget kapunk saját koordinátarendszer megválasztására, ahol az egység lehet pl. 1 méter, és a kamera pedig mondjuk követhet egy karaktert egy játékban.
* Projekció 2D-ben: a fényképezés módja nagyon egyszerű, egyszerűen eldobjuk a 'z' koordinátát, és az x-y pozició alapján rajzolunk. Vagy legalábbis ezt csináltuk eddig, de az NDC nem volt kényelmes. Itt viszont lehetőséget kapunk saját koordinátarendszer megválasztására, ahol az egység lehet pl. 1 méter, és a kamera pedig mondjuk követhet egy karaktert egy játékban.


* Példaprogram: [http://pastebin.com/zV32Zg1f Sidescroller]
* Példaprogram: [http://pastebin.com/d8ZLKiTg Sidescroller]


<br/> <syntaxhighlight lang="c">
<br/> <syntaxhighlight lang="c">
403. sor: 403. sor:
</div><br/>
</div><br/>


* Ezt felhasználva a példaprogram: [http://pastebin.com/a3XtuCVh Robot kar]
* Ezt felhasználva a példaprogram: [http://pastebin.com/dw7jBHxH Robot kar]
** A program irányítása:  
** A program irányítása:  
*** 'q' - Ujjak szétnyitása, 'a' - Ujjak összezárása
*** 'q' - Ujjak szétnyitása, 'a' - Ujjak összezárása
414. sor: 414. sor:
   float x, y, z;
   float x, y, z;
   Vector(float x, float y, float z) : x(x), y(y), z(z) { }
   Vector(float x, float y, float z) : x(x), y(y), z(z) { }
   void glTranslatef() { ::glTranslatef(x, y, z); }
   void translate() { glTranslatef(x, y, z); }
   void glRotatef(float angle) { ::glRotatef(angle, x, y, z); }
   void rotate(float angle) { glRotatef(angle, x, y, z); }
   void glScalef() { ::glScalef(x, y, z); }
   void scale() { glScalef(x, y, z); }
};
};


431. sor: 431. sor:
   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);


  glPushMatrix(); {
glPushMatrix(); {
     y_axis.glRotatef(rot_base);
     y_axis.rotate(rot_base);
 
     // Jobb oldali alap
     // Jobb oldali alap
     glPushMatrix(); {
     glPushMatrix(); {
       pos_right_base.glTranslatef();
       pos_right_base.translate();
       scale_base.glScalef();
       scale_base.scale();
       glutSolidCube(1.0f);
       glutSolidCube(1.0f);
     } glPopMatrix();
     } glPopMatrix();
   
 
     // Bal oldali alap
     // Bal oldali alap
     glPushMatrix(); {
     glPushMatrix(); {
       pos_left_base.glTranslatef();
       pos_left_base.translate();
       scale_base.glScalef();
       scale_base.scale();
       glutSolidCube(1.0f);
       glutSolidCube(1.0f);
     } glPopMatrix();
     } glPopMatrix();
 
     x_axis.glRotatef(rot_main_arm);
     x_axis.rotate(rot_main_arm);
     pos_main_arm.glTranslatef();
     pos_main_arm.translate();
 
     // Felkar
     // Felkar
     glPushMatrix(); {
     glPushMatrix(); {
       scale_main_arm.glScalef();
       scale_main_arm.scale();
       glutSolidCube(1.0f);
       glutSolidCube(1.0f);
     } glPopMatrix();
     } glPopMatrix();
 
     pos_main_arm.glTranslatef();
     pos_main_arm.translate();
 
     x_axis.glRotatef(rot_lower_arm);
     x_axis.rotate(rot_lower_arm);
     pos_lower_arm.glTranslatef();
     pos_lower_arm.translate();
 
     // Alkar
     // Alkar
     glPushMatrix(); {
     glPushMatrix(); {
       scale_lower_arm.glScalef();
       scale_lower_arm.scale();
       glutSolidCube(1.0f);
       glutSolidCube(1.0f);
     } glPopMatrix();
     } glPopMatrix();
 
     pos_lower_arm.glTranslatef();
     pos_lower_arm.translate();
 
     // Csukló
     // Csukló
     glPushMatrix(); {
     glPushMatrix(); {
       scale_wrist.glScalef();
       scale_wrist.scale();
       glutSolidCube(1.0f);
       glutSolidCube(1.0f);
     } glPopMatrix();
     } glPopMatrix();
 
     // Jobb 'ujj'
     // Jobb 'ujj'
     glPushMatrix(); {
     glPushMatrix(); {
       z_axis.glRotatef(-rot_finger);
       z_axis.rotate(-rot_finger);
 
       glTranslatef(0, pos_right_finger.y, 0);
       glTranslatef(0, pos_right_finger.y, 0);
 
       glPushMatrix(); {
       glPushMatrix(); {
         glTranslatef(pos_right_finger.x, 0, 0);
         glTranslatef(pos_right_finger.x, 0, 0);
         z_axis.glRotatef(-rot_finger_relative);
         z_axis.rotate(-rot_finger_relative);
         scale_finger.glScalef();
         scale_finger.scale();
         glutSolidCube(1.0f);
         glutSolidCube(1.0f);
       } glPopMatrix();
       } glPopMatrix();
 
       pos_right_finger.glTranslatef();
       pos_right_finger.translate();
       z_axis.glRotatef(rot_finger_relative);
       z_axis.rotate(rot_finger_relative);
       scale_finger.glScalef();
       scale_finger.scale();
       glutSolidCube(1.0f);
       glutSolidCube(1.0f);
     } glPopMatrix();
     } glPopMatrix();
 
     // Bal 'ujj'
     // Bal 'ujj'
     glPushMatrix(); {
     glPushMatrix(); {
       z_axis.glRotatef(rot_finger);
       z_axis.rotate(rot_finger);
     
   
       glTranslatef(0, pos_left_finger.y, 0);
       glTranslatef(0, pos_left_finger.y, 0);
 
       glPushMatrix(); {
       glPushMatrix(); {
         glTranslatef(pos_left_finger.x, 0, 0);
         glTranslatef(pos_left_finger.x, 0, 0);
         z_axis.glRotatef(rot_finger_relative);
         z_axis.rotate(rot_finger_relative);
         scale_finger.glScalef();
         scale_finger.scale();
         glutSolidCube(1.0f);
         glutSolidCube(1.0f);
       } glPopMatrix();
       } glPopMatrix();
 
       pos_left_finger.glTranslatef();
       pos_left_finger.translate();
       z_axis.glRotatef(-rot_finger_relative);
       z_axis.rotate(-rot_finger_relative);
       scale_finger.glScalef();
       scale_finger.scale();
       glutSolidCube(1.0f);
       glutSolidCube(1.0f);
     } glPopMatrix();
     } glPopMatrix();
 
   } glPopMatrix();
   } glPopMatrix();
 
   // Láda
   // Láda
   glPushMatrix(); {
   glPushMatrix(); {
     pos_crate.glTranslatef();
     pos_crate.translate();
     glutSolidCube(1.0f);
     glutSolidCube(1.0f);
   } glPopMatrix();
   } glPopMatrix();
547. sor: 547. sor:
**** Gyakori implentációja a közelítőleg c2 folytonos Catmull-Rom görbe (Ezt akkor kapjuk, ha a Kochanek–Bartels összes paraméterét nullának választjuk).   
**** Gyakori implentációja a közelítőleg c2 folytonos Catmull-Rom görbe (Ezt akkor kapjuk, ha a Kochanek–Bartels összes paraméterét nullának választjuk).   
        
        
* Példaprogram: [http://pastebin.com/NycAjCLW Tenziós Catmull-Rom görbe]
* Példaprogram: [http://pastebin.com/iJW80B4t Tenziós Catmull-Rom görbe]
<div style="text-align:left;margin:0px auto;">
<div style="text-align:left;margin:0px auto;">
http://i.imgur.com/C1iKaHx.gif
http://i.imgur.com/C1iKaHx.gif