„Számítógépes grafika házi feladat tutorial” változatai közötti eltérés
Hozzáadtam a görbék részt →A második házihoz szükséges elmélet |
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/ | * 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/ | * 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 | void translate() { glTranslatef(x, y, z); } | ||
void | void rotate(float angle) { glRotatef(angle, x, y, z); } | ||
void | 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(); { | |||
y_axis. | y_axis.rotate(rot_base); | ||
// Jobb oldali alap | // Jobb oldali alap | ||
glPushMatrix(); { | glPushMatrix(); { | ||
pos_right_base. | pos_right_base.translate(); | ||
scale_base. | scale_base.scale(); | ||
glutSolidCube(1.0f); | glutSolidCube(1.0f); | ||
} glPopMatrix(); | } glPopMatrix(); | ||
// Bal oldali alap | // Bal oldali alap | ||
glPushMatrix(); { | glPushMatrix(); { | ||
pos_left_base. | pos_left_base.translate(); | ||
scale_base. | scale_base.scale(); | ||
glutSolidCube(1.0f); | glutSolidCube(1.0f); | ||
} glPopMatrix(); | } glPopMatrix(); | ||
x_axis. | x_axis.rotate(rot_main_arm); | ||
pos_main_arm. | pos_main_arm.translate(); | ||
// Felkar | // Felkar | ||
glPushMatrix(); { | glPushMatrix(); { | ||
scale_main_arm. | scale_main_arm.scale(); | ||
glutSolidCube(1.0f); | glutSolidCube(1.0f); | ||
} glPopMatrix(); | } glPopMatrix(); | ||
pos_main_arm. | pos_main_arm.translate(); | ||
x_axis. | x_axis.rotate(rot_lower_arm); | ||
pos_lower_arm. | pos_lower_arm.translate(); | ||
// Alkar | // Alkar | ||
glPushMatrix(); { | glPushMatrix(); { | ||
scale_lower_arm. | scale_lower_arm.scale(); | ||
glutSolidCube(1.0f); | glutSolidCube(1.0f); | ||
} glPopMatrix(); | } glPopMatrix(); | ||
pos_lower_arm. | pos_lower_arm.translate(); | ||
// Csukló | // Csukló | ||
glPushMatrix(); { | glPushMatrix(); { | ||
scale_wrist. | scale_wrist.scale(); | ||
glutSolidCube(1.0f); | glutSolidCube(1.0f); | ||
} glPopMatrix(); | } glPopMatrix(); | ||
// Jobb 'ujj' | // Jobb 'ujj' | ||
glPushMatrix(); { | glPushMatrix(); { | ||
z_axis. | 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. | z_axis.rotate(-rot_finger_relative); | ||
scale_finger. | scale_finger.scale(); | ||
glutSolidCube(1.0f); | glutSolidCube(1.0f); | ||
} glPopMatrix(); | } glPopMatrix(); | ||
pos_right_finger. | pos_right_finger.translate(); | ||
z_axis. | z_axis.rotate(rot_finger_relative); | ||
scale_finger. | scale_finger.scale(); | ||
glutSolidCube(1.0f); | glutSolidCube(1.0f); | ||
} glPopMatrix(); | } glPopMatrix(); | ||
// Bal 'ujj' | // Bal 'ujj' | ||
glPushMatrix(); { | glPushMatrix(); { | ||
z_axis. | 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. | z_axis.rotate(rot_finger_relative); | ||
scale_finger. | scale_finger.scale(); | ||
glutSolidCube(1.0f); | glutSolidCube(1.0f); | ||
} glPopMatrix(); | } glPopMatrix(); | ||
pos_left_finger. | pos_left_finger.translate(); | ||
z_axis. | z_axis.rotate(-rot_finger_relative); | ||
scale_finger. | scale_finger.scale(); | ||
glutSolidCube(1.0f); | glutSolidCube(1.0f); | ||
} glPopMatrix(); | } glPopMatrix(); | ||
} glPopMatrix(); | } glPopMatrix(); | ||
// Láda | // Láda | ||
glPushMatrix(); { | glPushMatrix(); { | ||
pos_crate. | 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/ | * 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 | ||