CS计算机代考程序代写 COMP 5812M: Rendering 2021-2022

COMP 5812M: Rendering 2021-2022

ASSIGNMENT 1: OpenGL Software Pipeline [50 marks / c. 30-50 working hours]

You will be provided with a basic OpenGL renderer that reads in a subset of the standard .obj file format along with a .ppm file in ASCII format as a texture. This renderer is built on Qt, and compiles correctly against Qt 5.13.0 on feng-linux with the following commands:

module add qt/5.13.0
qmake -project QT+=opengl
qmake
make

It can be launched with:

> ./FakeGLRenderWindowRelease ../path_to/filename ../path_to/texturename

Windows and OSX instructions are available in the readme.txt file provided.

Several textures and object files are also provided, but with no guarantee that all of them will render well – they may have holes, bad texture coordinates, etc. Most of the smaller ones are fine.

In the application, there are two main widgets with a number of secondary controls affecting the render process. On the left, there is a conventional OpenGL renderer which uses the system library. On the right, there is a window which displays an image which you can modify in your code.
You should only need to edit the code in FakeGL.h/FakeGL.cpp, which have had nearly all the necessary code stripped out.
You may also wish to modify FakeGLRenderWidget::paintFakeGL() to change the sequence of calls or parameters for testing purposes.

If you implement the standard pipeline correctly, the two widgets should show roughly the same image. One of the .obj files (triangle_groundplane.obj) should have the same coordinates as the exercise we have already handed out.

It is recommended that you implement in the following order:
I Decide on state variables that you need to store in each stage
II Write a stream output function to dump the entire state of the library
III Decide how to trigger later stages – we will discuss this in the lab session
IV Implement ClearColor() and Clear()
V Implement TransformVertex() without transformations
VI Implement RasterisePoint()
VII Implement ProcessFragment()
VIII Increase the point size so you can see the points
IX Modify ProcessFragment() to set pixel colour
X Add the matrix transformations to TransformVertex()
XI Implement the Depth Test (easiest with large points, not triangles)
XII Implement RasteriseLineSegment()
XIII Add depth interpolation to RasteriseTriangle() (which is provided)
XIV Implement lighting calculations in TransformVertex()
XV Implement textures
XVI Implement Phong shading

Each of the stages listed is worth approximately 2-3 marks, although some are worth more or less.

Since you have been provided with a user interface, file input & support code, no other libraries may be used: any additional code you submit must be written by you personally.

The code MUST run on the University’s Linux system – i.e. on feng-linux.leeds.ac.uk or feng-linux.leeds.ac.uk/gpu. You may implement on your own machine, but it will be tested on ours.

PENALTIES:
Poorly structured or badly commented code may be penalised by up to 25% of the marks available.
Poorly formatted output files may also be penalised by up to a further 25% of the marks available.
Code without a readme or makefile may be penalised by up to 10% of the marks available.

Code that does not compile properly will be assigned a mark of 0, but I will usually give the student one chance to correct this.

DUE DATE: Friday, November 25th, 10:00 am