Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Grafikus hardver/szoftver alapok Szirmay-Kalos László.

Hasonló előadás


Az előadások a következő témára: "Grafikus hardver/szoftver alapok Szirmay-Kalos László."— Előadás másolata:

1 Grafikus hardver/szoftver alapok Szirmay-Kalos László

2 Kép frissités rasztertár Pixel op Raszteri- záció Vágás View transzf Modell transzf. Eszköz- képtér Virtuális világ Kimeneti csővezeték Bemeneti csővezeték kamera vektorizáció Viewport transzf Funkcionális modell Proj. transzf Inv. Viewport transzf Inv. Proj. transzf Inv. View transzf Inv. Modell transzf. Fejre állítva!

3 rajzolás Rasztertár Operációs és ablakozó rendszer (Windows) MouseLD() MouseLU() MouseMov() PutPixel() Alkalmazás freeglut Alkalmazás (CPU) Rajzolás (GPU) Grafikus könyvtár: OpenGL Szoftver architektúra gl…3dv( ) glut…( )

4 Operációs és ablakozó rendszer (Windows) freeglut main DisplayFunc KeyboadFunc IdleFunc OpenGL grafikus hardver applikáció Ablak létrehozás callback regisztráció callback-ek SpecialFunc Reshape MouseFunc MotionFunc KeyboadUpFunc Esemény kezelés

5 VAO Pixel szín OpenGL 3 x y z=0 h=1 rasztertár Normalizált képernyő -1,-1 1,1 Pixel árnyaló (fragment shader) Model mátrix Projection mátrix View mátrix MVP képernyő Pixel cím Vágás, Homogén osztás Viewport transzform Raszterizáció Vágás, Homogén osztás Viewport transzform Raszterizáció gl_Position reg1 reg2 reg3 reg4 … gl_FragCoord reg1 reg2 reg3 reg4 … Vágás, homdiv Viewport tr. Rasztiráczó Csúcspont árnyaló (vertex shader) reg1, reg2, reg3 …: AttribArray VBO Vertex Buffer Object glViewport(left,bottom,width,height) Pixel szín + vertex attribútumok

6 Csúcspont adatfolyamok VBO 0 x1, y1 R1, G1, B1 x2, y2 R2, G2, B2 x3, y3 R3, G3, B3 VB0 0 x1, y1 x2, y2 x3, y3 VBO 1 R1, G1, B1 R2, G2, B2 R3, G3, B3 VAO AttribArray 0AttribArray 1 Vertex shader in var1 VAO in var2 glVertexAttribPointer interleaved AttribArray … Vertex shader Input registers glBindAttribLocation

7 Az első OpenGL programom #include int main(int argc, char * argv[]) { glutInit(&argc, argv); // init glut glutInitContextVersion(3, 0); glutInitWindowSize(600, 600); glutInitWindowPosition(100, 100); glutInitDisplayMode(GLUT_RGBA|GLUT_DOUBLE); glutCreateWindow(“Hi Graphics"); glewExperimental = true; // magic glewInit(); // init glew glViewport(0, 0, 600, 600); onInitialization(); glutDisplayFunc(onDisplay); //event handler glutMainLoop(); return 1; } (-1,-1) (1,1) (100,100) 600

8 vbo onInitialization() unsigned int shaderProgram; unsigned int vao; // virtual world on the GPU void onInitialization() { glGenVertexArrays(1, &vao); glBindVertexArray(vao); // make it active unsigned int vbo;// vertex buffer object glGenBuffers(1, &vbo); // Generate 1 buffer glBindBuffer(GL_ARRAY_BUFFER, vbo); // Geometry with 24 bytes (6 floats or 3 x 2 coordinates) static float vertices[] = {-0.8,-0.8, -0.6,1.0, 0.8,-0.2}; glBufferData(GL_ARRAY_BUFFER, // Copy to GPU target sizeof(vertices), // # bytes vertices, // address GL_STATIC_DRAW);// we do not change later glEnableVertexAttribArray(0); // AttribArray 0 glVertexAttribPointer(0, // vbo -> AttribArray 0 2, GL_FLOAT, GL_FALSE, // two floats/attrib, not fixed-point 0, NULL); // stride, offset: tightly packed vbo 24 bytes vao AttribArray 0 vbo 3 vertices 2 floats/vertex

9 static const GLchar * vertexSource = R"( … )“; static const GLchar * fragmentSource = R"( … )“; unsigned int vertexShader = glCreateShader(GL_VERTEX_SHADER); glShaderSource(vertexShader, 1, &vertexSource, NULL); glCompileShader(vertexShader); unsigned int fragmentShader=glCreateShader(GL_FRAGMENT_SHADER); glShaderSource(fragmentShader, 1, &fragmentSource, NULL); glCompileShader(fragmentShader); shaderProgram = glCreateProgram(); glAttachShader(shaderProgram, vertexShader); glAttachShader(shaderProgram, fragmentShader); glBindAttribLocation(shaderProgram, 0, "vp"); glBindFragDataLocation(shaderProgram, 0, "outColor"); glLinkProgram(shaderProgram); glUseProgram(shaderProgram); } Folyt. #version 130 precision highp float; uniform mat4 MVP; in vec2 vp; void main() { gl_Position = vec4(vp.x,vp.y,0,1) * MVP; } #version 130 precision highp float; uniform vec3 color; out vec4 outColor; void main() { outColor = vec4(color,1); } rasztertár Fragment Shader outColor vp Vertex shader gl_Position Vágás, Homogén osztás Viewport transzform Raszterizáció gl_Position reg1 reg2 reg3 reg4 … gl_FragCoord reg1 reg2 reg3 reg4 … Vágás, homdiv Viewport tr. Rasztiráczó AttribArray 0

10 void onDisplay( ) { glClearColor(0, 0, 0, 0); // background color glClear(GL_COLOR_BUFFER_BIT); // clear frame buffer // Set vertexColor to (0, 1, 0) = green int location = glGetUniformLocation(shaderProgram, “color"); glUniform3f(location, 0.0f, 1.0f, 0.0f); // 3 floats float MVPtransf[4][4] = { 1, 0, 0, 0, // MVP matrix, 0, 1, 0, 0, // row-major! 0, 0, 1, 0, 0, 0, 0, 1 }; location = glGetUniformLocation(shaderProgram, "MVP"); glUniformMatrix4fv(location, 1, GL_TRUE, &MVPtransf[0][0]); glBindVertexArray(vao); // Draw call glDrawArrays(GL_TRIANGLES, 0 /*startIdx*/, 3 /*# Elements*/); glutSwapBuffers( ); // exchange buffers for double buffering } #version 130 precision highp float; uniform mat4 MVP; in vec2 vp; void main() { gl_Position = vec4(vp.x,vp.y,0,1) * MVP; } #version 130 precision highp float; uniform vec3 color; out vec4 outColor; void main() { outColor = vec4(color,1); }

11 OpenGL primitívek GL_POINTS GL_LINES GL_LINE_STRIP GL_LINE_LOOP GL_POLYGON GL_TRIANGLE_STRIP GL_TRIANGLES GL_TRIANGLE_FAN GL_QUADS GL_QUAD_STRIP glDrawArrays( primitive, startIdx, numOfElements);

12 1. házi Twinkle, twinkle little star A 2D virtuális világ három, legalább 7-ágú forgó és pulzáló csillagot tartalmaz, amelyek színe különböző. A legfényesebb csillag az egérklikkek által kijelölt zárt -0.8-as tenziójú Catmull-Rom spline-t követi, amely- nek csomóértékei a gomblenyomáskori idők. A leg- utolsó és legelső kontrolpont között 0.5 sec telik el, majd a csillag periódikusan újra bejárja a görbét. A görbe mindenhol folytonosan deriválható, a legelső pontban is. A másik két csillagot a legfényesebb csil- lag a Newton féle gravitációs erővel vonzza, azaz mozgatja. A gravitációs konstanst úgy kell meg- választani, hogy a mozgás élvezhető legyen. SPACE lenyomására a virtuális kameránkat a fényes csillag- hoz kapcsolhatjuk, egyébként a kamera statikus. Bónusz: Doppler effektus

13 Házi keret könyvtárakkal


Letölteni ppt "Grafikus hardver/szoftver alapok Szirmay-Kalos László."

Hasonló előadás


Google Hirdetések