From 00000180d30995b8a733d91af071e35b50e84b9c Mon Sep 17 00:00:00 2001 From: Michael Zhang Date: Wed, 1 Feb 2023 16:13:48 -0600 Subject: [PATCH] Add writeup --- assignment-1/.gitignore | 2 ++ assignment-1/Makefile | 25 +++++++++----- assignment-1/README.md | 1 - assignment-1/doc/fov.jpg | Bin 0 -> 38624 bytes assignment-1/doc/map.jpg | Bin 0 -> 32460 bytes assignment-1/doc/rot.jpg | Bin 0 -> 25653 bytes assignment-1/src/main.rs | 8 ++++- assignment-1/writeup.md | 73 +++++++++++++++++++++++++++++++++++++++ flake.nix | 24 ++++++++----- 9 files changed, 114 insertions(+), 19 deletions(-) create mode 100644 assignment-1/doc/fov.jpg create mode 100644 assignment-1/doc/map.jpg create mode 100644 assignment-1/doc/rot.jpg create mode 100644 assignment-1/writeup.md diff --git a/assignment-1/.gitignore b/assignment-1/.gitignore index 8aaef81..58e5cde 100644 --- a/assignment-1/.gitignore +++ b/assignment-1/.gitignore @@ -1,3 +1,5 @@ /target +/assignment-1 *.ppm *.zip +*.pdf diff --git a/assignment-1/Makefile b/assignment-1/Makefile index 49fa46e..79176e2 100644 --- a/assignment-1/Makefile +++ b/assignment-1/Makefile @@ -1,13 +1,18 @@ -.PHONY: clean +.PHONY: all clean + +DOCKER := docker +ZIP := zip +PANDOC := pandoc HANDIN := hw1a.michael.zhang.zip - -BINARY := target/release/assignment-1 +BINARY := assignment-1 +WRITEUP := writeup.pdf +SOURCES := $(shell find -name "*.rs") all: $(HANDIN) -$(BINARY): - docker run \ +$(BINARY): $(SOURCES) + $(DOCKER) run \ --rm \ -v "$(shell pwd)":/usr/src/myapp \ -v cargo-registry:/usr/local/cargo \ @@ -15,9 +20,13 @@ $(BINARY): -w /usr/src/myapp \ rust \ cargo build --release + mv target/release/assignment-1 $@ -$(HANDIN): $(BINARY) Cargo.toml Cargo.lock README.md - zip -r $@ src $< +$(HANDIN): $(BINARY) $(WRITEUP) Cargo.toml Cargo.lock README.md + $(ZIP) -r $@ src $< + +writeup.pdf: writeup.md + $(PANDOC) -o $@ $< clean: - rm -f $(HANDIN) $(BINARY) + rm -f $(HANDIN) $(BINARY) $(WRITEUP) diff --git a/assignment-1/README.md b/assignment-1/README.md index a3f8d2e..e69de29 100644 --- a/assignment-1/README.md +++ b/assignment-1/README.md @@ -1 +0,0 @@ -# Raycaster diff --git a/assignment-1/doc/fov.jpg b/assignment-1/doc/fov.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e9d18b5c1ff8111b5c76b7f786feb223b8c5cc36 GIT binary patch literal 38624 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 literal 0 HcmV?d00001 diff --git a/assignment-1/doc/map.jpg b/assignment-1/doc/map.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c61cb7e08faf46ffaff6847c795848bdcaa0c4d0 GIT binary patch literal 32460 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 V^#Dl8{q*I(ipu@pco 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%0A*%gAf2K^PPI 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
VoKoIIP-b1U*oyaX@Tj$=PSRm3%P(~&b0qHb>T zq9-GHxd{LT8F|NZgVR1&C*Fyf?6xN~IqGr(*Nr13mt8E!u<_~7%ga;rcesD?JMLnX zXxBycn|W&AnT_-beM8`Df+(rx^?QDE*?uZ*vVQ20Wy>IYN!70yywN^jYL(1x&#@Av zC*&p%?VVYL8-NS(-jDQAaTEWESAV9ZI}pEna%piWpL$n52A`fFfa8&G2G=Ye&@+p2!wI%Q5q`X8Lg zBsVO)d)X3`4jKpwh|w{QExYQvX<3yfGunVui~(z)NqMwe{0)96xsoXs7sK(*l|NQ8 zExtEJZ{vrj|4ikTzoLb!GF6DQN3IoKa?_+5I&YEo6w*Mu(v&Ir9flU)LrG6!7Y13D zl6|UQUTc0yo*|5zK!P=mP*KUD2LY_zG1{) zray$rnGwvZGkY-(}7;S%pY) zz>xU@5X}SvjG^IKU&uA@sNW50E@JR}tM=f?tk)%%UF9wo^jBy$QT?oGuUDY#n{|81 zh`-s-yNz-phY3BTukY5Uc-#=8q$o!4r0OL zY!qQ@u_-Sf4dk-Nt$1(dSyli5f-oSK9IZYcFFqe`hd8{PiI#bn2OU3ITb+xY@Qhm1 zhn;`1aNuo1pz2G@`dxT?p{L0lXGg8=HG4!D%Pfu7fT*UozB zoc^)jhI^coE}g2ZYYq#G9lJb~*pGn_4{ITguv`K9ux+zDPq2o1XvI3zsidM6a0mw# zmaRCQ8~bn<8h%mYakmuo{tKOB5|QBr*1>6fk9V7a-+b4%2q-2akF)q}eWp5}O7_K0 zI`~F zIss5|v<2gkgY*}S8)W(jd(o4;Qcq~ubcB>t>3P+^fIRIV-&+`NG=6-7OB zf#Cp%9ZlqA?afrk0E^LJG5EjDRJiwXEAiNkzh)|Ux^B$JSpzc_nsZ;d<;E?hIUW=p zdHDAjN9}3%N@?n`U`acaE;}DDqIzfjP@9?6?VAXdt2;q3VWZ0Ojq;RUI>n)FNG(_` zU!%8T1HD>~JHb%D&Pbcjb!l%Jub&R^MR)mL;LLqMvX~)-9*br@25J_uz0Zu0CrL68 z{_Skx;xL`+)rnH}(%5~t5I*5je%7@Uv;?mQoY03iwB;&ZZb@BZ>Vae6t?Ey8)z|jZ z(%NUWXsaA_G6gC@_1##ndG;qr>%5P`Qd}fvJ~@<7&(vkvGa8xN z$P!DYFDU{MQ%PQ1K9x#oyQ}{mCTuFAaW13Rndi>RPW8P9bJbKY+aM*%x%E;7Pal$d z4JHnEg0`)nsf&$l?|Ye0vkWaNwY(Ovm;Oh2Zd|(Cq23ng%nM&Wt8{ zBSJr;Kc5k@Fs6MVLrM6OOS)CZeO+<+a_Vugee|bZ>v~*lv623EQ2~Asq}a20Vp{Nz zEH_@OH@ilv#N0Z^>0wpdE!F!F5a2LZ2kOQuQjE(u9z(&Zw+B@(tuE_{H{#p75*J$@ z73X+nT%NVN&@!E~Kbui_lU+yznCvt6qJ3_YlOxv9d`NZsh$6zN@j!vC(sAqztH%vF z;fy#7706VrEjyQDpfZo(pF?p2fhvj8pb5kmu0uMG*uxpslv2gijSXLC78bm*T%k|C zPoJ+z1#^>Zzhqp}>9IXJFW$!)#=)

fyemQwUHB=1J);Xg4m+bs|s9Wz79$%{f-B z*K*VI(STCD9e>QsMIul%x7rYtI1{0v%kXMYD?kd&vg<$8WOhojfA{n)aZow0*U|87 zO8yP@K6HlTEh^YnwXeUi0Ai6`K`z!e&5@- z5&I&5sd(0JGj6YiulmfGs}=&14J;@4d@04Hk5on0mp=!!S`(*g9JxG-)kc=tU-OdO zzIUAFLJy=Vu2Ku61oktaS7>tx+wK36BKFe6KlQkax(ayU<`Ovk zdjz1?5%EqL>2a40T);c0E?{1DM~|LsjFszyXGbMue#JJO*}nwzh61Ro)j+3ll(rvG z8hru&o}TSLn~pwqAv+!&ygsUe)mqcJ@kkY`s_JZWr#4RHtWoT%vv1#UodFWAsNX;O zU>StSNdF7j{%f zI!8Azfk?9hSc6?i9G0a?BeoNi82ywPqb~kwezSca6FgZRn=i$}u@^J+!bfzAn^)yr zp1VCW-Ug(0(X$}NIE`sV!^PK>IU?G3KXK1)49rWXR$MtCXrNqn&@J#(O1iDd9i9b< z>)^+oR(NG{`$fF=JQD=3U8%p>$}V|}rrRD{(=t)&frw8#87K z3f{P6pfH^5rsILl7=yI_&QU~ekmgGww;T3%lGl_0ICm}AZsu5DwtR}a*hW!xNQ%RZ zCa*}@uiR}!6ZD5X8Wa;bSM{#A`77sGEvdFIWTDZ~ze7nT|BZa5$%di)^&YuLLk+*Y zGI_r-RQKiP_?D_D0i=|F!)YY=_a9u@H>jV7QK|Z Result<()> { move |px: usize, py: usize| { let x_component = pixel_base_x * px as f64; let y_component = pixel_base_y * py as f64; - view_window.upper_left + x_component + y_component + + // Without adding this, we would be getting the top-left of the pixel's + // rectangle. We want the center, so add half of the pixel size as + // well. + let center_offset = (pixel_base_x + pixel_base_y) / 2.0; + + view_window.upper_left + x_component + y_component + center_offset } }; diff --git a/assignment-1/writeup.md b/assignment-1/writeup.md new file mode 100644 index 000000000..d11db0b --- /dev/null +++ b/assignment-1/writeup.md @@ -0,0 +1,73 @@ +--- +geometry: margin=2cm +output: pdf_document +--- + +# Raycaster + +Determining the viewing window for the raycaster for this assignment involved +creating a "virtual" screen in world coordinates, mapping image pixels into that +virtual screen, and then casting a ray through each pixel's world coordinate to +see where it would intersect objects. + +### Creating a virtual screen + +The virtual screen is determined first using the eye's position and where it's +looking. This gives us a single 3d vector, but it doesn't give us a 2d screen in +the world. This is where the field of view (FOV) comes in; the FOV determines +how many degrees the screen should take up. + +![Field of view](doc/fov.jpg){width=180px} + +Changing the angle of the field of view would result in a wider or narrower +screen, which when paired with the aspect ratio (width / height), would produce +a bigger or smaller viewing screen, like the orange box in the above diagram +shows. Simply put, FOV affects how _much_ of the frame you're able to see. + +Curiously, distance from the eye actually doesn't really affect the viewing +screen very much. The reason is the screen is only used to determine how to +project rays. As the two black rectangles in the diagram above demonstrates, +changing the distance would still allow the viewer to see the same amount of the +scene. (using the word _amount_ very loosely here to mean percentage of the +landscape, rather than # of pixels, which is determined by the actual image +dimensions) + +The up-direction vector controls the rotation of the scene. Without the +up-direction, it would not be possible to tell which rotation the screen should +be in: + +![Rotation determined by up direction](doc/rot.jpg){width=240px} + +Together, all of these parameters can uniquely determine a virtual screen +location, that we can use to cast rays through and fill pixels. We can change +any of these to produce an image with a more exaggerated view of the scene for +example; simply move the eye position to be incredibly close to the object that +we are observing, and increase the field of view to cover the entire object. + +Because the rays are going in much different directions and travelling different +distances, the corners of the image will seem more stretched than if we were +observing the object from afar and all the rays are in approximately the same +part of the virtual screen. + +One other point to make is that we're currently using a rectangle for our +virtual screen, which automatically does a bit of the distortion. If instead we +were to use a curved lens-like shape, then the rays pointing to any pixel of the +screen would be travelling the same distance. Moving the eye position closer to +the object would still generate distortion, but to a lesser extent. + +### Mapping image pixels + +After the rectangle has been determined, we can simply pick one corner to start +as an anchor, and then find out what pixel values would correspond to it. For +example, in the image below: + +![Mapping image pixels](doc/map.jpg){width=240px} + +I would pick a starting point like $A$, and then take the vector $B-A$ and +subdivide it into 4 pieces, letting $\Delta x = \frac{B-A}{4}$. Then, same thing +for the $y$ direction, I would set $\Delta y = \frac{D-A}{4}$. Taking $A + +x_i \times \Delta x + y_i \times \Delta y$ yields the precise coordinate +location for any pixel. + +(Technically really we would want the middle of the pixel, so just add +$\frac{\Delta x + \Delta y}{2}$ to the point to get that) diff --git a/flake.nix b/flake.nix index 9bbd77b..4ab03ee 100644 --- a/flake.nix +++ b/flake.nix @@ -12,16 +12,22 @@ toolchain = pkgs.fenix.stable; in rec { devShell = pkgs.mkShell { - packages = - (with pkgs; [ cargo-watch cargo-deny cargo-edit zip unzip ]) - ++ (with toolchain; [ - cargo - rustc - clippy + packages = (with pkgs; [ + cargo-watch + cargo-deny + cargo-edit + pandoc + zip + unzip + texlive.combined.scheme-full + ]) ++ (with toolchain; [ + cargo + rustc + clippy - # Get the nightly version of rustfmt so we can wrap comments - pkgs.fenix.default.rustfmt - ]); + # Get the nightly version of rustfmt so we can wrap comments + pkgs.fenix.default.rustfmt + ]); CARGO_UNSTABLE_SPARSE_REGISTRY = "true"; }; });