diff options
Diffstat (limited to 'src/render')
-rw-r--r-- | src/render/camera.cc | 14 | ||||
-rw-r--r-- | src/render/draw.cc | 76 |
2 files changed, 83 insertions, 7 deletions
diff --git a/src/render/camera.cc b/src/render/camera.cc index 7f1f307..5a6607f 100644 --- a/src/render/camera.cc +++ b/src/render/camera.cc @@ -286,12 +286,18 @@ void Camera::draw(float seconds) camera_axis.change_pitch(pitch_current); } else if (mode() == Cockpit) { + camera_axis.assign(target_axis); - if (core::localcontrol()->state() && core::localcontrol()->model()) - camera_target += (core::localcontrol()->model()->maxbbox().x+0.05) * - core::localcontrol()->state()->axis().forward(); - + if (core::localcontrol()->state()) { + if (core::localcontrol()->model()) { + camera_target += (core::localcontrol()->model()->maxbbox().x+0.05) * + core::localcontrol()->state()->axis().forward(); + } else { + camera_target += (core::localcontrol()->radius() + 0.05) * + core::localcontrol()->state()->axis().forward(); + } + } distance = 0.0f; } } diff --git a/src/render/draw.cc b/src/render/draw.cc index 448b2ce..1091d8c 100644 --- a/src/render/draw.cc +++ b/src/render/draw.cc @@ -91,7 +91,7 @@ void draw_entity_sphere(core::Entity *entity) void draw_entity_cube(core::Entity *entity) { - float radius = entity->radius()/2; + float radius = entity->radius(); gl::scale(radius, radius, radius); gl::color(entity->color()); @@ -139,6 +139,72 @@ void draw_entity_cube(core::Entity *entity) gl::end(); } +void draw_entity_diamond(core::Entity *entity) +{ + float radius = entity->radius()/2; + + gl::color(entity->color()); + + gl::begin(gl::TriangleFan ); + gl::normal(0, 0 , 1); + gl::vertex(0, 0, radius); + + gl::normal(1, 0 ,0); + gl::vertex(radius, 0.0f, 0.0f); + gl::normal(0, 1, 0); + gl::vertex(0.0f, radius, 0.0f); + gl::normal(-1, 0 ,0); + gl::vertex(-radius, 0.0f, 0.0f); + gl::normal(0, -1, 0); + gl::vertex(0.0f, -radius, 0.0f); + gl::normal(1, 0 ,0); + gl::vertex(radius, 0.0f, 0.0f); + + gl::end(); + + gl::begin(gl::TriangleFan); + gl::normal(0, 0 , -1); + gl::vertex(0, 0, -radius); + + gl::normal(1, 0, 0); + gl::vertex(radius, 0.0f, 0.0f); + + gl::normal(0, -1, 0); + gl::vertex(0.0f, -radius, 0.0f); + + gl::normal(-1, 0 ,0); + gl::vertex(-radius, 0.0f, 0.0f); + + gl::normal(0, 1, 0); + gl::vertex(0.0f, radius, 0.0f); + + gl::normal(1, 0 ,0); + gl::vertex(radius, 0.0f, 0.0f); + + gl::end(); + + gl::begin(gl::Lines); + + gl::vertex(radius, 0, 0); + gl::vertex(2* radius, 0, 0); + + gl::vertex(0, radius, 0); + gl::vertex(0, 2* radius, 0); + + gl::vertex(0, 0, radius); + gl::vertex(0, 0, 2 * radius); + + gl::vertex(-radius, 0, 0); + gl::vertex(-2 * radius, 0, 0); + + gl::vertex(0, -radius, 0); + gl::vertex(0, -2 * radius, 0); + + gl::vertex(0, 0, -radius); + gl::vertex(0, 0, -2 * radius); + + gl::end(); +} void draw_entity_axis(core::Entity *entity) { @@ -225,6 +291,7 @@ void pass_prepare(float seconds) if (!entity->model()) { entity->entity_modelname.clear(); + entity->entity_radius = 0.25; } else { // set entity radius to model radius entity->entity_radius = entity->entity_model->radius(); @@ -343,13 +410,16 @@ void draw_pass_default() gl::disable(GL_LIGHTING); } - switch(entity->shape()) { + switch(entity->shape()) { + case core::Entity::Sphere: draw_entity_sphere(entity); break; case core::Entity::Diamond: - + draw_entity_diamond(entity); + break; + case core::Entity::Axis: draw_entity_axis(entity); break; |