From 3e757dbc71682972899a48651710c5d8280c3cee Mon Sep 17 00:00:00 2001 From: Kiet Tran Date: Mon, 29 Nov 2021 13:36:54 -0600 Subject: Publish A6 --- dev/a6-harold/sky.cc | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 dev/a6-harold/sky.cc (limited to 'dev/a6-harold/sky.cc') diff --git a/dev/a6-harold/sky.cc b/dev/a6-harold/sky.cc new file mode 100644 index 0000000..0819ebe --- /dev/null +++ b/dev/a6-harold/sky.cc @@ -0,0 +1,74 @@ +/** CSci-4611 Assignment 6: Harold + */ + +#include "sky.h" + + +Sky::Sky() { + +} + + +Sky::~Sky() { + +} + +void Sky::Init(ShaderProgram *stroke3d_shaderprog) { + stroke3d_shaderprog_ = stroke3d_shaderprog; +} + + +/// Projects a 2D normalized screen point (e.g., the mouse position in normalized +/// device coordinates) to a 3D point on the "sky", which is really a huge sphere +/// (radius = 1500) that the viewer is inside. This function should always return +/// true since any screen point can successfully be projected onto the sphere. +/// sky_point is set to the resulting 3D point. Note, this function only checks +/// to see if the ray passing through the screen point intersects the sphere; it +/// does not check to see if the ray hits the ground or anything else first. +bool Sky::ScreenPtHitsSky(const Matrix4 &view_matrix, const Matrix4 &proj_matrix, + const Point2 &normalized_screen_pt, Point3 *sky_point) +{ + // TODO: Stitch together your worksheet implementation of this method + return true; +} + + + + +/// Creates a new sky stroke mesh by projecting each vertex of the 2D mesh +/// onto the sky dome and saving the result as a new 3D mesh. +void Sky::AddSkyStroke(const Matrix4 &view_matrix, const Matrix4 &proj_matrix, + const Mesh &stroke2d_mesh, const Color &stroke_color) +{ + // TODO: Create a new SkyStroke and add it to the strokes_ array. + + + + + + + + + + +} + + +/// Draws all of the sky strokes +void Sky::Draw(const Matrix4 &view_matrix, const Matrix4 &proj_matrix) { + + // Precompute matrices needed in the shader + Matrix4 model_matrix; // identity + Matrix4 modelview_matrix = view_matrix * model_matrix; + + // Draw sky meshes + stroke3d_shaderprog_->UseProgram(); + stroke3d_shaderprog_->SetUniform("modelViewMatrix", modelview_matrix); + stroke3d_shaderprog_->SetUniform("projectionMatrix", proj_matrix); + for (int i=0; iSetUniform("strokeColor", strokes_[i].color); + strokes_[i].mesh.Draw(); + } + stroke3d_shaderprog_->StopProgram(); +} + -- cgit v1.2.3 From be19aab73bc47ff5d1f8dafd40cbc67a33dc63e9 Mon Sep 17 00:00:00 2001 From: Kiet Tran Date: Thu, 9 Dec 2021 15:37:16 -0600 Subject: Clarify how to get eye point in Sky::ScreenPtHitsSky --- dev/a6-harold/sky.cc | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'dev/a6-harold/sky.cc') diff --git a/dev/a6-harold/sky.cc b/dev/a6-harold/sky.cc index 0819ebe..bc08ca0 100644 --- a/dev/a6-harold/sky.cc +++ b/dev/a6-harold/sky.cc @@ -28,6 +28,11 @@ void Sky::Init(ShaderProgram *stroke3d_shaderprog) { bool Sky::ScreenPtHitsSky(const Matrix4 &view_matrix, const Matrix4 &proj_matrix, const Point2 &normalized_screen_pt, Point3 *sky_point) { + // You will need the eye point, this can be + // determined from the view matrix as follows: + Matrix4 camera_matrix = view_matrix.Inverse(); + Point3 eye = camera_matrix.ColumnToPoint3(3); + // TODO: Stitch together your worksheet implementation of this method return true; } -- cgit v1.2.3