Rename assignment 1 to 1a
This commit is contained in:
parent
f4f094ff76
commit
63a1e81ea7
27 changed files with 187 additions and 2 deletions
|
@ -1,3 +1,5 @@
|
|||
# Assignment 0: Working with ASCII images
|
||||
|
||||
In this assignment, you are asked to write a program that creates an image in
|
||||
ASCII PPM format.
|
||||
|
||||
|
@ -22,7 +24,7 @@ choose, the code you turn in **must** be your own.
|
|||
[3]: https://en.wikipedia.org/wiki/Kernel_(image_processing)
|
||||
[4]: https://en.wikipedia.org/wiki/Line_integral_convolution
|
||||
|
||||
Detailed instructions:
|
||||
### Detailed instructions
|
||||
|
||||
1. Please use the following syntax to define the image size in your input file:
|
||||
|
||||
|
@ -61,7 +63,7 @@ also be used to convert images from multiple other formats into ASCII PPM format
|
|||
|
||||
[gimp]: http://www.gimp.org
|
||||
|
||||
What you should turn in:
|
||||
### What you should turn in
|
||||
|
||||
- a readme file that describes your what your program does
|
||||
- all of your source code, clearly commented
|
||||
|
|
183
assignment-1a/ASSIGNMENT.md
Normal file
183
assignment-1a/ASSIGNMENT.md
Normal file
|
@ -0,0 +1,183 @@
|
|||
# Assignment 1a: Getting Started with Ray Casting
|
||||
|
||||
In this assignment, you are asked to begin writing a basic ray casting program.
|
||||
|
||||
This program should:
|
||||
|
||||
1. read a simple scene description from a file that is provided as a command
|
||||
line argument
|
||||
2. define an array of pixels that will hold a computer-generated image of the
|
||||
scene
|
||||
3. use ray casting to determine the appropriate color to store in each pixel of
|
||||
the output image
|
||||
4. write the rendered image to an output file in ascii PPM format
|
||||
|
||||
As with assignment 0, the output file name should match the input file name
|
||||
except for the suffix. You can also earn extra credit by enabling your program
|
||||
to render a parallel projection and/or to render not only spheres but also
|
||||
cylinders.
|
||||
|
||||
You are asked to run your program on multiple different input files, featuring a
|
||||
diverse range of different input parameter settings. One of the objectives of
|
||||
this assignment is to help you to develop an intuitive understanding of how each
|
||||
of the various input settings affects the appearance of the rendered scene.
|
||||
Please be sure to specifically consider these three questions:
|
||||
|
||||
- How does the direction of the 'up' vector affect the rendered view of a scene?
|
||||
You should specifically consider tipping the 'up' vector from side to side and
|
||||
forward to back. You will want to define scenes with multiple objects,
|
||||
asymmetrically arranged, to explore this question.
|
||||
- How do changes in the field of view settings affect the contents of your
|
||||
rendered images?
|
||||
- How do various modifications of the viewing parameters affect the amount of
|
||||
perspective distortion apparent in your image?
|
||||
|
||||
In subsequent assignments you will be asked to extend the code you write for
|
||||
this assignment to incorporate additional effects like illumination, shadows,
|
||||
specular reflections and transparency, with these latter effects being achieved
|
||||
by recursive ray tracing. Be sure that your code is structured with these
|
||||
extensions in mind. In particular, you are advised to write simple, modular code
|
||||
following the example described in class.
|
||||
|
||||
Please be sure to check the grading criteria to ensure that all requirements are
|
||||
understood.
|
||||
|
||||
### Detailed instructions
|
||||
|
||||
1. Your program should read the following information from an input scene
|
||||
description file (the syntax is shown below each item; entries in italics
|
||||
are variables, entries in bold are keywords):
|
||||
|
||||
- The view origin, also variously referred to as the 'eye position', 'camera
|
||||
position' or 'center of projection' (a 3D point in space)
|
||||
|
||||
eye eyex eyey eyez
|
||||
|
||||
- The viewing direction (a 3D vector)
|
||||
|
||||
viewdir vdirx vdiry vdirz
|
||||
|
||||
- The 'up' direction (a 3D vector)
|
||||
|
||||
updir upx upy upz
|
||||
|
||||
- The horizontal field of view (in degrees, please)
|
||||
|
||||
hfov fovh
|
||||
|
||||
- The size of the output image (in pixel units)
|
||||
|
||||
imsize width height
|
||||
|
||||
- The 'background' color (using r, g, b components defined on a scale from
|
||||
0-1)
|
||||
|
||||
bkgcolor r g b
|
||||
|
||||
- A 'material' color (in terms of r, g, b components defined on a scale from
|
||||
0-1). The material color should be treated as a state variable, meaning
|
||||
that all subsequently-defined objects should use the immediately-preceding
|
||||
material color
|
||||
|
||||
mtlcolor r g b
|
||||
|
||||
- A sequence of one or more objects. For this assignment, your program is
|
||||
only required to be able to handle spheres. In subsequent assignments you
|
||||
will be asked to extend your code to handle triangles, so you will want to
|
||||
write your code with this future extension in mind. A sphere should be
|
||||
defined by the coordinates of its center point (a 3D point in space) and
|
||||
radius.
|
||||
|
||||
sphere cx cy cz r
|
||||
|
||||
- If you would like to attempt the extra credit portion of this assignment,
|
||||
please use this format to define a parallel projection
|
||||
|
||||
projection parallel
|
||||
|
||||
- If you would like to attempt the extra credit portion of this assignment,
|
||||
please use this format to define a finite cylinder (without endcaps) that
|
||||
is centered at the point (cx, cy, cz) and oriented in the direction (dirx,
|
||||
diry, dirz).
|
||||
|
||||
cylinder cx cy cz dirx diry dirz radius length
|
||||
|
||||
2. Define an array of sufficient size to store the color values of your image.
|
||||
|
||||
3. Using knowledge of the view origin, viewing direction, up direction,
|
||||
horizontal field of view and desired image aspect ratio, define an
|
||||
appropriate “viewing window” in world coordinate space, and a 1-1 mapping
|
||||
between points within this viewing window and pixel locations in your output
|
||||
image.
|
||||
|
||||
4. For each pixel in the output image:
|
||||
|
||||
- Define the equation of the ray that begins at the view origin and passes
|
||||
through the corresponding 3D point in the viewing window
|
||||
- Then, for each object in the scene:
|
||||
- Determine whether the current viewing ray intersects that object, and if
|
||||
so at what point or points
|
||||
- If there are one or more ray/object intersection points that are 'in
|
||||
front of' the view origin with respect to the positive viewing
|
||||
direction, determine which of them is closest to the view origin,
|
||||
remembering that ray/object intersection points that are 'behind' the
|
||||
view origin, with respect to the viewing direction, should be ignored
|
||||
- Determine the color of the object at the closest forward ray/object
|
||||
intersection point, if there is one, and return that value to be stored
|
||||
at the appropriate location in your image array
|
||||
- If no ray/object intersection is found, return the background color
|
||||
|
||||
5. After all of the rays have been cast and a color has been determined for
|
||||
each pixel in the output image, write the final image to an output file,
|
||||
using the ascii PPM format.
|
||||
|
||||
You are strongly encouraged to begin with a very simple scene description,
|
||||
consisting for example of a single sphere located directly in front of the eye
|
||||
in the direction of view. You are also advised to begin by using a very small
|
||||
image size, to expedite the debugging process.
|
||||
|
||||
To explore the effects of various scene parameters, you are advised to start by
|
||||
varying the values of just one viewing parameter at a time, such as: the eye
|
||||
position, the viewing direction, the direction of the ‘up’ vector, the vertical
|
||||
field of view, the image aspect ratio, etc. Once you understand the effect of
|
||||
each parameter in isolation, you should experiment with combinations of changes,
|
||||
such as: co-varying the field of view and the proximity of the eye to the
|
||||
objects in your scene. Your ability to appreciate the effects of different view
|
||||
settings will be improved if you use a relatively complex but intuitively
|
||||
organized scene, with some asymmetric features and not too much empty space. One
|
||||
example is: spheres centered at each of the 8 corners of a cube, using different
|
||||
colors for each corner, or cylinders arranged along each of the 12 edges of a
|
||||
cube.
|
||||
|
||||
### What you should turn in
|
||||
|
||||
- All of your source code, clearly commented, plus a ~~readme file with
|
||||
compiling instructions or a~~ Makefile or CMake file that the TA can use to
|
||||
compile your code.
|
||||
- One "showcase" image produced by your program, that I can share with the rest
|
||||
of the class. To save time for the TA, we would be grateful if you could
|
||||
provide this image in a format that is supported for direct display in Google
|
||||
Slides or Powerpoint.
|
||||
- A 1-3 page writeup (including pictures) in which you discuss your observations
|
||||
on how the key viewing parameters affect the appearance of the rendered scene.
|
||||
Please incorporate sufficient images produced by your ray casting program to
|
||||
illustrate and explain your findings. In your writeup, be sure to specifically
|
||||
address each of these three points:
|
||||
- How does the apparent rotation of the scene with respect to the viewpoint
|
||||
change with changes in the direction of the ‘up’ vector?
|
||||
- How do changes in the field of view settings affect the appearance of the
|
||||
scene in your rendered image?
|
||||
- How can the viewing parameters (e.g. the camera location, field of view
|
||||
settings, …) be adjusted to achieve a less exaggerated vs more exaggerated
|
||||
amount of apparent perspective distortion in your image?
|
||||
- Please submit all of the above as a single zip file, containing appropriate
|
||||
subfolders, using the naming convention hw1a.firstname.lastname.zip. Please
|
||||
do not use tar or rar or any other alternative compression mode that could
|
||||
complicate the grading process for the TA.
|
||||
|
||||
---
|
||||
|
||||
Two sample input files with their corresponding output images are provided in
|
||||
the Files directory of this Canvas website. Please feel free to use these
|
||||
examples to partially check the functionality of your program. We will be
|
||||
testing your code on additional input files.
|
Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 38 KiB |
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 25 KiB |
Loading…
Reference in a new issue