aboutsummaryrefslogtreecommitdiffstats
path: root/dev/a6-harold/sky.cc
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--dev/a6-harold/sky.cc28
1 files changed, 16 insertions, 12 deletions
diff --git a/dev/a6-harold/sky.cc b/dev/a6-harold/sky.cc
index bc08ca0..8b04a69 100644
--- a/dev/a6-harold/sky.cc
+++ b/dev/a6-harold/sky.cc
@@ -34,12 +34,12 @@ bool Sky::ScreenPtHitsSky(const Matrix4 &view_matrix, const Matrix4 &proj_matrix
Point3 eye = camera_matrix.ColumnToPoint3(3);
// TODO: Stitch together your worksheet implementation of this method
- return true;
+ Point3 mouseIn3d = GfxMath::ScreenToNearPlane(view_matrix, proj_matrix, normalized_screen_pt);
+ Ray eyeThroughMouse = Ray(eye, (mouseIn3d - eye).ToUnit());
+ float t;
+ return eyeThroughMouse.IntersectSphere(Point3::Origin(), 1500, &t, sky_point);
}
-
-
-
/// 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,
@@ -47,15 +47,19 @@ void Sky::AddSkyStroke(const Matrix4 &view_matrix, const Matrix4 &proj_matrix,
{
// TODO: Create a new SkyStroke and add it to the strokes_ array.
+ Mesh sky = stroke2d_mesh;
+ std::vector<Point3> sky_points;
+ for (int i = 0; i < sky.num_vertices(); i++) {
+ Point3 sky_point;
+ ScreenPtHitsSky(view_matrix, proj_matrix, Point2(sky.read_vertex_data(i)[0], sky.read_vertex_data(i)[1]), &sky_point);
+ sky_points.push_back(sky_point);
+ }
+ sky.SetVertices(sky_points);
-
-
-
-
-
-
-
-
+ SkyStroke sky_stroke;
+ sky_stroke.mesh = sky;
+ sky_stroke.color = stroke_color;
+ strokes_.push_back(sky_stroke);
}