Cg1 2011 650.png

Practical Seminars on Computer Graphics 1 (Winter 2011)

  • On every seminar we will implement selected problems/algorithms from lessons. We will usually start with a prearranged template downloadable from with site.
  • As a programming language we will use C#. We will use Visual C# 2010 Express as development environment. Alternatively you can use MonoDevelop (Linux / Mac OSX) on your own machine.
  • Your code should be well formatted and commented. Titles of functions, classes, variables should be representative for their purpose.
  • Every week you have to finish and submit the assignment as homework.
  • At the end of the semester you can submit the project.
  • Any kind of cheating is punished by withholding 11 points for all involved students (from 33). Situation where only part of code is shared is also considered cheating!
  • Attendance at seminars is optional but recommended. Your activity during seminar can be awarded with max 3 bonus points during the semester.
  • Seminars are conducted by
    • Matej Hudak (subseth.mato@gmail.com)
    • Juraj Onderik (wonderik@gmail.com)
  • Schedule of seminars is
    • Tue (8:10) - Room H6
    • Tue (18:10 - Room H3
    • Wed (18:10) - Room F248

Homeworks

  • As a homework, you will program what we could not finish during exercise. Assignment and template will be downloadable from this site. See exercises.
  • Homework must be submitted by email to cg1.2011.hw@gmail.com every week until next Tuesday 06:00 (morning).
  • Your submission email must have title in form 'ExNN' where NN is the number of exercise, eg. Ex05.
  • You can get max 3 points per homework, totally 33 points. Late submission is for 0 points.
  • It is required to submit zipped source code of your homework. Do not send executable files. Homework without source code is for 0 points!

Project

  • Project is your opportunity to gain max 9 points bonus points and it is optional.
  • Project must be submitted by email to cg1.2011.hw@gmail.com
    • until 27.12.2011 - 23:59 if your final term is before 16.1.2012
    • until 13.1.2012 - 23:59 if your final term is after 16.1.2012
  • It is required to submit source code of your project. Executable files are optional. Projects without source code is for 0 points!
  • Every method of your app must be coded by you - external libraries are not allowed. Do not use OpenGl or DirectX or any other rasterization library.
  • Comment your code and add help!
  • Project assignment
    • Create kick-ass demo app which can visualize 3D cube in this way:
      • Implement mathematical library to translate, scale and rotate cube.
      • Use perspective matrix to project cube from 3D space to 2D space
      • Implement scanline rasterization of cube's faces with extension of mapping a square texture
      • Solve visibility of cube's faces
      • Create GUI


Summary

  • Submission: cg1.2011.hw@gmail.com
  • Homeworks: +33 points (11x3) /deadline Tuesday 06:00 AM /email title: ExNN/
  • Project: +9 bonus points
  • Cheating: -11 points (from 33 points)
  • Minimum: +14 points (from 33 points)
  • Attendance: Optional
  • YOUR EVALUATION ! (we add points continuously)
    • Final Score: 33 points = final score 45

Seminars

Exercise01 [20/21.9] "Introduction"

  • There are no points for this seminar.
  • csharp tutorials
  • visual c# tutorials
  • Visual Studio Tips
    • F2: Rename object/class/property/field...
    • F5: Build and debug solution
    • Shift + F5: Stop debugging solution
    • F9: Add/Remove break-point at current line
    • F12: Navigate to definition/declaration of object/class...
    • CTRL + Space: List members of object/class after "." or parameters of method after "("

Exercise02 [27/28.9] "Vectors and Matrices"

  • Introduction to C#
  • classes: Vector3, Matrix33
  • Add(V3, V3), Sub(V3, V3), Cross(V3, V3), Dot(V3, V3)
  • Add(M3, M3), Mul(M3, M3), Sub(M3, M3)
  • Mul(M3, V3), Mul(V3, M3)
  • Gui calculator:
    • 3x1 vector (operator) 3x1 vector = 3x1 vector
    • 3x3 matrix (operator) 3x3 matrix = 3x3 matrix
  • Assignment
    • Create a simple application for vectors(3x1) and matrices(3x3). Create classes Vector3 a Matrix33. Create GUI according to final sample. Implement operations for vectors: W = U + V, W = U - V, W.X = Dot(U,V), W = Cross(U,V), W.X = U.Length and for matrices: C = A + B, C = A - B, C = A * B, W = A * V, W = U * B. Implement them as operators '+', '-', '*',.. Create calculator application with all operations working similar as in final sample.
    • Final sample Súbor:Ex2.zip
    • template for homework Súbor:Temp.zip

Exercise03 [04/05.10] "Transformations 1"

  • classes: Vector4, Matrix44, Polyline
  • A.Transpose(), A.Inverse(), A.Determinant()
  • RotateX/Y/Z/XYZ
  • Translate(K), Scale(K)
  • Drawing
    • Polyline
    • Free
  • Assignment
    • Create a simple application with transformations and drawing. In transformations implement operations in Matrix44 labeled 'To Do'. In drawing implement free drawing using mouse left button_(down, move, up). Fill all sections labeled 'To Do'. Create 'Clear All' button. Create final application with all operations working similar as in final sample.
    • Final sample Súbor:Ex3.zip
    • template for homework and seminar - Súbor:TemplateEx3.zip
    • Inverse Matrix: [1]

Exercise04 [11/12.10] "Transformations 2" (Onderik)

  • Implement definition and modification of simple polyline objects. Following functionality have to be implemented based on the mouse butons and modifier keys.
  • Left MB: Select pivot of one closest polyline.
  • Left MB + SHIFT: Select more pivots.
  • Left MB + CTRL: Create and place new polyline at the mouse cursor.
  • Left MB + ALT: Add new point to the first selected polyline at mouse cursor.
  • Right MB: Move seleted polylines in plane XY.
  • Right MB + CTRL: Rotate selected polylines around Z-axis in XY plane.
  • Right MB + SHIFT: Scale selected polylines uniformely in XY plane.
  • Sample: Súbor:CG1.Ex04.zip
  • Template: Súbor:CG1.Ex04.Template.zip

Exercise05 [18/19.10] "Projection" (Hudak)

  • Implement 3 types of projection: orthogonal, perspective and parallel. Use Help to assign correct polyline to correct projection. Implement method to defined segment of projection line as projection of polyline 3(orange). Methods have to be a projections by definition and they also should be transparent to interaction with polylines(during rotation, scale or translate).
  • Materials
  • Sample: Súbor:CG1.Ex05.zip
  • Template: Súbor:CG1.Ex05.Template.zip

Exercise06 [25/26.10] "Rasterization of Line" (Onderik)

[1/2.11] - No Exercise

  • study, study, study

Exercise07 [8/9.11] "Rasterization of Circle and Ellipse" (Hudak)

  • Implement rasterization of Circle using both Bresenham and Midpoint algorithm. Also implement rasterization of Ellipse. See sample and template for more info. Results have to be rasterizations by definition (e.g. use algorithms from teoretical seminars or additional materials - inspiration only!!!). Create final application with all operations working similar as in final sample.
  • Materials
  • Sample: Súbor:CG1.Ex07.zip
  • Template: Súbor:CG1.Ex07.Template.zip

Exercise08 [15/16.11] "Visualization of Implicit Function" (Onderik)

  • Implement rasterization of several simple 2D (implicit) functions (pixel(i,j) = f(i,j)) as shown in sample solution. Control points are inserted by clicking with right mouse button into canvas. Implement all GUI controls similar to sample solution.
    • Sphere (torus) are defined by distance from image center and given radius1 (and radius2).
    • Gradient in cylinder case is proportional to the distance from line passing through two control points.
    • Voronoi (diagram) assigns each pixel the color of the nearest control point
    • Bloby case: color = sum_k{(1 - d_k/radius1)^3} where d_k is bounded distance from each control point (c_k), ie. if d_k > radius1 set d_k = radius1
    • Plasma effect: http://www.mennovanslooten.nl/blog/post/72
  • Sample: Súbor:CG1.Ex08.zip
  • Template: Súbor:CG1.Ex08.Template.zip

Exercise09 [22/23.11] "Scanline of Polygon" (Hudak)

Exercise10 [29/30.11] "Flood Fill" (Onderik)

Exercise11 [06/07.12] "Clipping" (Hudak)

  • Implement Cohen-Sutherland algorithm similar to sample application.
  • 1 optional bonus point - one clipping algorithm of your choice different from Cohen-Sutherland.
  • Functionality
    • LMB - add vertices and lines
    • RMB + move - draw clipping polygon and start clipping
  • Sample: Súbor:CG1.Ex11.zip
  • Template: Súbor:CG1.Ex11.Template.zip

Exercise12 [13/14.12] "Visibility" (Onderik)

  • Implement scan-line of parallel projection of two spheres and solve visibility with simple z-buffer algorithm. Imagine you shoot a virtual ray out of each pixel in perpendicular direction to the screen plane (along z-axis, screen is XY-plane). If the ray hit the sphere in some point store its distance to the camera (screen) in z-buffer and set color of the pixel w.r.t to the relative distance in z-axis to the sphere center. See Súbor:Figure.pdf for more info.
  • Sample: Súbor:CG1.Ex12.zip
    • LMB - move spheres in XY
    • RMB - move sphere in Z (moving mouse in y-axis changes z of sphere)
  • Template: Súbor:CG1.Ex12.Template.zip