[SOLVED] CS4247 Assignment 4

30.00 $

Category:
Click Category Button to View Your Next Assignment | Homework

You will receive the following solution file(s) instantly after successful payment:

zip file icon Assign4-vmulez.zip (4262.2 KB)
Assignment Instructions Updated Recently? Submit Below and we will provide new Solution!
Submit New Instructions
🔒 Securely Powered by:
Secure Checkout
5/5 - (3 votes)

Assignment Overview

You are provided with an incomplete C/C++ program that implements the progressive refinement radiosity algorithm

Task 1
 Complete the program

 Generate a radiosity solution for the sample input scene Task 2

 Create a new input scene model
 Generate a radiosity solution for the new scene

3

Learning Objectives

 Implementing the Progressive Refinement Radiosity Algorithm  After completing the assignment, you should have learned

 How to use the Hemicube algorithm to estimate form factors:

  •   How to compute delta form factor for each pixel on the hemicube
  •   How to set up OpenGL views to project the scene onto the faces of the hemicube
  •   How to use the item buffering technique to identify the patch that occupies a pixel

     How the progressive refinement radiosity algorithm works:

  •   How to “shoot” light power from a shooter patch to the gatherer

    patches, and update the radiosity values of these patches

  •   How to update the unshot power of a shooter patch with the new

    power received by its child gatherer patches

  •   How to terminate the progressive refinement radiosity computation

4

What Are Provided (1)

Download the file cs4247_2021S2_assign4_todo_(win-vs2017).zip from the Assignments folder in LumiNUS Files

The ZIP file contains a Visual Studio 2017 solution file assign4.sln. The solution has three C/C++ projects

 QuadsViewer
 RadiositySolver  RadiosityViewer

 Tip: In Visual Studio, to make a project the default project to be built and run, you can right-click on the project name in the Solution Explorer, and select “Set as StartUp Project”

–

For Windows

5

What Are Provided (1)

Download the file cs4247_2021S2_assign4_todo_(mac-xcode).zip from the Assignments folder in LumiNUS Files

The ZIP file contains the Xcode project assign4.xcodeproj, which has the following three C/C++ targets

 QuadsViewer
 RadiositySolver  RadiosityViewer

–

For

macOS

6

What Are Provided (2)

 QuadsViewer is a completed (old-style) OpenGL application that lets you preview the input scene model and check the subdivision of the input quads into smaller “shooter” quads and even-smaller “gatherer” quads

 The default input scene model file is model.in

 Gatherer quads are obtained by subdividing shooter quads

  •   Press “m” to cycle through display of the input quads, the shooter quads, and the gatherer quads
  •   In quadsviewer.cpp, the size of the shooter and gatherer quads are controlled by the values of maxShooterQuadEdgeLength and maxGathererQuadEdgeLength respectively

     These two values are from the input scene model file model.in

     radiositysolver.cpp also uses these two values for the same purpose

7

What Are Provided (3)

 RadiositySolver is the incomplete program that

 Reads the input scene model from model.in

 Subdivides the input quads into “shooter” and “gatherer” quads

 In radiositysolver.cpp, the size of the shooter and gatherer quads are controlled by the values of maxShooterQuadEdgeLength and maxGathererQuadEdgeLength respectively

 These two values are from the input scene model file model.in  Computes a radiosity solution for the scene

 This step is the part to be completed
 Computes vertex radiosities from the patch radiosities

 This step can take very long to run, so you should first test your radiosity algorithm implementation with a model with not too many gatherer quads

 Outputs the model with radiosity solution to the file model.out
8

What Are Provided (4)

 RadiosityViewer is a completed (old-style) OpenGL application that lets you view the model output by RadiositySolver

 Reads in a model with radiosity solution from file model.out  Performs simple tonemapping to map radiosity values to

displayable color values (i.e. to R, G, B values from 0.0 to 1.0)

 Renders the polygons using the tonemapped radiosity values as vertex colors

 You can try the viewer on the given sample model file cornell_box.out

 First, copy cornell_box.out to the file model.out

 Note that the sample cornell_box.out has been “watermarked” with some bright and dark patches — your radiosity solution for cornell_box.in should not have those

9

Task 1

 Complete only the source file radiositysolver.cpp, which is part of the RadiositySolver project

  •   Complete the code at places marked “WRITE YOUR CODE HERE”
  •   You can add additional functions to the file
  •   Use good coding style and document your code

    adequately (otherwise marks deducted)

  •   Study the files quadmodel.{h,cpp} to see how the scene model and its subdivided quads are represented
  •   You can make use of helper functions found in common.h and vector3.h

10

Task 1 (continue)

 Test your program on the provided sample input scene model cornell_box.in

  •   Before running your RadiositySolver, copy cornell_box.in to the file model.in
  •   After running your RadiositySolver, copy the output file model.out to cornell_box_my.out

     View your radiosity solution model.out using RadiosityViewer (in non-wireframe mode) and capture three different snapshots

  •   On Windows 10, you can use the Snip & Sketch tool (press Win + Shift + “S”) to take a snapshot of the window and save the image
  •   Use the default window size
  •   Save the three snapshots to image files

     cornell_box_1.png  cornell_box_2.png  cornell_box_3.png

11

Task 1

 RadiositySolver uses to the Progressive Refinement Radiosity algorithm to compute patch radiosity of each gatherer quad

 Pre-compute the delta form factors on the top face (already done) and side faces of the hemicube

 Note that top hemicube face has same pixel resolution as the default window size (always a square)

 Progressive Refinement Radiosity loop

  •   Find the shooter quad with the greatest unshot power
  •   Use a hemicube to compute form factors from the shooter quad to each of the gatherer quads
  •   Update the radiosity of each of the gatherer quads
  •   Update the unshot power of each shooter patch with the new power

    received by its child gatherer patches

  •   Terminate loop if max iterations is reached

—

RadiositySolver

Explained

12

Task 2

Create a new scene model

  •   Study the sample scene model cornell_box.in to find

    out the input model file format

  •   Name your new scene new_model.in
  •   Run your RadiositySolver program on new_model.in to output new_model.out
  •   View new_model.out in RadiosityViewer and capture three different snapshots

     Use the default window size
     Save your snapshots to image files

     new_model_1.png  new_model_2.png  new_model_3.png

13

What to Submit

Only the following 10 files

 Task 1

 radiositysolver.cpp

 cornell_box_my.out

cornell_box_1.png, cornell_box_2.png, cornell_box_3.png

 Task 2
 new_model.in
 new_model.out
new_model_1.png, new_model_2.png, new_model_3.png

14

How to Submit

Put only the required files in a single ZIP file
Name your ZIP file your-student-number_assign4.zip

 e.g. A0123456X_assign4.zip
Submit your ZIP file to the Assignment 4 Submission

folder in LumiNUS Files

 Folder will close at the deadline
 You may upload your ZIP file multiple times, but we take

the latest

 Please delete your older versions

15

Other Requirements

 Programming languages and APIs

 C / C++
 OpenGL 1.1 (old-style OpenGL; no shader)  GLU & GLUT / FreeGLUT
 No other third-party APIs are allowed

 Platform

  •   You can develop your program on any OS and IDE
  •   However, the final submitted version must be compilable/buildable in Microsoft Visual Studio 2017
  • Assign4-vmulez.zip