diff options
Diffstat (limited to 'Source/Editors/sky_editor.cpp')
-rw-r--r-- | Source/Editors/sky_editor.cpp | 337 |
1 files changed, 166 insertions, 171 deletions
diff --git a/Source/Editors/sky_editor.cpp b/Source/Editors/sky_editor.cpp index 5e0b194e..1d118d49 100644 --- a/Source/Editors/sky_editor.cpp +++ b/Source/Editors/sky_editor.cpp @@ -50,35 +50,34 @@ #include <cmath> -static const float _initial_sun_angular_rad = PI_f/30.0f; // must not be zero -static const float _sun_brightness_constant = 1.0f/((float)pow(tanf(_initial_sun_angular_rad),2.0f)); -static const float _min_sun_angular_rad = PI_f/100.0f; -static const float _max_sun_angular_rad = PI_f/10.0f; -static const float _color_orb_scale = tanf(_initial_sun_angular_rad)*0.1f; +static const float _initial_sun_angular_rad = PI_f / 30.0f; // must not be zero +static const float _sun_brightness_constant = 1.0f / ((float)pow(tanf(_initial_sun_angular_rad), 2.0f)); +static const float _min_sun_angular_rad = PI_f / 100.0f; +static const float _max_sun_angular_rad = PI_f / 10.0f; +static const float _color_orb_scale = tanf(_initial_sun_angular_rad) * 0.1f; static const float _min_sun_brightness = tanf(_min_sun_angular_rad) * tanf(_min_sun_angular_rad) * _sun_brightness_constant; static const float _max_sun_brightness = tanf(_max_sun_angular_rad) * tanf(_max_sun_angular_rad) * _sun_brightness_constant; -SkyEditor::SkyEditor(SceneGraph* s) : sun_dir_(1.0f, 0.0f, 0.0f), - translation_offset_(0.0f, 0.0f, 0.0f, 0.0f), +SkyEditor::SkyEditor(SceneGraph* s) : sun_dir_(1.0f, 0.0f, 0.0f), + translation_offset_(0.0f, 0.0f, 0.0f, 0.0f), rotation_zero_(1.0f, 0.0f, 0.0f), - scenegraph_(s) -{ + scenegraph_(s) { m_sun_selected = false; - + m_tool = EditorTypes::NO_TOOL; - + m_sun_angular_rad = _initial_sun_angular_rad; CalcBrightnessFromAngularRad(); - + m_sun_color_angle = 0.0f; - + m_sun_translating = false; m_sun_scaling = false; m_sun_rotating = false; - + m_lighting_changed = false; - + m_gl_state.depth_test = false; m_gl_state.cull_face = false; m_gl_state.blend = true; @@ -89,61 +88,61 @@ void SkyEditor::Draw() { if (m_sun_selected) { Camera* cam = ActiveCameras::Get(); Graphics* graphics = Graphics::Instance(); - Shaders* shaders = Shaders::Instance(); + Shaders* shaders = Shaders::Instance(); // align with sun ray - vec3 origin_dir(0,0,1); + vec3 origin_dir(0, 0, 1); float angle = GetAngleBetween(sun_dir_, origin_dir); vec3 around = cross(origin_dir, sun_dir_); quaternion quat_a(vec4(normalize(around), angle * PI_f / 180.0f)); - + // align with rotation around z so up y is maintained as (0,1,0) vec3 curr_up(cam->GetUpVector()); - curr_up = normalize(invert(quat_a)*curr_up); + curr_up = normalize(invert(quat_a) * curr_up); vec3 sun_up_vector(0.0f, 1.0f, 0.0f); - curr_up[2] = sun_up_vector[2]; // forces rotation around z only (any rotation not around z would violate this equality + curr_up[2] = sun_up_vector[2]; // forces rotation around z only (any rotation not around z would violate this equality angle = GetAngleBetween(sun_up_vector, curr_up); around = cross(curr_up, sun_up_vector); quaternion quat_b(vec4(normalize(around), -angle * PI_f / 180.0f)); m_viewing_transform = Mat4FromQuaternion(quat_a * quat_b); - + vec3 camera_pos(cam->GetPos()); m_viewing_transform.AddTranslation(camera_pos); - + graphics->setGLState(m_gl_state); graphics->setDepthFunc(GL_LEQUAL); mat4 mvp = cam->GetProjMatrix() * cam->GetViewMatrix() * m_viewing_transform; - - vec3 rgb; + + vec3 rgb; float scale = tanf(m_sun_angular_rad); - + mat4 circle_scale; - circle_scale.SetScale(vec3(scale, scale, 1.0f)); + circle_scale.SetScale(vec3(scale, scale, 1.0f)); mat4 circle_mvp = mvp * circle_scale; // Draw circle int shader_id = shaders->returnProgram("3d_color #COLOR_ATTRIB #NO_VELOCITY_BUF"); shaders->setProgram(shader_id); shaders->SetUniformMat4("mvp", circle_mvp); - GLfloat data[37*7]; + GLfloat data[37 * 7]; int index = 0; - for(int i=0; i <= 36; i++) { - float angle = (float)i*(float)PI/18.0f; + for (int i = 0; i <= 36; i++) { + float angle = (float)i * (float)PI / 18.0f; if (m_sun_rotating) { - rgb = CalcColorFromAngle((float)rad2deg*angle); - data[index+0] = rgb[0]; - data[index+1] = rgb[1]; - data[index+2] = rgb[2]; - data[index+3] = 1.0f; + rgb = CalcColorFromAngle((float)rad2deg * angle); + data[index + 0] = rgb[0]; + data[index + 1] = rgb[1]; + data[index + 2] = rgb[2]; + data[index + 3] = 1.0f; } else { - data[index+0] = 0.4f; - data[index+1] = 0.4f; - data[index+2] = 0.4f; - data[index+3] = 0.3f; + data[index + 0] = 0.4f; + data[index + 1] = 0.4f; + data[index + 2] = 0.4f; + data[index + 3] = 0.3f; } - data[index+4] = cosf(angle); - data[index+5] = sinf(angle); - data[index+6] = 1.0f; + data[index + 4] = cosf(angle); + data[index + 5] = sinf(angle); + data[index + 6] = 1.0f; index += 7; } static VBOContainer data_vbo; @@ -153,8 +152,8 @@ void SkyEditor::Draw() { int color_attrib_id = shaders->returnShaderAttrib("color_attrib", shader_id); graphics->EnableVertexAttribArray(vert_attrib_id); graphics->EnableVertexAttribArray(color_attrib_id); - glVertexAttribPointer(vert_attrib_id, 3, GL_FLOAT, false, 7*sizeof(GLfloat), (const void*)(sizeof(GLfloat) * 4)); - glVertexAttribPointer(color_attrib_id, 4, GL_FLOAT, false, 7*sizeof(GLfloat), 0); + glVertexAttribPointer(vert_attrib_id, 3, GL_FLOAT, false, 7 * sizeof(GLfloat), (const void*)(sizeof(GLfloat) * 4)); + glVertexAttribPointer(color_attrib_id, 4, GL_FLOAT, false, 7 * sizeof(GLfloat), 0); glDrawArrays(GL_LINE_STRIP, 0, 37); graphics->ResetVertexAttribArrays(); @@ -163,8 +162,8 @@ void SkyEditor::Draw() { shader_id = shaders->returnProgram("3d_color #COLOR_UNIFORM #NO_VELOCITY_BUF"); shaders->setProgram(shader_id); mat4 translate_mat; - translate_mat.SetTranslation(vec3(cosf((float)deg2rad*m_sun_color_angle)*scale, sinf((float)deg2rad*m_sun_color_angle)*scale, 0.0f)); - mat4 handle_mvp = mvp * translate_mat; + translate_mat.SetTranslation(vec3(cosf((float)deg2rad * m_sun_color_angle) * scale, sinf((float)deg2rad * m_sun_color_angle) * scale, 0.0f)); + mat4 handle_mvp = mvp * translate_mat; shaders->SetUniformMat4("mvp", handle_mvp); rgb = CalcColorFromAngle(m_sun_color_angle); shaders->SetUniformVec4("color_uniform", vec4(rgb, 1.0f)); @@ -174,17 +173,17 @@ void SkyEditor::Draw() { data[1] = 0.0f; data[2] = 1.0f; int index = 3; - for (float angle=(float)PI*2; angle >= 0; angle-=(float)PI/4.0f) { - data[index+0] = cosf(angle)*_color_orb_scale; - data[index+1] = sinf(angle)*_color_orb_scale; - data[index+2] = 1.0f; + for (float angle = (float)PI * 2; angle >= 0; angle -= (float)PI / 4.0f) { + data[index + 0] = cosf(angle) * _color_orb_scale; + data[index + 1] = sinf(angle) * _color_orb_scale; + data[index + 2] = 1.0f; index += 3; } data_vbo.Fill(kVBODynamic | kVBOFloat, sizeof(data), data); data_vbo.Bind(); int vert_attrib_id = shaders->returnShaderAttrib("vert_attrib", shader_id); graphics->EnableVertexAttribArray(vert_attrib_id); - glVertexAttribPointer(vert_attrib_id, 3, GL_FLOAT, false, 3*sizeof(GLfloat), 0); + glVertexAttribPointer(vert_attrib_id, 3, GL_FLOAT, false, 3 * sizeof(GLfloat), 0); glDrawArrays(GL_TRIANGLE_FAN, 0, 10); shaders->SetUniformVec4("color_uniform", vec4(vec3(0.4f), 0.3f)); glDrawArrays(GL_LINE_STRIP, 1, 9); @@ -193,8 +192,8 @@ void SkyEditor::Draw() { } } -void SkyEditor::UpdateCursor(GameCursor* cursor) { - switch(m_tool) { +void SkyEditor::UpdateCursor(GameCursor* cursor) { + switch (m_tool) { case EditorTypes::TRANSLATE: cursor->SetCursor(TRANSLATE_CURSOR); break; @@ -213,43 +212,43 @@ void SkyEditor::UpdateCursor(GameCursor* cursor) { bool SkyEditor::MouseOverColorOrb(const LineSegment& mouseray) { float scale = tanf(m_sun_angular_rad); vec3 mouseray_dir = normalize(mouseray.end - mouseray.start); - - vec3 p = m_viewing_transform*vec3(cosf((float)deg2rad*m_sun_color_angle)*scale, sinf((float)deg2rad*m_sun_color_angle)*scale, 1.0f); + + vec3 p = m_viewing_transform * vec3(cosf((float)deg2rad * m_sun_color_angle) * scale, sinf((float)deg2rad * m_sun_color_angle) * scale, 1.0f); vec3 n = -sun_dir_; float r = _color_orb_scale; - + float to_dist = RayPlaneIntersection(mouseray.start, mouseray_dir, p, n); if (to_dist < 0) return false; vec3 hit_point = mouseray.start + to_dist * mouseray_dir; - - if (length(hit_point - p) < r) return true; - else return false; + + if (length(hit_point - p) < r) + return true; + else + return false; } EditorTypes::Tool SkyEditor::OmniGetTool(float angle_from_sun, - const LineSegment& mouseray) -{ + const LineSegment& mouseray) { if (!m_sun_selected) { - return EditorTypes::NO_TOOL; - } else if (MouseOverColorOrb(mouseray)) { - return EditorTypes::ROTATE; - } else if (angle_from_sun <= m_sun_angular_rad*0.8f) { - return EditorTypes::TRANSLATE; - } else if (angle_from_sun <= m_sun_angular_rad*1.4f) { - return EditorTypes::SCALE; - } else { - return EditorTypes::NO_TOOL; - } + return EditorTypes::NO_TOOL; + } else if (MouseOverColorOrb(mouseray)) { + return EditorTypes::ROTATE; + } else if (angle_from_sun <= m_sun_angular_rad * 0.8f) { + return EditorTypes::TRANSLATE; + } else if (angle_from_sun <= m_sun_angular_rad * 1.4f) { + return EditorTypes::SCALE; + } else { + return EditorTypes::NO_TOOL; + } } bool SkyEditor::HandleSelect(float angle_from_sun) { - Mouse* mouse = &(Input::Instance()->getMouse()); + Mouse* mouse = &(Input::Instance()->getMouse()); if (mouse->mouse_double_click_[Mouse::LEFT]) { - if (angle_from_sun < PI/50) { + if (angle_from_sun < PI / 50) { m_sun_selected = true; return true; - } - else { + } else { m_sun_selected = false; return true; } @@ -263,25 +262,23 @@ extern bool shadow_cache_dirty_sun_moved; void SkyEditor::HandleSunTranslate(float angle_from_sun) { Mouse* mouse = &(Input::Instance()->getMouse()); - if (!m_sun_translating// && angle_from_sun <= m_sun_angular_rad - && mouse->mouse_down_[Mouse::LEFT] == Mouse::CLICKED && m_sun_selected) { // start + if (!m_sun_translating // && angle_from_sun <= m_sun_angular_rad + && mouse->mouse_down_[Mouse::LEFT] == Mouse::CLICKED && m_sun_selected) { // start HandleTransformationStarted(); m_sun_translating = true; - - vec4 sun_center = m_viewing_transform*vec4(0.0f, 0.0f, 1.0f, 1.0f); + + vec4 sun_center = m_viewing_transform * vec4(0.0f, 0.0f, 1.0f, 1.0f); vec3 ray_through_sun_center = normalize(sun_center.xyz() - ActiveCameras::Get()->GetPos()); - + translation_offset_ = vec4(ray_through_sun_center - ActiveCameras::Get()->GetMouseRay(), 0.0f); - translation_offset_ = invert(m_viewing_transform)*translation_offset_; - } - else if (m_sun_translating) { - if (mouse->mouse_down_[Mouse::LEFT]) { // continue - PlaceSun(ActiveCameras::Get()->GetMouseRay() + (m_viewing_transform*translation_offset_).xyz()); - } - else { // stop - PlaceSun(ActiveCameras::Get()->GetMouseRay() + (m_viewing_transform*translation_offset_).xyz()); + translation_offset_ = invert(m_viewing_transform) * translation_offset_; + } else if (m_sun_translating) { + if (mouse->mouse_down_[Mouse::LEFT]) { // continue + PlaceSun(ActiveCameras::Get()->GetMouseRay() + (m_viewing_transform * translation_offset_).xyz()); + } else { // stop + PlaceSun(ActiveCameras::Get()->GetMouseRay() + (m_viewing_transform * translation_offset_).xyz()); m_sun_translating = false; - + HandleTransformationStopped(); } } @@ -291,39 +288,36 @@ void SkyEditor::HandleSunTranslate(float angle_from_sun) { } void SkyEditor::HandleSunScale(float angle_from_sun) { - Mouse* mouse = &(Input::Instance()->getMouse()); - if (!m_sun_scaling// && angle_from_sun > m_sun_angular_rad && angle_from_sun < m_sun_angular_rad*1.2f - && mouse->mouse_down_[Mouse::LEFT] == Mouse::CLICKED && m_sun_selected) { // start + if (!m_sun_scaling // && angle_from_sun > m_sun_angular_rad && angle_from_sun < m_sun_angular_rad*1.2f + && mouse->mouse_down_[Mouse::LEFT] == Mouse::CLICKED && m_sun_selected) { // start HandleTransformationStarted(); m_sun_scaling = true; scale_angle_zero_ = angle_from_sun; - + if (ActiveCameras::Get()->m_camera_object != NULL) { ActiveCameras::Get()->m_camera_object->IgnoreMouseInput(true); } - } - else if (m_sun_scaling) { - if (mouse->mouse_down_[Mouse::LEFT]) { // continue + } else if (m_sun_scaling) { + if (mouse->mouse_down_[Mouse::LEFT]) { // continue if (scale_angle_zero_ != 0) { float factor = angle_from_sun / scale_angle_zero_; ScaleSun(factor); scale_angle_zero_ = angle_from_sun; } - } - else { // stop + } else { // stop if (scale_angle_zero_ != 0) { float factor = angle_from_sun / scale_angle_zero_; ScaleSun(factor); scale_angle_zero_ = angle_from_sun; } m_sun_scaling = false; - + if (ActiveCameras::Get()->m_camera_object != NULL) { ActiveCameras::Get()->m_camera_object->IgnoreMouseInput(false); } - + HandleTransformationStopped(); } } @@ -332,53 +326,52 @@ void SkyEditor::HandleSunScale(float angle_from_sun) { static float GetSignedAngleBetween(const vec3& n, const vec3& v1, const vec3& v2) { const vec3 a = normalize(v1); const vec3 b = normalize(v2); - float d = dot(a,b); + float d = dot(a, b); d = clamp(d, -1.0f, 1.0f); - if (d != 0.0f ) { - vec4 c = cross(a,b); - return rad2degf*atan2f(dot(normalize(n),c), d); + if (d != 0.0f) { + vec4 c = cross(a, b); + return rad2degf * atan2f(dot(normalize(n), c), d); } else { return 0.0f; } } - void SkyEditor::HandleSunRotate(float angle_from_sun, const vec3& mouseray, GameCursor* cursor) { Mouse* mouse = &(Input::Instance()->getMouse()); - if (!m_sun_rotating// && angle_from_sun > m_sun_angular_rad && angle_from_sun < m_sun_angular_rad*1.2f - && mouse->mouse_down_[Mouse::LEFT] == Mouse::CLICKED && m_sun_selected) { // start + if (!m_sun_rotating // && angle_from_sun > m_sun_angular_rad && angle_from_sun < m_sun_angular_rad*1.2f + && mouse->mouse_down_[Mouse::LEFT] == Mouse::CLICKED && m_sun_selected) { // start HandleTransformationStarted(); m_sun_rotating = true; - + vec3 dir = normalize(mouseray - sun_dir_); cursor->SetCursor(ROTATE_CIRCLE_CURSOR); - cursor->SetRotation(90-m_sun_color_angle); + cursor->SetRotation(90 - m_sun_color_angle); rotation_zero_ = dir; - + if (ActiveCameras::Get()->m_camera_object != NULL) { ActiveCameras::Get()->m_camera_object->IgnoreMouseInput(true); } } else if (m_sun_rotating) { - if (mouse->mouse_down_[Mouse::LEFT]) { // continue + if (mouse->mouse_down_[Mouse::LEFT]) { // continue vec3 dir = normalize(mouseray - sun_dir_); float angle = -GetSignedAngleBetween(sun_dir_, dir, rotation_zero_); RotateSun(angle); - cursor->SetRotation(90-m_sun_color_angle); + cursor->SetRotation(90 - m_sun_color_angle); rotation_zero_ = dir; - } else { // stop + } else { // stop vec3 dir = normalize(mouseray - sun_dir_); float angle = -GetSignedAngleBetween(sun_dir_, dir, rotation_zero_); RotateSun(angle); cursor->SetRotation(0); cursor->SetCursor(ROTATE_CIRCLE_CURSOR); rotation_zero_ = dir; - + m_sun_rotating = false; - + if (ActiveCameras::Get()->m_camera_object != NULL) { ActiveCameras::Get()->m_camera_object->IgnoreMouseInput(false); } - + HandleTransformationStopped(); } } @@ -395,29 +388,29 @@ void SkyEditor::HandleTransformationStopped() { } void SkyEditor::SaveSky(TiXmlNode* root) { - TiXmlElement * sky = new TiXmlElement("Sky"); + TiXmlElement* sky = new TiXmlElement("Sky"); root->LinkEndChild(sky); TiXmlElement* sky_el; sky_el = new TiXmlElement("DomeTexture"); - sky_el->LinkEndChild( new TiXmlText(scenegraph_->sky->dome_texture_name.c_str()) ); + sky_el->LinkEndChild(new TiXmlText(scenegraph_->sky->dome_texture_name.c_str())); sky->LinkEndChild(sky_el); - + std::stringstream num1; std::string num_string; - + num1 << m_sun_angular_rad; sky_el = new TiXmlElement("SunAngularRad"); num_string = num1.str(); - sky_el->LinkEndChild( new TiXmlText(num_string.c_str()) ); + sky_el->LinkEndChild(new TiXmlText(num_string.c_str())); sky->LinkEndChild(sky_el); - + std::stringstream num2; num2 << ConvertToFirstCycle(m_sun_color_angle, 360.0f); sky_el = new TiXmlElement("SunColorAngle"); num_string = num2.str(); - sky_el->LinkEndChild( new TiXmlText(num_string.c_str()) ); + sky_el->LinkEndChild(new TiXmlText(num_string.c_str())); sky->LinkEndChild(sky_el); - + sky_el = new TiXmlElement("RayToSun"); sky_el->SetDoubleAttribute("r0", sun_dir_[0]); sky_el->SetDoubleAttribute("r1", sun_dir_[1]); @@ -425,18 +418,17 @@ void SkyEditor::SaveSky(TiXmlNode* root) { sky->LinkEndChild(sky_el); } - // Transforms void SkyEditor::PlaceSun(const vec3& dir) { - sun_dir_ = normalize(dir); + sun_dir_ = normalize(dir); scenegraph_->primary_light.pos = sun_dir_; flare->position = sun_dir_; m_lighting_changed = true; } void SkyEditor::TranslateSun(const vec3& trans) { - sun_dir_ = normalize(sun_dir_ + trans); + sun_dir_ = normalize(sun_dir_ + trans); scenegraph_->primary_light.pos = sun_dir_; flare->position = sun_dir_; m_lighting_changed = true; @@ -444,67 +436,67 @@ void SkyEditor::TranslateSun(const vec3& trans) { void SkyEditor::ScaleSun(float factor) { float new_angular_rad = m_sun_angular_rad * factor; - new_angular_rad = clamp(new_angular_rad, - _min_sun_angular_rad, + new_angular_rad = clamp(new_angular_rad, + _min_sun_angular_rad, _max_sun_angular_rad); - m_sun_angular_rad = new_angular_rad; + m_sun_angular_rad = new_angular_rad; // scale brightness to be proportional to sun's surface area - CalcBrightnessFromAngularRad(); + CalcBrightnessFromAngularRad(); flare->diffuse = m_sun_brightness; scenegraph_->primary_light.intensity = 1.0f; - if(m_sun_brightness>_no_glare_threshold){ - float range = _max_sun_brightness-_no_glare_threshold; - float intensity = max(0.0f,1.0f-(m_sun_brightness-_no_glare_threshold)/range); + if (m_sun_brightness > _no_glare_threshold) { + float range = _max_sun_brightness - _no_glare_threshold; + float intensity = max(0.0f, 1.0f - (m_sun_brightness - _no_glare_threshold) / range); scenegraph_->primary_light.intensity = intensity; } - if(m_sun_brightness<_sharp_glare_threshold){ - float range = _sharp_glare_threshold-_min_sun_brightness; - float intensity = max(0.0f,1.0f+(_sharp_glare_threshold-m_sun_brightness)*2.0f/range); + if (m_sun_brightness < _sharp_glare_threshold) { + float range = _sharp_glare_threshold - _min_sun_brightness; + float intensity = max(0.0f, 1.0f + (_sharp_glare_threshold - m_sun_brightness) * 2.0f / range); scenegraph_->primary_light.intensity = intensity; } - //printf("brightness = %g\n", m_sun_brightness); + // printf("brightness = %g\n", m_sun_brightness); } void SkyEditor::RotateSun(float angle) { - //RotateHueHSV(m_sun_color_angle, angle); - //vec4 rgb = HSVtoRGB(m_sun_color_angle,0.25f,1.0f); + // RotateHueHSV(m_sun_color_angle, angle); + // vec4 rgb = HSVtoRGB(m_sun_color_angle,0.25f,1.0f); m_sun_color_angle += angle; - vec3 rgb = CalcColorFromAngle(m_sun_color_angle); + vec3 rgb = CalcColorFromAngle(m_sun_color_angle); scenegraph_->primary_light.color = rgb; flare->color = rgb; } void SkyEditor::CalcBrightnessFromAngularRad() { float size = tan(m_sun_angular_rad); - m_sun_brightness = size*size*_sun_brightness_constant; + m_sun_brightness = size * size * _sun_brightness_constant; } // white -> yellow -> orange -> red -> violet -> blue-white static const vec3 WHITE(1.0f, 1.0f, 1.0f); -static const vec3 YELLOW(252.0f/255.0f, 1.0f, 178.0f/255.0f); -static const vec3 ORANGE(1.0f, 223.0f/255.0f, 178.0f/255.0f); -static const vec3 RED(1.0f, 178.0f/255.0f, 178.0f/255.0f); -static const vec3 VIOLET(1.0f, 178.0f/255.0f, 232.0f/255.0f); -static const vec3 BLUE_WHITE(225.0f/255.0f, 248.0f/255.0f, 1.0f); +static const vec3 YELLOW(252.0f / 255.0f, 1.0f, 178.0f / 255.0f); +static const vec3 ORANGE(1.0f, 223.0f / 255.0f, 178.0f / 255.0f); +static const vec3 RED(1.0f, 178.0f / 255.0f, 178.0f / 255.0f); +static const vec3 VIOLET(1.0f, 178.0f / 255.0f, 232.0f / 255.0f); +static const vec3 BLUE_WHITE(225.0f / 255.0f, 248.0f / 255.0f, 1.0f); vec3 SkyEditor::CalcColorFromAngle(float angle) { - angle = ConvertToFirstCycle(angle, 360.0f); + angle = ConvertToFirstCycle(angle, 360.0f); if (angle < 60) { - return Interpolate(WHITE, YELLOW, angle/60.0f); + return Interpolate(WHITE, YELLOW, angle / 60.0f); } else if (angle < 120) { - return Interpolate(YELLOW, ORANGE, (angle-60.0f)/60.0f); + return Interpolate(YELLOW, ORANGE, (angle - 60.0f) / 60.0f); } else if (angle < 180) { - return Interpolate(ORANGE, RED, (angle-120.0f)/60.0f); + return Interpolate(ORANGE, RED, (angle - 120.0f) / 60.0f); } else if (angle < 240) { - return Interpolate(RED, VIOLET, (angle-180.0f)/60.0f); + return Interpolate(RED, VIOLET, (angle - 180.0f) / 60.0f); } else if (angle < 300) { - return Interpolate(VIOLET, BLUE_WHITE, (angle-240.0f)/60.0f); + return Interpolate(VIOLET, BLUE_WHITE, (angle - 240.0f) / 60.0f); } else { - return Interpolate(BLUE_WHITE, WHITE, (angle-300.0f)/60.0f); - } + return Interpolate(BLUE_WHITE, WHITE, (angle - 300.0f) / 60.0f); + } } -void SkyEditor::SaveHistoryState( std::list<SavedChunk> &chunk_list, int state_id ) { +void SkyEditor::SaveHistoryState(std::list<SavedChunk>& chunk_list, int state_id) { SavedChunk saved_chunk; saved_chunk.obj_id = 0; saved_chunk.type = ChunkType::SKY_EDITOR; @@ -516,43 +508,46 @@ void SkyEditor::SaveHistoryState( std::list<SavedChunk> &chunk_list, int state_i AddChunkToHistory(chunk_list, state_id, saved_chunk); } -bool SkyEditor::ReadChunk( SavedChunk &the_chunk ) { - bool something_changed = false; - EntityDescription &desc = the_chunk.desc; - for(auto & field : desc.fields){ - switch(field.type){ - case EDF_SUN_RADIUS:{ +bool SkyEditor::ReadChunk(SavedChunk& the_chunk) { + bool something_changed = false; + EntityDescription& desc = the_chunk.desc; + for (auto& field : desc.fields) { + switch (field.type) { + case EDF_SUN_RADIUS: { float old_m_sun_angular_rad = m_sun_angular_rad; memread(&m_sun_angular_rad, sizeof(float), 1, field.data); - if(m_sun_angular_rad != old_m_sun_angular_rad){ + if (m_sun_angular_rad != old_m_sun_angular_rad) { something_changed = true; } - break;} - case EDF_SUN_COLOR_ANGLE:{ + break; + } + case EDF_SUN_COLOR_ANGLE: { float old_m_sun_color_angle = m_sun_color_angle; memread(&m_sun_color_angle, sizeof(float), 1, field.data); - if(m_sun_color_angle != old_m_sun_color_angle){ + if (m_sun_color_angle != old_m_sun_color_angle) { something_changed = true; } - break;} + break; + } case EDF_SUN_DIRECTION: { vec3 old_m_sun_ray = sun_dir_; memread(&sun_dir_.entries, sizeof(float), 3, field.data); - if(sun_dir_ != old_m_sun_ray){ + if (sun_dir_ != old_m_sun_ray) { something_changed = true; } - break;} + break; + } } } - if(something_changed){ + if (something_changed) { PlaceSun(sun_dir_); ScaleSun(1.0f); RotateSun(0.0f); } - return something_changed; + return something_changed; } -void SkyEditor::ApplySkyInfo( const SkyInfo &si ) { +void SkyEditor::ApplySkyInfo(const SkyInfo& si) { scenegraph_->sky->dome_texture_name = si.dome_texture_path; PlaceSun(si.ray_to_sun); m_sun_angular_rad = si.sun_angular_rad; |