Select Git revision
combustion_demo.cpp
lens.cpp 14.10 KiB
//------------------------------------------------------------------------------
// Project Phoenix
//
// Copyright (c) 2017-2018 RWTH Aachen University, Germany,
// Virtual Reality & Immersive Visualization Group.
//------------------------------------------------------------------------------
// License
//
// Licensed under the 3-Clause BSD License (the "License");
// you may not use this file except in compliance with the License.
// See the file LICENSE for the full text.
// You may obtain a copy of the License at
//
// https://opensource.org/licenses/BSD-3-Clause
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//------------------------------------------------------------------------------
#include "lens.hpp"
#include <optix.h>
#include "object_manager.hpp"
#include "optix_context_manager.hpp"
#include "phx/rendering/components/transform.hpp"
#include "selection_mark_handler.hpp"
#include "selector.hpp"
#include "phx/rendering/components/material_handle.hpp"
#include "phx/resources/resource_pointer.hpp"
#include "phx/resources/resource_utils.hpp"
#include "phx/resources/types/material.hpp"
#include "phx/resources/types/model.hpp"
#include "phx/suppress_warnings.hpp"
SUPPRESS_WARNINGS_BEGIN
#include "glm/glm.hpp"
#include "glm/gtx/rotate_vector.hpp"
#include "glm/gtx/string_cast.hpp"
SUPPRESS_WARNINGS_END
Lens::Lens(phx::Engine* engine, phx::Scene* scene, OptixContextManager* manager,
LensSideType type1, LensSideType type2, optix::float3 frontCenter,
float lensradius, float thickness, float radius, float radius2) {
manager_ = manager;
scene_ = scene;
CreateGlassMaterialInstance();
geometry_ = manager->GetContext()->createGeometryInstance(
manager->GetLensGeometry(), &glass_material_, &glass_material_ + 1);
geometry_["center"]->setFloat(0, 0, 0);
geometry_["radius"]->setFloat(radius);
geometry_["radius2"]->setFloat(radius2);
geometry_["orientation"]->setFloat(optix::make_float3(0.f, 0.f, -1.f));
geometry_["lensRadius"]->setFloat(lensradius);
geometry_["side1Type"]->setInt(type1);
geometry_["side2Type"]->setInt(type2);
type_1_ = type1;
type_2_ = type2;
float cylinderLength = GetCylinderLength(thickness);
geometry_["halfCylinderLength"]->setFloat(cylinderLength / 2);
transform_ = manager->GetContext()->createTransform();
transform_->setMatrix(false, &glm::mat4()[0][0], &glm::mat4()[0][0]);