From 2e789cb9894ac5a9565013b134f1c1e51174f430 Mon Sep 17 00:00:00 2001 From: Stijn Buys Date: Sun, 13 Jul 2008 00:36:09 +0000 Subject: skyglobe --- src/render/draw.cc | 58 +++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 51 insertions(+), 7 deletions(-) (limited to 'src/render/draw.cc') diff --git a/src/render/draw.cc b/src/render/draw.cc index 1091d8c..6aafcca 100644 --- a/src/render/draw.cc +++ b/src/render/draw.cc @@ -66,6 +66,25 @@ void draw_sphere(math::Color const & color, float radius) //gl::pop(); } +void draw_sphere_inside(math::Color const & color, float radius) +{ + //gl::push(); + gl::scale(radius, radius, radius); + gl::color(color); + + size_t index = (model::SPHERESEGMENTS) * (model::SPHERESEGMENTS-1); + size_t count = (model::SPHERESEGMENTS)*2; + + // draw body + for (int j=0; j < (model::SPHERESEGMENTS-1)/2; j++) { + glDrawArrays(gl::QuadStrip, index, count); + index += count; + Stats::quads += count/2-1; + } + + //gl::pop(); +} + void draw_entity_sphere(core::Entity *entity) { if ((entity->type() == core::Entity::Globe) && !flag_is_set(entity->flags(), core::Entity::Bright)) { @@ -393,6 +412,25 @@ void pass_prepare(float seconds) } } +/* Draw skybox */ +void draw_pass_skybox() +{ + + if (!(r_sky && r_sky->value())) + return; + + size_t flare_texture = Textures::load("textures/env/sky"); + Textures::bind(flare_texture); + + gl::enable(GL_TEXTURE_2D); + gl::push(); + + draw_sphere_inside(math::Color(), 512); + + gl::pop(); + gl::disable(GL_TEXTURE_2D); +} + /* Draw entities without model */ void draw_pass_default() { @@ -692,6 +730,9 @@ void draw_pass_model_corona() void draw_pass_spacegrid() { + if (!(r_grid && r_grid->value())) + return; + int gridsize = 32; float s = 1.0f / gridsize; float z = -4.0f; @@ -741,14 +782,8 @@ void draw(float seconds) Camera::draw(seconds); // draw the current camera transformation pass_prepare(seconds); - - gl::enable(GL_DEPTH_TEST); // enable depth buffer writing - gl::enable(GL_CULL_FACE); // enable culling - gl::enable(GL_COLOR_MATERIAL); // enable color tracking - gl::enable(GL_LIGHTING); - gl::disable(GL_BLEND); // disbable alpha blending for world polys - gl::disable(GL_RESCALE_NORMAL); + // enable vertex arrays glVertexPointer(3, GL_FLOAT, 0, vertexarray->vertex()); glNormalPointer(GL_FLOAT, 0, vertexarray->normal()); glColorPointer(3, GL_FLOAT, 0, vertexarray->color()); @@ -759,6 +794,15 @@ void draw(float seconds) glEnableClientState(GL_COLOR_ARRAY); glEnableClientState(GL_TEXTURE_COORD_ARRAY); + draw_pass_skybox(); // draw the skybox + + gl::enable(GL_DEPTH_TEST); // enable depth buffer writing + gl::enable(GL_CULL_FACE); // enable culling + gl::enable(GL_COLOR_MATERIAL); // enable color tracking + gl::enable(GL_LIGHTING); + gl::disable(GL_BLEND); // disbable alpha blending for world polys + gl::disable(GL_RESCALE_NORMAL); + if (r_wireframe && r_wireframe->value()) { glPolygonMode(GL_FRONT, GL_LINE); } else { -- cgit v1.2.3