23 #include <sys/types.h> 33 #include <plib/ssgAux.h> 63 #define NB_BG_FACES 36 96 ssgLight *light = ssgGetLight(0);
98 GLfloat mat_specular[] = {0.3, 0.3, 0.3, 1.0};
99 GLfloat mat_shininess[] = {50.0};
100 GLfloat light_position[] = {0, 0, 200, 0.0};
101 GLfloat lmodel_ambient[] = {0.2, 0.2, 0.2, 1.0};
102 GLfloat lmodel_diffuse[] = {0.8, 0.8, 0.8, 1.0};
103 GLfloat fog_clr[] = {1.0, 1.0, 1.0, 0.5};
123 glShadeModel(GL_SMOOTH);
125 light->setPosition(light_position[0],light_position[1],light_position[2]);
126 light->setColour(GL_AMBIENT,lmodel_ambient);
127 light->setColour(GL_DIFFUSE,lmodel_diffuse);
128 light->setColour(GL_SPECULAR,mat_specular);
129 light->setSpotAttenuation(0.0, 0.0, 0.0);
132 sgScaleVec3 (fog_clr, 0.8);
133 glFogi(GL_FOG_MODE, GL_LINEAR);
134 glFogfv(GL_FOG_COLOR, fog_clr);
135 glFogf(GL_FOG_DENSITY, 0.05);
136 glHint(GL_FOG_HINT, GL_DONT_CARE);
138 glEnable(GL_LIGHTING);
140 glEnable(GL_DEPTH_TEST);
143 ssgaLensFlare *sun_obj = NULL ;
144 sun_obj =
new ssgaLensFlare () ;
152 glLightModeli(GL_LIGHT_MODEL_TWO_SIDE,GL_FALSE);
154 #ifdef GL_SEPARATE_SPECULAR_COLOR 155 glLightModeli(GL_LIGHT_MODEL_COLOR_CONTROL,GL_SEPARATE_SPECULAR_COLOR);
157 #ifdef GL_SEPARATE_SPECULAR_COLOR_EXT 158 glLightModeli(GL_LIGHT_MODEL_COLOR_CONTROL_EXT,GL_SEPARATE_SPECULAR_COLOR_EXT);
173 const int BUFSIZE = 256;
180 ssgSetCurrentOptions(&
options);
228 if (strlen(acname) == 0) {
246 TRACE_GL(
"refresh: ssgCullAndDraw start");
248 TRACE_GL(
"refresh: ssgCullAndDraw");
293 ssgSimpleState *envst;
298 const int BUFSIZE = 1024;
301 ssgVertexArray *bg_vtx;
302 ssgTexCoordArray *bg_tex;
303 ssgColourArray *bg_clr;
304 ssgNormalArray *bg_nrm;
305 ssgSimpleState *bg_st;
316 clr[0] = clr[1] = clr[2] = 1.0;
318 nrm[0] = nrm[2] = 0.0;
323 switch (graphic->
bgtype) {
327 bg_clr =
new ssgColourArray(1);
328 bg_nrm =
new ssgNormalArray(1);
356 bg =
new ssgVtxTable(GL_TRIANGLE_STRIP, bg_vtx, bg_nrm, bg_tex, bg_clr);
358 bg_st->disable(GL_LIGHTING);
367 bg_clr =
new ssgColourArray(1);
368 bg_nrm =
new ssgNormalArray(1);
396 bg =
new ssgVtxTable(GL_TRIANGLE_STRIP, bg_vtx, bg_nrm, bg_tex, bg_clr);
398 bg_st->disable(GL_LIGHTING);
405 bg_clr =
new ssgColourArray(1);
406 bg_nrm =
new ssgNormalArray(1);
434 bg =
new ssgVtxTable(GL_TRIANGLE_STRIP, bg_vtx, bg_nrm, bg_tex, bg_clr);
436 bg_st->disable(GL_LIGHTING);
443 bg_clr =
new ssgColourArray(1);
444 bg_nrm =
new ssgNormalArray(1);
472 bg =
new ssgVtxTable(GL_TRIANGLE_STRIP, bg_vtx, bg_nrm, bg_tex, bg_clr);
474 bg_st->disable(GL_LIGHTING);
481 bg_clr =
new ssgColourArray(1);
482 bg_nrm =
new ssgNormalArray(1);
510 bg =
new ssgVtxTable(GL_TRIANGLE_STRIP, bg_vtx, bg_nrm, bg_tex, bg_clr);
512 bg_st->disable(GL_LIGHTING);
526 bg_clr =
new ssgColourArray(1);
527 bg_nrm =
new ssgNormalArray(1);
555 bg =
new ssgVtxTable(GL_TRIANGLE_STRIP, bg_vtx, bg_nrm, bg_tex, bg_clr);
557 bg_st->disable(GL_LIGHTING);
569 for (i = 0; i < graphic->
envnb; i++) {
570 GfOut(
"Loading Environment Mapping Image %s\n", graphic->
env[i]);
572 envst->enable(GL_BLEND);
585 ulSetError ( UL_WARNING,
"grscene:initBackground Failed to open envshadow.png for reading") ;
586 ulSetError ( UL_WARNING,
" mandatory for top env mapping ") ;
587 ulSetError ( UL_WARNING,
" should be in the .xml !! ") ;
588 ulSetError ( UL_WARNING,
" copy the envshadow.png from g-track-2 to the track you selected ") ;
589 ulSetError ( UL_WARNING,
" c'est pas classe comme sortie, mais ca evite un crash ") ;
597 ulSetError ( UL_WARNING,
"grscene:initBackground Failed to open shadow2.rgb for reading") ;
598 ulSetError ( UL_WARNING,
" no shadow mapping on cars for this track ") ;
607 TRACE_GL(
"grDrawBackground: ssgCullAndDraw start");
614 TRACE_GL(
"grDrawBackground: ssgCullAndDraw");
631 switch (pits->
type) {
633 for (i = 0; i < pits->
nMaxPits; i++) {
634 const int BUFSIZE=256;
638 sgVec4 clr = {0,0,0,1};
642 ssgVertexArray *pit_vtx =
new ssgVertexArray(4);
643 ssgTexCoordArray *pit_tex =
new ssgTexCoordArray(4);
644 ssgColourArray *pit_clr =
new ssgColourArray(1);
645 ssgNormalArray *pit_nrm =
new ssgNormalArray(1);
653 snprintf(buf, BUFSIZE,
"drivers/%s/%d;drivers/%s;data/textures;data/img;.",
658 snprintf(buf, BUFSIZE,
"drivers/%s;data/textures;data/img;.", pits->
driversPits[i].
car[0]->_modName);
661 snprintf(buf, BUFSIZE,
"data/textures;data/img;.");
666 ((ssgSimpleState*)st)->setShininess(50);
670 x2 = x - pits->
width/2.0 * normalvector.
x + pits->
len/2.0 * normalvector.
y;
671 y2 =
y - pits->
width/2.0 * normalvector.
y - pits->
len/2.0 * normalvector.
x;
674 nrm[0] = normalvector.
x;
675 nrm[1] = normalvector.
y;
695 x2 = x - pits->
width/2.0 * normalvector.
x - pits->
len/2.0 * normalvector.
y;
696 y2 =
y - pits->
width/2.0 * normalvector.
y + pits->
len/2.0 * normalvector.
x;
715 ssgVtxTable *pit =
new ssgVtxTable(GL_TRIANGLE_STRIP, pit_vtx, pit_nrm, pit_tex, pit_clr);
int nMaxPits
number max of pits
#define TRK_ATT_DIFFUSE_R
void grShutdownScene(void)
#define TRK_ATT_DIFFUSE_B
bool grLoadPngTexture(const char *fname, ssgTextureInfo *info)
tTrackOwnPit * driversPits
List of pits by driver.
static ssgLoaderOptionsEx options
void grDrawBackground(class cGrCamera *cam, class cGrBackgroundCam *bgCam)
grMultiTexState * grEnvShadowState
ssgState * grSsgEnvTexState(const char *img)
#define TRK_ATT_DIFFUSE_G
#define TR_PIT_ON_TRACK_SIDE
The pits are on the track side.
#define TRK_ATT_AMBIENT_G
#define TR_PIT_ON_SEPARATE_PATH
const char * GfParmGetStr(void *parmHandle, const char *path, const char *key, const char *deflt)
Get a string parameter from the parameter set handle.
ssgBranch * CarlightAnchor
The Gaming Framework API (client part).
int type
Type of description:
char * internalname
Internal name of the track.
tTrkLocPos pos
Center of the pit position.
void grCustomizePits(void)
tTrackGraphicInfo graphic
struct CarElt * car[TR_PIT_MAXCARPERPIT]
Car links for pit.
grMultiTexState * grEnvState
void update(tCarElt *car, tSituation *s)
static ssgRoot * TheBackground
float tdble
Floating point type used in TORCS.
Graphic Module Interface Definition.
#define TRK_ATT_AMBIENT_R
This is the car structure.
#define TR_PIT_NONE
No pits for that tracks.
void grRegisterCustomSGILoader(void)
tTrackSeg * seg
Track segment.
tdble GfParmGetNum(void *handle, const char *path, const char *key, const char *unit, tdble deflt)
Get a numerical parameter from the parameter set handle.
tdble width
Width of each pit stop.
int track(tModInfo *modInfo)
static void initBackground(void)
int grLoadScene(tTrack *track)
tdble len
Lenght of each pit stop.
ssgEntity * grssgLoadAC3D(const char *fname, const ssgLoaderOptions *options)
ssgStateSelector * grEnvSelector
ssgState * grSsgLoadTexState(const char *img)
grMultiTexState * grEnvShadowStateOnCars
ssgState * grSsgLoadTexStateEx(const char *img, char *filepath, int wrap, int mipmap)
int preScene(ssgEntity *e)
#define TRK_ATT_AMBIENT_B
void GfScrShutdown(void)
Shutdown the screen.
const char * category
Category of the track.
Track Structure and Track Loader Module Definition.
tTrackPitInfo pits
Pits information.
ssgTransform * sun_grscene