From 427cc0cc2b053cabbc7ec19e52effa09550c5d2e Mon Sep 17 00:00:00 2001 From: Erik Broberg Date: Tue, 21 Jun 2016 17:21:00 -0400 Subject: [PATCH] Reduce local chunk rendering code by use of loops --- modules/globebrowsing/chunk/chunkrenderer.cpp | 36 +++++++------------ 1 file changed, 12 insertions(+), 24 deletions(-) diff --git a/modules/globebrowsing/chunk/chunkrenderer.cpp b/modules/globebrowsing/chunk/chunkrenderer.cpp index 9342459906..a85f45d45b 100644 --- a/modules/globebrowsing/chunk/chunkrenderer.cpp +++ b/modules/globebrowsing/chunk/chunkrenderer.cpp @@ -394,32 +394,20 @@ namespace openspace { dmat4 viewTransform = data.camera.combinedViewMatrix(); dmat4 modelViewTransform = viewTransform * modelTransform; - Geodetic2 sw = chunk.surfacePatch().getCorner(Quad::SOUTH_WEST); - Geodetic2 se = chunk.surfacePatch().getCorner(Quad::SOUTH_EAST); - Geodetic2 nw = chunk.surfacePatch().getCorner(Quad::NORTH_WEST); - Geodetic2 ne = chunk.surfacePatch().getCorner(Quad::NORTH_EAST); - - // Get model space positions of the four control points - Vec3 patchSwModelSpace = ellipsoid.cartesianSurfacePosition(sw); - Vec3 patchSeModelSpace = ellipsoid.cartesianSurfacePosition(se); - Vec3 patchNwModelSpace = ellipsoid.cartesianSurfacePosition(nw); - Vec3 patchNeModelSpace = ellipsoid.cartesianSurfacePosition(ne); - - // Transform all control points to camera space - Vec3 patchSwCameraSpace = Vec3(dmat4(modelViewTransform) * glm::dvec4(patchSwModelSpace, 1)); - Vec3 patchSeCameraSpace = Vec3(dmat4(modelViewTransform) * glm::dvec4(patchSeModelSpace, 1)); - Vec3 patchNwCameraSpace = Vec3(dmat4(modelViewTransform) * glm::dvec4(patchNwModelSpace, 1)); - Vec3 patchNeCameraSpace = Vec3(dmat4(modelViewTransform) * glm::dvec4(patchNeModelSpace, 1)); - - // Send control points to shader - programObject->setUniform("p00", vec3(patchSwCameraSpace)); - programObject->setUniform("p10", vec3(patchSeCameraSpace)); - programObject->setUniform("p01", vec3(patchNwCameraSpace)); - programObject->setUniform("p11", vec3(patchNeCameraSpace)); + std::vector cornerNames = { "p01", "p11", "p00", "p10" }; + std::vector cornersCameraSpace(4); + for (int i = 0; i < 4; ++i) { + Quad q = (Quad)i; + Geodetic2 corner = chunk.surfacePatch().getCorner(q); + Vec3 cornerModelSpace = ellipsoid.cartesianSurfacePosition(corner); + Vec3 cornerCameraSpace = Vec3(dmat4(modelViewTransform) * glm::dvec4(cornerModelSpace, 1)); + cornersCameraSpace[i] = cornerCameraSpace; + programObject->setUniform(cornerNames[i], vec3(cornerCameraSpace)); + } vec3 patchNormalCameraSpace = normalize( - cross(patchSeCameraSpace - patchSwCameraSpace, - patchNwCameraSpace - patchSwCameraSpace)); + cross(cornersCameraSpace[Quad::SOUTH_EAST] - cornersCameraSpace[Quad::SOUTH_WEST], + cornersCameraSpace[Quad::NORTH_EAST] - cornersCameraSpace[Quad::SOUTH_WEST])); programObject->setUniform("patchNormalCameraSpace", patchNormalCameraSpace); programObject->setUniform("projectionTransform", data.camera.projectionMatrix());