diff --git a/demos/optical_bench/src/Optix Files/laser_caster.cu b/demos/optical_bench/src/Optix Files/laser_caster.cu index 6af12b1946d797f588b96b636453f6fed637e086..adb8009d9f819f16aaba0bc0d8b025ecea3975e2 100644 --- a/demos/optical_bench/src/Optix Files/laser_caster.cu +++ b/demos/optical_bench/src/Optix Files/laser_caster.cu @@ -64,7 +64,7 @@ RT_PROGRAM void laser_caster(){ //convert to normal distrubution float r = sqrtf(-2*log(random.x)); float theta = 2*3.141592654f*random.y; - random = clamp(make_float2(r*cosf(theta), r*sinf(theta)), -4.5f, 4.5f) * laserBeamWidth/PERCENTILE; + random = clamp(make_float2(r*cosf(theta), r*sinf(theta)), -4.5f, 4.5f) * laserBeamWidth * 0.5 /PERCENTILE; ray_origin += (launch_index.z != 0) * (laser_right * random.x + laser_up * random.y); PerRayData_radiance_iterative prd; diff --git a/demos/optical_bench/src/Optix Files/lens_parametric.cu b/demos/optical_bench/src/Optix Files/lens_parametric.cu index 54769f3168a1272e958100fefdfe4ef154e7b127..5eed83dce36fdc37222f5ec3fbeee23fcf41fdac 100644 --- a/demos/optical_bench/src/Optix Files/lens_parametric.cu +++ b/demos/optical_bench/src/Optix Files/lens_parametric.cu @@ -57,7 +57,7 @@ RT_PROGRAM void intersect(int primIdx) } else{ h1.t = intersectPlane(center + orientation*(halfCylinderLength), ray, -orientation, lensRadius, scene_epsilon); h1.p = ray.origin + h1.t*ray.direction; - h1.normal = -orientation; + h1.normal = orientation; } perHitData h2; @@ -70,7 +70,7 @@ RT_PROGRAM void intersect(int primIdx) } else{ h2.t = intersectPlane(center - orientation*(halfCylinderLength), ray, orientation, lensRadius, scene_epsilon); h2.p = ray.origin + h2.t*ray.direction; - h2.normal = orientation; + h2.normal = -orientation; } perHitData h3; diff --git a/demos/optical_bench/src/lens.cpp b/demos/optical_bench/src/lens.cpp index b6e0bf858d4871be3fd6109d4524643908efdd86..1a304facd6eae29bc31d5493fc6bfbce8f1c19a2 100644 --- a/demos/optical_bench/src/lens.cpp +++ b/demos/optical_bench/src/lens.cpp @@ -353,17 +353,26 @@ void Lens::SetLensSideTypes(LensSideType type1, LensSideType type2) { type_2_ = type2; geometry_["halfCylinderLength"]->setFloat(GetCylinderLength(thickness) / 2); + + MarkDirty(); } void Lens::RecalculateBoundingBox() { auto o = geometry_["orientation"]->getFloat3(); - float t = geometry_["halfCylinderLength"]->getFloat() * 2; + float hc = geometry_["halfCylinderLength"]->getFloat(); float lr = geometry_["lensRadius"]->getFloat(); - t = GetThickness(t); + float r1 = geometry_["radius"]->getFloat(); + float r2 = geometry_["radius2"]->getFloat(); + + // thickness of the halfspheres + float halfThickness1 = r1 - sqrtf(-lr * lr + r1 * r1); + if (type_1_ == PLANE || type_1_ == CONCAVE) halfThickness1 = 0; + float halfThickness2 = r2 - sqrtf(-lr * lr + r2 * r2); + if (type_2_ == PLANE || type_2_ == CONCAVE) halfThickness2 = 0; - auto bb = - ComputeAABBFromCylinder(glm::vec3(o.x, o.y, o.z), t / 2.0f, t / 2.0f, lr); + auto bb = ComputeAABBFromCylinder( + glm::vec3(o.x, o.y, o.z), hc + halfThickness1, hc + halfThickness2, lr); selector_->SetCollider(bb[0], bb[1]); selector_->ExternalUpdate(); }