Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/branches/new_class_id/src/lib/graphics/effects/volfog_effect.cc @ 9727

Last change on this file since 9727 was 9727, checked in by bensch, 18 years ago

orxonox/new_class_id: new Executor construct, that is much more typesafe, faster, and easier to extend…

Also changed the LoadParam process, and adapted ScriptEngine calls

Then at the end, some missing headers appeared, and appended them to all the cc-files again.

File size: 5.5 KB
RevLine 
[7504]1/*
[8495]2  orxonox - the future of 3D-vertical-scrollers
[7504]3
[8495]4  Copyright (C) 2004 orx
[7504]5
[8495]6  This program is free software; you can redistribute it and/or modify
7  it under the terms of the GNU General Public License as published by
8  the Free Software Foundation; either version 2, or (at your option)
9  any later version.
[7504]10
11### File Specific:
[8495]12  main-programmer: hdavid, amaechler
[7504]13*/
14
15#include "volfog_effect.h"
16
17#include "util/loading/load_param.h"
18#include "util/loading/factory.h"
19
[7760]20#include "p_node.h"
21#include "state.h"
22
[8495]23#include "glincl.h"
24//#include "shell_command.h"
[9727]25#include "debug.h"
[7504]26
[9727]27
[7759]28#define GLX_GLXEXT_PROTOTYPES
[8523]29//#include <GL/glx.h>
[7795]30// #include <GL/glut.h>
[7759]31
32//#include <GL/glext.h> //OpenGL Extensions
[8316]33//#include <GL/glxext.h> // GLX Extensions
[7759]34
35#ifndef GL_EXT_fog_coord
36#define GL_EXT_fog_coord 1
37typedef void (APIENTRY * PFNGLFOGCOORDFEXTPROC) (GLfloat coord);
38typedef void (APIENTRY * PFNGLFOGCOORDFVEXTPROC) (const GLfloat *coord);
39typedef void (APIENTRY * PFNGLFOGCOORDDEXTPROC) (GLdouble coord);
40typedef void (APIENTRY * PFNGLFOGCOORDDVEXTPROC) (const GLdouble *coord);
41typedef void (APIENTRY * PFNGLFOGCOORDPOINTEREXTPROC) (GLenum type, GLsizei stride, const GLvoid *pointer);
42#endif
43
44PFNGLFOGCOORDFEXTPROC glFogCoordfEXT = 0;
45PFNGLFOGCOORDFVEXTPROC glFogCoordfvEXT = 0;
46PFNGLFOGCOORDDEXTPROC glFogCoorddEXT = 0;
47PFNGLFOGCOORDDVEXTPROC glFogCoorddvEXT = 0;
48PFNGLFOGCOORDPOINTEREXTPROC glFogCoordPointerEXT = 0;
49
50
[9716]51#include "class_id_DEPRECATED.h"
[9715]52ObjectListDefinitionID(VolFogEffect, CL_VOLFOG_EFFECT);
[9709]53CREATE_FACTORY(VolFogEffect);
[7504]54
[8495]55VolFogEffect::VolFogEffect(const TiXmlElement* root) {
[9686]56  this->registerObject(this, VolFogEffect::_objectList);
[7504]57
[8495]58    if (root != NULL)
59        this->loadParams(root);
[7532]60
[8495]61    // Initialize Effect
62    this->init();
[7546]63
[8495]64    // Activate Effect
65    this->activate();
[7504]66}
67
68
[8495]69VolFogEffect::~VolFogEffect() {
70    this->deactivate();
[7504]71}
72
[8495]73void VolFogEffect::loadParams(const TiXmlElement* root) {
74    WeatherEffect::loadParams(root);
[7504]75}
76
[8495]77void VolFogEffect::init() {
[9006]78    PRINTF(3)("Initalize VolFogEffect\n");
[7504]79
[8495]80    // set fog mode
81    GLenum fogMode  = GL_EXP;
[7759]82
[8495]83    // set fog density
84    float  fogDensity  = 0.001f;
[7759]85
[8495]86    // set fog near & far distance
87    float fogStart = 0.0f;
88    float fogEnd   = 1000.0f;
[7759]89
[8495]90    // Set fog color
91    float fogColor[4] = {0.6f,0.58f,0.79f,0.0f};
[7504]92
[8316]93
[8523]94    /*    glFogCoordfEXT       = (PFNGLFOGCOORDFEXTPROC)glXGetProcAddressARB((const GLubyte*)"glFogCoordfEXT");
[8495]95    glFogCoordfvEXT      = (PFNGLFOGCOORDFVEXTPROC)glXGetProcAddressARB((const GLubyte*)"glFogCoordfvEXT");
96    glFogCoorddEXT       = (PFNGLFOGCOORDDEXTPROC)glXGetProcAddressARB((const GLubyte*)"glFogCoorddEXT");
97    glFogCoorddvEXT      = (PFNGLFOGCOORDDVEXTPROC)glXGetProcAddressARB((const GLubyte*)"glFogCoorddvEXT");
98    glFogCoordPointerEXT = (PFNGLFOGCOORDPOINTEREXTPROC)glXGetProcAddressARB((const GLubyte*)"glFogCoordPointerEXT");
[8523]99    */
[8495]100    // set the fog attributes
101    glFogf (GL_FOG_START,  fogStart);
102    glFogf (GL_FOG_END,    fogEnd);
103    glFogfv(GL_FOG_COLOR,  fogColor);
104    glFogi (GL_FOG_MODE,   fogMode);
105    glFogf (GL_FOG_DENSITY,fogDensity);
106    glFogi (GL_FOG_COORDINATE_SOURCE_EXT,GL_FOG_COORDINATE_EXT);
[7561]107
[8495]108    // enable the fog
109    glEnable(GL_FOG);
[7557]110
[8495]111    if (glewInit() == GLEW_OK)
[9006]112        PRINTF(4)("glewInit OK\n");
[8495]113    else
[9006]114        PRINTF(4)("glewInit failed\n");
[7759]115
[8495]116    if (glewGetExtension("GL_EXT_fog_coord"))
[9006]117        PRINTF(4)("GL_EXT_fog_coord extension found\n");
[7546]118}
119
120
[8495]121void VolFogEffect::activate() {
[9006]122    PRINTF(3)("Activating VolFogEffect\n");
[7504]123}
124
[8495]125void VolFogEffect::deactivate() {
[9006]126    PRINTF(3)("Deactivating VolFogEffect\n");
[7760]127
[8495]128    glDisable(GL_FOG);
[7504]129}
130
[7520]131
[7516]132/**
[7652]133* draws the effect, if needed
134*/
[8495]135void VolFogEffect::draw() const {
136    glPushAttrib(GL_ENABLE_BIT);
137    glClearColor(fogColor[0],fogColor[1],fogColor[2],0.0f);
138    glShadeModel(GL_SMOOTH);
139    glEnable(GL_DEPTH_TEST);
140    glEnable(GL_CULL_FACE);
141    glCullFace(GL_BACK);
[7760]142
[8495]143    /* clear all pixels in colour buffer */
144    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
[7530]145
[8495]146    /* Enable blending */
147    //glEnable(GL_BLEND);
148    //glBlendFunc(GL_SRC_ALPHA, GL_DST_ALPHA);
[8316]149
[8495]150    int i;
151    glLoadIdentity();
[7558]152
[8316]153
[8495]154    glBegin( GL_LINES );
155    glNormal3f(0,1,0);
156    for(i=-20;i<=20;i+=2) {
157        float fog_c;
158        float diff[3];
[7520]159
[8495]160        diff[0] = State::getCameraNode()->getAbsCoor().x - i;
161        diff[2] = State::getCameraNode()->getAbsCoor().z + 20;
162        diff[1] = State::getCameraNode()->getAbsCoor().y;
163        fog_c = 1.3f*sqrt(diff[0]*diff[0]+diff[1]*diff[1]+diff[2]*diff[2]);
164        glFogCoordfEXT(fog_c*2);
165        glVertex3f(i,0,-20);
[7520]166
[8495]167        diff[0] = State::getCameraNode()->getAbsCoor().x - i;
168        diff[2] = State::getCameraNode()->getAbsCoor().z + 20;
169        diff[1] = State::getCameraNode()->getAbsCoor().y;
170        fog_c = 1.3f*sqrt(diff[0]*diff[0]+diff[1]*diff[1]+diff[2]*diff[2]);
171        glFogCoordfEXT(fog_c*2);
172        glVertex3f(i,0,20);
[7520]173
[8495]174        diff[0] = State::getCameraNode()->getAbsCoor().x - i;
175        diff[2] = State::getCameraNode()->getAbsCoor().z + 20;
176        diff[1] = State::getCameraNode()->getAbsCoor().y;
177        fog_c = 1.3f*sqrt(diff[0]*diff[0]+diff[1]*diff[1]+diff[2]*diff[2]);
178        glFogCoordfEXT(fog_c*2);
179        glVertex3f(-20,0,i);
[7546]180
[8495]181        diff[0] = State::getCameraNode()->getAbsCoor().x - i;
182        diff[2] = State::getCameraNode()->getAbsCoor().z + 20;
183        diff[1] = State::getCameraNode()->getAbsCoor().y;
184        fog_c = 1.3f*sqrt(diff[0]*diff[0]+diff[1]*diff[1]+diff[2]*diff[2]);
185        glFogCoordfEXT(fog_c*2);
186        glVertex3f(20,0,i);
187    }
188    glEnd();
[7546]189
[8495]190    glPopAttrib();
[7546]191
[7557]192}
[7546]193
194
[7516]195/**
[7652]196* ticks the effect if there is any time dependancy
197*/
[8495]198void VolFogEffect::tick(float dt) {}
Note: See TracBrowser for help on using the repository browser.