19
Számítógépes grafika Bevezetés Szirmay-Kalos László email: [email protected] http://cg.iit.bme.hu/ ”Учиться, учиться и учиться!” Влади ́ мир Ильи ́ ч Улья ́ нов (Ленин)

grafikacg.iit.bme.hu/portal/sites/default/files/oktatott... · 2020. 8. 15. · Számítógépes grafika mint tárgy Dennis G.Balreira, MarceloWalter, Dieter W.Fellner: A survey of

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

  • Számítógépes grafika Bevezetés

    Szirmay-Kalos László

    email: [email protected]

    http://cg.iit.bme.hu/

    ”Учиться, учиться и учиться!” Влади́мир Ильи́ч Улья́нов (Ленин)

  • Moodle és http://cg.iit.bme.hu

    • Powerpoint • Mintaprogramok • Ellenőrző kérdések • Kvíz • Könyvek • Videók: kiegészítés!

  • Tárgykövetelmények: TAD kisházik:

    I2

    II3

    III 4

    N 3

    Nagyházi:

    Kisházi bónusz kérdés: 2

    ZH nagykérdések: 30 Bónusz

    2 2

    N 3

    1 2 3 4 5

    +IMSC

    KisHázi jutalom: 18

    0 56+

    0 12 16 20 24

    3 előadás/hét

    félévközi jegy: házi + ZH

    3 kredit

    +vállveregetés

    32 56+

    Kötelező kvíz

    Hiba: +2 pont

    ZH-ra bocsátás feltétele: min 3 kisházi pont, 70% kvíz kitöltés!

    file:///d:/3DPrograms/GrafikaHazi/Programs/CurvatureFlow/bin/Skeleton.exefile:///d:/3DPrograms/GrafikaHazi/Programs/CurvatureFlow/bin/Skeleton.exe

  • Alkalmazások

  • Technológiák

  • Számítógépes grafika mint tárgy

    Dennis G.Balreira, MarceloWalter, Dieter W.Fellner: A survey of the contents in introductory Computer Graphics courses, Computers & Graphics, Volume 77, December 2018, Pages 88-96

    https://www.sciencedirect.com/science/article/pii/S0097849318301560#!https://www.sciencedirect.com/science/article/pii/S0097849318301560#!https://www.sciencedirect.com/science/article/pii/S0097849318301560#!https://www.sciencedirect.com/science/article/pii/S0097849318301560#!https://www.sciencedirect.com/science/article/pii/S0097849318301560#!https://www.sciencedirect.com/science/article/pii/S0097849318301560#!https://www.sciencedirect.com/science/journal/00978493https://www.sciencedirect.com/science/journal/00978493https://www.sciencedirect.com/science/journal/00978493https://www.sciencedirect.com/science/journal/00978493/77/supp/Chttps://www.sciencedirect.com/science/journal/00978493/77/supp/C

  • Miért OpenGL/GLSL?

    • GPU elérhető

    • Ablakozó rendszer és operációs rendszer független, mindenen fut (pl. mobil)

    • Stabil, nagy kódbázissal, biztos jövőkép

    • Nem céleszköz, azaz minden grafikai problémához használható

    • Kezdőknek is érthető, nem elbonyolított

    • Megmutatja a GPU-ból, amit meg kell, de nem viszi túlzásba az absztrakciót

  • Színnel kitöltött háromszög glGenVertexArrays(1, &vao); glBindVertexArray(vao);

    glGenBuffers(1, &vbo); glBindBuffer(GL_ARRAY_BUFFER, vbo);

    float vtx[] = {-0.8, -0.8, 0, 1, -0.6, 1, 0, 1, 0.8, -0.2, 0, 1};

    glBufferData(GL_ARRAY_BUFFER, sizeof(vtx), vtx, GL_STATIC_DRAW);

    glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, NULL);

    glUniform4f(glGetUniformLocation(gpu, “color"), 0, 1, 0, 1);

    float mat[] = {1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1};

    glUniformMatrix4fv(glGetUniformLocation(gpu, "MVP"), 1, 1, mat);

    glViewport(0, 0, 600, 600);

    glBindVertexArray(vao); glDrawArrays(GL_TRIANGLES, 0, 3);

    uniform mat4 MVP;

    layout(location = 0) in vec4 v;

    void main() {

    gl_Position = v * MVP;

    }

    uniform vec4 color;

    out vec4 outColor;

    void main() {

    outColor = color;

    }

    CPU init

    CPU draw

    Vertex shader Pixel shader

  • Geometriák és algebrák • Euklideszi és nem-euklideszi geometriák

    • Analitikus geometria külső nézőpontból

    • Pont, vektor, sík, kvaternió = vec4

    • Automatikus deriválás: Duális szám

  • Modellezés • Pontok: Descartes és baricentrikus koordinátarendszer

    • Implicit és parametrikus görbék

    • Szabadformájú görbék

    • Felületek

  • Transzformációk • Párhuzamos egyenes tartó transzformációk (eltolás,

    forgatás, nyújtás, nyírás, stb.) megadása mátrixszal

    • Perspektíva, projektív geometria, homogén koordináták

    • Homogén lineáris transzformációk

    • Komplex számok és kvaterniók

  • 2D képszintézis • Pixel vezérelt képszintézis

    • Objektum vezérelt képszintézis

    – Vektorizáció és háromszögesítés

    – Vágás

    – Raszterizáció

  • Grafikus hardver és szoftver • Interaktív grafikus alkalmazások

    • OpenGL 3+, GLUT, Glew, GPU, GLSL

    ../../../3DPrograms/GrafikaHazi/Programs/SmoothTriangle/Skeleton.sln

  • 3D grafika fizikai alapjai

    • Színek

    • Sugársűrűség és számítása

    • Optikailag sima anyagok

    • Optikailag rücskös anyagok

  • Sugárkövetés • Láthatóság, árnyékszámítás

    • Tükröződés és törés

    typedef struct{double x,y,z}vec;vec U,black,amb={.02,.02,.02}; struct sphere{ vec cen,color;double rad,kd,ks,kt,kl,ir}*s,

    *best,sph[]={0.,6.,.5,1.,1.,1.,.9, .05,.2,.85,0.,1.7,-1.,8.,-.5,1.,.5,.2,1.,.7,.3,0.,.05,1.2,1.,8.,-.5,.1,.8,.8, 1.,.3,.7,0.,0.,1.2,3.,-6.,15.,1.,

    .8,1.,7.,0.,0.,0.,.6,1.5,-3.,-3.,12.,.8,1., 1.,5.,0.,0.,0.,.5,1.5,};yx; double u,b,tmin,sqrt(),tan();double vdot(A,B)vec A ,B;

    {return A.x*B.x+A.y*B.y+A.z*B.z;}vec vcomb(a,A,B)double a;vec A,B; {B.x+=a* A.x;B.y+=a*A.y;B.z+=a*A.z;return B;}

    vec vunit(A)vec A;{return vcomb(1./sqrt( vdot(A,A)),A,black);}struct sphere *intersect(P,D)vec P,D;{best=0;tmin=1e30;

    s= sph+5;while(s-->sph)b=vdot(D,U=vcomb(-1.,P,s->cen)),u=b*b-vdot(U,U)+s->rad*s ->rad,u=u>0?sqrt(u):1e31,u=b-u>

    1e-7?b-u:b+u,tmin=u>=1e-7&&uir;d= -vdot(D,N=vunit(vcomb

    (-1.,P=vcomb(tmin,D,P),s->cen )));if(dsph)if((e=l ->kl*vdot(N,

    U=vunit(vcomb(-1.,P,l->cen))))>0&&intersect(P,U)==l)color=vcomb(e ,l->color,color);U=s->color;color.x*=U.x;color.y*=

    U.y;color.z*=U.z;e=1-eta* eta*(1-d*d);return vcomb(s->kt,e>0?trace(level,P,vcomb(eta,D,vcomb(eta*d-sqrt (e),N,black))):

    black,vcomb(s->ks,trace(level,P,vcomb(2*d,N,D)),vcomb(s->kd, color,vcomb(s->kl,U,black))));}

    main(){printf("%d %d\n",32,32);while(yx

  • Inkrementális képszintézis

    • GPU csővezeték

    – Tesszelláció

    – Transzformációk és vágás

    – Láthatóság és árnyalás

  • Játékfejlesztés • Játékmotor és avatár

    • Játékobjektumok, plakátok, részecske rendszerek

  • Fraktálok és káosz

    • Hausdorff dimenzió

    • Lindenmayer rendszerek

    • Perlin zaj

    • Iterált függények

  • (Tárgy) beugró kérdések 1. Az asszociativitás, kommutativitás, disztributivitás tulajdonságokat

    mely szorzások bírják a vektorok skaláris/vektoriális, mátrixok, komplex számok szorzása közül.

    2. Mi a sin(x3)/cos(x2) deriváltja?

    3. Írjon C++ osztályt a komplex számokhoz. 4. Írjon C++ függvényt, amely egy p1, p2 pontokra illeszkedő egyenes

    és egy c középpontú, r sugarú kör metszéspontját kiszámítja. 5. Ha az időt percben, a hosszt lábban (0.3 m) mérnék, mekkorának

    találnánk a nehézségi gyorsulást a földön? Írjon C++ függvényt, amely a p pontból v sebességgel eldobott kő pozícióját és sebességét kiszámítja a t percben.

    6. Becsülje meg, hogy hány 4 elemű vektor és 4x4-es mátrixszorzást tud a gépének processzorában 1 mag 1 másodperc alatt végrehajtani.

    7. Mi lesz a d értéke az alábbi programban, amely az f(x) = x5+1000 deriváltját a következőképen számítja ki:

    const float eps = 0.00001f; float d = (f(x + eps) – f(x)) / eps;