Skip to content

Instantly share code, notes, and snippets.

@tcsavage
Created April 17, 2013 14:45
Show Gist options
  • Save tcsavage/5404883 to your computer and use it in GitHub Desktop.
Save tcsavage/5404883 to your computer and use it in GitHub Desktop.
\begin{landscape}
\begin{longtable}{|l|p{120pt}|p{120pt}|p{120pt}|p{120pt}|}
\caption{Functional Requirements} \\
\hline
\textbf{ID} & \textbf{What} & \textbf{How} & \textbf{Test} & \textbf{Expected Result} \\ \hline
\endfirsthead
\multicolumn{4}{c}%
{\tablename\ \thetable\ -- \textit{Continued from previous page}} \\
\hline
\textbf{ID} & \textbf{What} & \textbf{How} & \textbf{Test} & \textbf{Expected Result} \\ \hline
\endhead
\multicolumn{4}{r}{\textit{Continued on next page}} \\
\endfoot
\endlastfoot
1 & \multicolumn{4}{|l|}{World (input) and processing} \\ \hline
1.1 & \multicolumn{4}{|l|}{Objects} \\ \hline
1.1.1 & \multicolumn{4}{|l|}{Shapes} \\ \hline
1.1.1.1 & Sphere shape supported & Ray-sphere intersection function & Test render with a sphere & \\ \hline
1.1.1.2 & Infinite plane shape supported & Ray-plane intersection function & Test render with infinite plane & \\ \hline
1.1.1.3 & Triangle shape supported & Ray-plane intersection with triangle bounds checking & Test render with triangle & \\ \hline
1.1.1.4 & Polygon mesh supported & Triangle-ray intersection mapped over list of triangles & Test render with simple output from Blender & \\ \hline
1.1.1.5 & Polygon meshes poses local coordinate system translation & Map vector translation over each vertex & Repeat test render with two different origins & Shape moved to new position without changing general appearance \\ \hline
1.1.2 & \multicolumn{4}{|l|}{Materials} \\ \hline
1.1.2.1.1 & Diffuse materials can have flat colour & Simple value assignment & & \\ \hline
1.1.2.1.2 & Diffuse materials can be textured & Calculate UV coordinates from intersection point and sample texel & & \\ \hline
1.1.2.1.3 & Diffuse materials are shaded and receive shadows & Shadow ray occlusion testing for each emissive material & & \\ \hline
1.1.2.1.4 & Diffuse materials receive indirect illumination from light bouncing off other surfaces & Additional diffuse reflection sample factored into surface colour & & \\ \hline
1.1.2.2 & Reflective materials & Re-sample with new ray with intersection as new origin and reflected normal as new direction & & \\ \hline
1.1.2.3 & Transmissive materials & Calculate refraction amount and re-sample with new ray & & \\ \hline
1.1.2.4 & Emissive materials illuminate scene & A shadow ray is created from each diffuse sample for every emissive surface & A test scene with at least one diffuse surface visible to the camera and zero emissive surfaces & Black image - no illumination \\ \hline
1.2.1 & Camera has position & & & \\ \hline
1.2.2 & Camera has a focal “look-at” point & & & \\ \hline
1.2.3 & Camera has up vector & & & \\ \hline
1.2.4 & Camera has adjustable field of view & Size of image plane is scaled up and down & Render same scene twice only changing FOV & One image is zoomed in on the center \\ \hline
2.1.1 & Output width and height (in pixels) is specified by user & Number of elements in image plane directly tied to width/height input & & \\ \hline
2.1.2 & Different aspect ratios supported correctly & Aspect ratio passed onto image plane correctly & Test with common resolutions at 1:1, 3:2, 4:3, 16:10, 16:9 in both portrait and landscape orientations & Image shows no signs of stretching (particularly at center of frame) \\ \hline
\multicolumn{1}{|r|}{2.2} & Output is saved to location specified by user & Option read from input, passed to image saving function & Render image to file & Output is saved to correct directory with specified file name \\ \hline
\multicolumn{1}{|r|}{2.3} & Number of samples per pixel is specified by user & Input passed to random sample distribution generator function & Render with one sample and again with 10 samples. Compare & Output image is of better quality when rendered with higher samples \\ \hline
\multicolumn{1}{|r|}{3.1} & Renderer is purely functional & No uncontrolled side effects inside renderer function & Render multiple times with exactly the same input and options & All output images are identical \\ \hline
\multicolumn{1}{|r|}{3.2} & Properties of 2D and 3D vectors and operations hold & & Run quickcheck properties & All tests pass \\ \hline
\multicolumn{1}{|r|}{3.3} & Any type class instance respects the laws of the typeclass & & Run quickcheck properties or prove by equational reasoning & All tests pass \\ \hline
\end{longtable}
\end{landscape}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment