代做CS770/870 Assignment 8代做C/C++程序

CS770/870 Assignment 8

• Out: Tuesday, November 5th.

•  Due: Thursday, November 14th.

Overview

In this assignment, you will write a ray tracer that uses only primary rays (no reflected, refracted or shadow rays). You should be able to render spheres, triangles, and cylinders.

For a 10% bonus, implement shadow rays.

The Scene

Your rendering should be based on a scene, which is described by the following information:

• one or more materials

a list of shapes

a list of lights

• a camera

Pseudocode

You are free to implement the ray tracer any way you see fit, but I suggest you follow this pseudocode:

foreach pixel (image) {

ray = new_ray (pixel, pixel-eye)

pixel's color = ray_color (ray, scene)

}

ray_color (ray, scene) {

hit = first_hit (ray, scene)

bj = hit.shape

return glossy_color (ray, hit, obj, scene)

}

first_hit (ray, scene) {

list = (empty)

foreach shape (scene) {

if (ray intersects shape at location) {

hit = hitpoint(location, N, shape)

list.append(hit)

}

}

return list.getMinimum()

}

glossy_color (ray, hit, obj, scene) {

lights = scene.light_list

color = (0 0 0)

foreach light (lights) {

color += local_illum (ray.dir, hit.normal, light.dir,

obj.material, light.color)

}

color += obj.material.ambient_color * ambient_light

return color

}

local_illum (rayDir, N, L, mat, I) {

V = -rayDir

R = mirror_direction (L, N)

kd = mat.diffuse_color

ks = mat.specular_color

n = mat.glossiness

return I * (kd * N dot L + ks * (R dot V)^n)

}

mirror_direction (L, N) {

return 2(N dot L)*N - L

}

C++ Classes

This assignment extends the previous one. The new features include:

• Instead of a vec3 color, each Shape now has an associated Material. The Material class (already implemented) has information for calculating a color using the Phong illumination model:

ambient reflectance

difuse reflectance

specular reflectance

shininess exponent

• The Hit class now has pointer to Material insted of a simple vec3 color.  Its .set () method has changed accordingly (already implemented).

The Light class describes a point light source, with this information (already implemented):

position

color

The Shape class and its children Triangle, Sphere and Cylinder all have a Material field too.

The Camera class is new. It has these fields (all public) (already implemented):

_eye : eye position

_lookat : where the camera is looking at

_up : which way is “up” in the world

_clip_Left, _clip_Right, _clip_Bottom, _clip_Top, and _clip_Near : these position the image rect- angle.

_ambient_fraction : how much each light contributes to the over-all ambient light.

The Caster class has several changes:

It now has a _camera instance variable. This is a Camera object, which you’ll use to re-compute the VCS→ WCS matrix.

The method that should update the VCS→ WCS matrix is now called camera_did_move ().

The ray_color () method should implement the pseudocode above.

The glossy_color () method should compute the color at the given hit point, taking all the light sources into account, and also the ambient light color.

The local_illumination () method computes the contribution of ONE light to the hit point.

The mirror_direction () method computes the reflection R vector, based on the vector L towards the light, and the vector N normal to the hit surface.

The hits_something() method should return true/false if the given ray hits some object. It’s used for shadow rays. You should call it from ray_color () if_shadowing is‘true.

The read_scene () method replaces the init_scene (). It reads a scene description from a file (already implemented).

• The Tokenize r class will read a file, and report whitespace-separated tokens.  It has these methods (already implemented):

next_string() : returns the next token.

next_number () : returns the next token, converted to a float (may throw an exception).

match (s ) : reads the next token, and throws an exception if it doesn’t match s.

eof () : returns true at end of file.

file_position() : returns a string describing the current line number in the file.

• The Scene_Reader class handles reading the scene description. It includes these methods:

read_sphere() : reads information for a sphere, and returns a pointer to a new Sphere object (already implemented).

read_triangle() : reads information for a triangle, and returns a pointer to a new Triangle object. NOT COMPLETE.

read_cylinder() : reads information for a cylinder aligned with they axis, and returns a pointer to a new Cylinder object. NOT COMPLETE.

read_material () : reads information for a surface material, and returns a Material object. NOT COM- PLETE.

read_light() : reads information for a point light source, and returns a Light object. NOT COMPLETE.

read_camera () : reads information for the camera, and returns a Camera object. NOT COMPLETE.

read_vec3 () reads three floats, and returns a vec3 (already implemented).

find_named_material () : given a vector of Materials, and a name, returns the Material that matches the name (already implemented).

Controls

The following keyboard controls are implemented in the Caster_Controller class (which you don’t have to change):

•  UP  /  DOWN  arrow: move eye up/down, keeping look-at point fixed

•  LEFT   /   RIGHT  arrow : move eye le什/right, keeping look-at point fixed

• Shift+UP  /  Shift+DOWN  arrow: move eye forward/backward.

R  /  Shift+R : decrease/increase the resolution

C : output the current camera position.

S : toggle the _shadowing flag.

Additional Information

I’ve prepared additional information files:

data-format .pdf: syntax specifications for the scene files.

illumination .pdf : details on the Phong local illumination.

rt-faq.pdf : other frequently-asked questions.

Expected Output

The program caster expects a command-line argument, which is a scene file. If you type

caster scene/pyramid.txt

on the command line, you should see this:

If you type

caster  scene/snowman .txt

on the command line (and have implemented shadows), you should see this:

If you type

caster scene/snowman-1light.txt

on the command line (and have implemented shadows), you should see this:

Submission

When you are done, go to the mycourses, find the course, upload all the files that you changed (especially caster .cpp, triangle.cpp, sphere.cpp, cylinder.cpp, and scene_ reader .cpp),and click “Submit”.





热门主题

课程名

mktg2509 csci 2600 38170 lng302 csse3010 phas3226 77938 arch1162 engn4536/engn6536 acx5903 comp151101 phl245 cse12 comp9312 stat3016/6016 phas0038 comp2140 6qqmb312 xjco3011 rest0005 ematm0051 5qqmn219 lubs5062m eee8155 cege0100 eap033 artd1109 mat246 etc3430 ecmm462 mis102 inft6800 ddes9903 comp6521 comp9517 comp3331/9331 comp4337 comp6008 comp9414 bu.231.790.81 man00150m csb352h math1041 eengm4100 isys1002 08 6057cem mktg3504 mthm036 mtrx1701 mth3241 eeee3086 cmp-7038b cmp-7000a ints4010 econ2151 infs5710 fins5516 fin3309 fins5510 gsoe9340 math2007 math2036 soee5010 mark3088 infs3605 elec9714 comp2271 ma214 comp2211 infs3604 600426 sit254 acct3091 bbt405 msin0116 com107/com113 mark5826 sit120 comp9021 eco2101 eeen40700 cs253 ece3114 ecmm447 chns3000 math377 itd102 comp9444 comp(2041|9044) econ0060 econ7230 mgt001371 ecs-323 cs6250 mgdi60012 mdia2012 comm221001 comm5000 ma1008 engl642 econ241 com333 math367 mis201 nbs-7041x meek16104 econ2003 comm1190 mbas902 comp-1027 dpst1091 comp7315 eppd1033 m06 ee3025 msci231 bb113/bbs1063 fc709 comp3425 comp9417 econ42915 cb9101 math1102e chme0017 fc307 mkt60104 5522usst litr1-uc6201.200 ee1102 cosc2803 math39512 omp9727 int2067/int5051 bsb151 mgt253 fc021 babs2202 mis2002s phya21 18-213 cege0012 mdia1002 math38032 mech5125 07 cisc102 mgx3110 cs240 11175 fin3020s eco3420 ictten622 comp9727 cpt111 de114102d mgm320h5s bafi1019 math21112 efim20036 mn-3503 fins5568 110.807 bcpm000028 info6030 bma0092 bcpm0054 math20212 ce335 cs365 cenv6141 ftec5580 math2010 ec3450 comm1170 ecmt1010 csci-ua.0480-003 econ12-200 ib3960 ectb60h3f cs247—assignment tk3163 ics3u ib3j80 comp20008 comp9334 eppd1063 acct2343 cct109 isys1055/3412 math350-real math2014 eec180 stat141b econ2101 msinm014/msing014/msing014b fit2004 comp643 bu1002 cm2030
联系我们
EMail: 99515681@qq.com
QQ: 99515681
留学生作业帮-留学生的知心伴侣!
工作时间:08:00-21:00
python代写
微信客服:codinghelp
站长地图