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 have to submit the project.
  • Any kind of cheating is punished by withholding 15 points for all involved students. 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 5 bonus points during the semester.
  • Seminars are conducted by
    • Matej Hudak (
    • Juraj Onderik (
  • Schedule of seminars is
    • Tue (8:10) - Room H6
    • Tue (18:10 - Room H3
    • Wed (18:10) - Room F248


  • 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 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 must be submitted by email to until 15.1.2011.
  • You can get max 12 points for your project.
  • 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
  • Project assignment
    • Create 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 with z-buffer or other algorithm
      • Create GUI
    • 3 Bonus points
      • Add to your demo also more complicated object - cylinder / mobius strip / sphere
      • Any other functionality / improvements (different from mandatory - add, translate, rotate,...) of your demo are optional - but can also be rewarded with 3 points


  • Submission:
  • Homeworks: +33 points (11x3) /deadline monday 23:59/ /email title: ExNN/
  • Project: +12 points /deadline 15.1.2011/
  • Cheating: -15 points
  • Minimum: +20 points /total: 45 points/
  • Attendance: Optional
  • YOUR EVALUATION ! (we add points continuously)


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ú
    • template for homework Sú

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ú
    • template for homework and seminar - Sú
    • 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ú
  • Template: Sú

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ú
  • Template: Sú

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ú
  • Template: Sú

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:
  • Sample: Sú
  • Template: Sú

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

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

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

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

Revision as of 14:39, 23 November 2011 by Hudak (Talk | contribs)