Fixed opengl explorer

This commit is contained in:
Michaël Lemaire 2013-12-15 15:06:43 +01:00
parent 02bf40c3c6
commit 1685efcfbe
4 changed files with 19 additions and 34 deletions

View file

@ -58,3 +58,8 @@ void OpenGLRenderer::paint()
{ {
} }
Color OpenGLRenderer::applyMediumTraversal(Vector3, Color color)
{
return color;
}

View file

@ -11,7 +11,7 @@ namespace opengl {
/*! /*!
* \brief Scenery renderer in an OpenGL context. * \brief Scenery renderer in an OpenGL context.
*/ */
class OPENGLSHARED_EXPORT OpenGLRenderer: protected SoftwareRenderer class OPENGLSHARED_EXPORT OpenGLRenderer: public SoftwareRenderer
{ {
public: public:
OpenGLRenderer(Scenery* scenery=0); OpenGLRenderer(Scenery* scenery=0);
@ -20,6 +20,8 @@ public:
void initialize(); void initialize();
void resize(int width, int height); void resize(int width, int height);
void paint(); void paint();
virtual Color applyMediumTraversal(Vector3 location, Color color) override;
}; };
} }

View file

@ -16,6 +16,7 @@
#include "TerrainRenderer.h" #include "TerrainRenderer.h"
#include "WaterRenderer.h" #include "WaterRenderer.h"
#include "Scenery.h" #include "Scenery.h"
#include "LightingManager.h"
class ChunkMaintenanceThread : public QThread class ChunkMaintenanceThread : public QThread
{ {
@ -55,21 +56,6 @@ private:
static QVector<ChunkMaintenanceThread*> _threads; static QVector<ChunkMaintenanceThread*> _threads;
/*static Vector3 _getCameraLocation(Renderer* renderer, Vector3)
{
return ((CameraDefinition*)renderer->customData[2])->getLocation();
}
static AtmosphereResult _applyAerialPerspective(Renderer*, Vector3, Color base)
{
AtmosphereResult result;
atmosphereInitResult(&result);
result.base = base;
result.final = base;
atmosphereUpdateResult(&result);
return result;
}*/
WidgetExplorer::WidgetExplorer(QWidget *parent, CameraDefinition* camera, Scenery* scenery) : WidgetExplorer::WidgetExplorer(QWidget *parent, CameraDefinition* camera, Scenery* scenery) :
QGLWidget(parent) QGLWidget(parent)
{ {
@ -80,14 +66,11 @@ QGLWidget(parent)
_base_camera = camera; _base_camera = camera;
camera->copy(_current_camera); camera->copy(_current_camera);
_renderer = new SoftwareRenderer(scenery); _opengl_renderer = new OpenGLRenderer(scenery);
_opengl_renderer = new OpenGLRenderer(NULL); _opengl_renderer->prepare();
_renderer->prepare(); _opengl_renderer->render_quality = 3;
_renderer->render_quality = 3; _opengl_renderer->getLightingManager()->setSpecularity(false);
/*_renderer->customData[2] = _base_camera; _opengl_renderer->disableClouds();
_renderer->getCameraLocation = _getCameraLocation;
_renderer->atmosphere->applyAerialPerspective = _applyAerialPerspective;
lightingManagerDisableSpecularity(_renderer->lighting);*/
_inited = false; _inited = false;
_updated = false; _updated = false;
@ -119,12 +102,12 @@ void WidgetExplorer::startRendering()
double size = 400.0; double size = 400.0;
double chunksize = size / (double) chunks; double chunksize = size / (double) chunks;
double start = -size / 2.0; double start = -size / 2.0;
double water_height = _renderer->getWaterRenderer()->getHeightInfo().base_height; double water_height = _opengl_renderer->getWaterRenderer()->getHeightInfo().base_height;
for (int i = 0; i < chunks; i++) for (int i = 0; i < chunks; i++)
{ {
for (int j = 0; j < chunks; j++) for (int j = 0; j < chunks; j++)
{ {
ExplorerChunkTerrain* chunk = new ExplorerChunkTerrain(_renderer, start + chunksize * (double) i, start + chunksize * (double) j, chunksize, chunks, water_height); ExplorerChunkTerrain* chunk = new ExplorerChunkTerrain(_opengl_renderer, start + chunksize * (double) i, start + chunksize * (double) j, chunksize, chunks, water_height);
_chunks.append(chunk); _chunks.append(chunk);
_updateQueue.append(chunk); _updateQueue.append(chunk);
} }
@ -133,7 +116,7 @@ void WidgetExplorer::startRendering()
// Add skybox // Add skybox
for (int orientation = 0; orientation < 5; orientation++) for (int orientation = 0; orientation < 5; orientation++)
{ {
ExplorerChunkSky* chunk = new ExplorerChunkSky(_renderer, 500.0, (SkyboxOrientation) orientation); ExplorerChunkSky* chunk = new ExplorerChunkSky(_opengl_renderer, 500.0, (SkyboxOrientation) orientation);
_chunks.append(chunk); _chunks.append(chunk);
_updateQueue.append(chunk); _updateQueue.append(chunk);
} }
@ -386,11 +369,7 @@ void WidgetExplorer::paintGL()
GLenum error_code; GLenum error_code;
QTime start_time; QTime start_time;
double frame_time; double frame_time;
WaterDefinition* water = _renderer->getScenery()->getWater(); WaterDefinition* water = _opengl_renderer->getScenery()->getWater();
// Don't do this at each frame, only on camera change
_renderer->getScenery()->setCamera(_current_camera);
_renderer->getScenery()->getCamera(_current_camera);
start_time = QTime::currentTime(); start_time = QTime::currentTime();
@ -406,7 +385,7 @@ void WidgetExplorer::paintGL()
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// Render water // Render water
double water_height = _renderer->getTerrainRenderer()->getWaterHeight(); double water_height = _opengl_renderer->getTerrainRenderer()->getWaterHeight();
glDisable(GL_TEXTURE_2D); glDisable(GL_TEXTURE_2D);
glColor3f(water->material->_rgb.r, water->material->_rgb.g, water->material->_rgb.b); glColor3f(water->material->_rgb.r, water->material->_rgb.g, water->material->_rgb.b);
glBegin(GL_QUADS); glBegin(GL_QUADS);

View file

@ -42,7 +42,6 @@ private:
CameraDefinition* _base_camera; CameraDefinition* _base_camera;
OpenGLRenderer* _opengl_renderer; OpenGLRenderer* _opengl_renderer;
SoftwareRenderer* _renderer;
bool _inited; bool _inited;
bool _updated; bool _updated;