OSG : director's cut cam almost repaired

git-svn-id: https://svn.code.sf.net/p/speed-dreams/code/trunk@5228 30fe4595-0a0c-4342-8851-515496e4dcbd

Former-commit-id: 964617513701c0fda9b04ff1e54f74cb39650d70
Former-commit-id: d92dd4c72a2a3b946979c5b7554e755a212245d4
This commit is contained in:
rvlander 2013-02-28 09:58:31 +00:00
parent fe2d95dd9f
commit 4e71f19eb5
4 changed files with 91 additions and 69 deletions

View file

@ -30,8 +30,10 @@
#include "OsgCamera.h"
#include "OsgView.h"
#include "OsgScenery.h"
#include "OsgMain.h"
//static char path[1024];
static char path[1024];
char buf[256];
static float spanfovy;
static float bezelComp;
@ -200,10 +202,10 @@ void SDPerspCamera::setModelView(void)
void SDPerspCamera::loadDefaults(char *attr)
{
/* sprintf(path, "%s/%d", GR_SCT_DISPMODE, screen->getId());
sprintf(path, "%s/%d", GR_SCT_DISPMODE, screen->getId());
fovy = (float)GfParmGetNum(grHandle, path,
attr, (char*)NULL, fovydflt);
limitFov();*/
limitFov();
}
@ -343,10 +345,10 @@ void SDPerspCamera::setZoom(int cmd)
}
this->setProjection();
// sprintf(buf, "%s-%d-%d", GR_ATT_FOVY, screen->getCameras()->getIntSelectedCamera(), getId());
//sprintf(path, "%s/%d", GR_SCT_DISPMODE, screen->getId());
//GfParmSetNum(grHandle, path, buf, (char*)NULL, (tdble)fovy);
//GfParmWriteFile(NULL, grHandle, "Graph");
sprintf(buf, "%s-%d-%d", GR_ATT_FOVY, screen->getCameras()->getIntSelectedCamera(), getId());
sprintf(path, "%s/%d", GR_SCT_DISPMODE, screen->getId());
GfParmSetNum(grHandle, path, buf, (char*)NULL, (tdble)fovy);
GfParmWriteFile(NULL, grHandle, "Graph");
}
@ -974,8 +976,8 @@ class SDCarCamCenter : public SDPerspCamera
locfar = ffar;
locfovy = fovy;
eye[0] = grWrldX * 0.5;
eye[1] = grWrldY * 0.6;
eye[0] = SDScenery::getWorldX() * 0.5;
eye[1] = SDScenery::getWorldY() * 0.6;
eye[2] = distz;
up[0] = 0;
@ -984,9 +986,9 @@ class SDCarCamCenter : public SDPerspCamera
}
void loadDefaults(char *attr) {
/* sprintf(path, "%s/%d", GR_SCT_DISPMODE, screen->getId());
sprintf(path, "%s/%d", GR_SCT_DISPMODE, screen->getId());
locfovy = (float)GfParmGetNum(grHandle, path,
attr, (char*)NULL, fovydflt);*/
attr, (char*)NULL, fovydflt);
}
void setZoom(int cmd) {
@ -1226,9 +1228,9 @@ class SDCarCamRoadZoom : public SDPerspCamera
}
void loadDefaults(char *attr) {
/*sprintf(path, "%s/%d", GR_SCT_DISPMODE, screen->getId());
sprintf(path, "%s/%d", GR_SCT_DISPMODE, screen->getId());
locfovy = (float)GfParmGetNum(grHandle, path,
attr, (char*)NULL, fovydflt);*/
attr, (char*)NULL, fovydflt);
}
void setZoom(int cmd) {
@ -1244,8 +1246,8 @@ class SDCarCamRoadZoom : public SDPerspCamera
curCam = car->_trkPos.seg->cam;
if (curCam == NULL) {
eye[0] = grWrldX * 0.5;
eye[1] = grWrldY * 0.6;
eye[0] = SDScenery::getWorldX() * 0.5;
eye[1] = SDScenery::getWorldY() * 0.6;
eye[2] = 120;
} else {
eye[0] = curCam->pos.x;
@ -1302,8 +1304,8 @@ class SDCarCamRoadNoZoom : public SDPerspCamera
curCam = car->_trkPos.seg->cam;
if (curCam == NULL) {
eye[0] = grWrldX * 0.5;
eye[1] = grWrldY * 0.6;
eye[0] = SDScenery::getWorldX() * 0.5;
eye[1] = SDScenery::getWorldY() * 0.6;
eye[2] = 120;
center[2] = car->_pos_Z;
} else {
@ -1625,8 +1627,8 @@ void SDCarCamMirror::limitFov(void)
fovy = origFovY / getAspectRatio();
}
// cGrCarCamRoadZoomTVD ================================================================
/*static tdble
// SDCarCamRoadZoomTVD ================================================================
static tdble
GetDistToStart(tCarElt *car)
{
tTrackSeg *seg;
@ -1685,7 +1687,7 @@ class SDCarCamRoadZoomTVD : public SDCarCamRoadZoom
current = -1;
/*camChangeInterval = GfParmGetNum(grHandle, GR_SCT_TVDIR, GR_ATT_CHGCAMINT, (char*)NULL, 10.0);
camChangeInterval = GfParmGetNum(grHandle, GR_SCT_TVDIR, GR_ATT_CHGCAMINT, (char*)NULL, 10.0);
camEventInterval = GfParmGetNum(grHandle, GR_SCT_TVDIR, GR_ATT_EVTINT, (char*)NULL, 1.0);
proximityThld = GfParmGetNum(grHandle, GR_SCT_TVDIR, GR_ATT_PROXTHLD, (char*)NULL, 10.0);
@ -1713,7 +1715,7 @@ class SDCarCamRoadZoomTVD : public SDCarCamRoadZoom
}
/* Track events
/* Track events*/
if (deltaEventTime > camEventInterval) {
memset(schedView, 0, ncars * sizeof(tSchedView));
@ -1721,13 +1723,14 @@ class SDCarCamRoadZoomTVD : public SDCarCamRoadZoom
schedView[i].viewable = 1;
}
/*for (i = 0; i < GR_NB_MAX_SCREEN; i++) {
if ((screen != grScreens[i]) && grScreens[i]->isActive()) {
car = grScreens[i]->getCurrentCar();
//for (i = 0; i < GR_NB_MAX_SCREEN; i++) {
//if ((screen != grScreens[i]) && grScreens[i]->isActive()) {
car = screen->getCurrentCar();
schedView[car->index].viewable = 0;
schedView[car->index].prio -= 10000;
}
}
//}
//}/
for (i = 0; i < grNbCars; i++) {
tdble dist, fs;
@ -1735,18 +1738,24 @@ class SDCarCamRoadZoomTVD : public SDCarCamRoadZoom
car = s->cars[i];
schedView[car->index].prio += grNbCars - i;
fs = GetDistToStart(car);
if ((car->_state & RM_CAR_STATE_NO_SIMU) != 0) {
schedView[car->index].viewable = 0;
} else {
if ((fs > (grTrack->length - 200.0)) && (car->_remainingLaps == 0)) {
/*if ((fs > (grTrack->length - 200.0)) && (car->_remainingLaps == 0)) {
schedView[car->index].prio += 5 * grNbCars;
event = 1;
}
}*/
}
if ((car->_state & RM_CAR_STATE_NO_SIMU) == 0) {
dist = fabs(car->_trkPos.toMiddle) - grTrack->width / 2.0;
/* out of track
dist = fabs(car->_trkPos.toMiddle) ;//- grTrack->width / 2.0;
/* out of track*/
if (dist > 0) {
schedView[car->index].prio += grNbCars;
if (car->ctrl.raceCmd & RM_CMD_PIT_ASKED) {
@ -1778,13 +1787,13 @@ class SDCarCamRoadZoomTVD : public SDCarCamRoadZoom
}
} else {
if (i == current) {
event = 1; /* update view
event = 1; /* update view*/
}
}
}
/* change current car
/* change current car*/
if ((event && (deltaEventTime > camEventInterval)) || (deltaViewTime > camChangeInterval)) {
int last_current = current;
@ -1812,11 +1821,11 @@ class SDCarCamRoadZoomTVD : public SDCarCamRoadZoom
screen->setCurrentCar(s->cars[current]);
cGrCarCamRoadZoom::update(s->cars[current], s);
SDCarCamRoadZoom::update(s->cars[current], s);
}
};
*/
SDCamera::~SDCamera( void ){
}
@ -1832,10 +1841,10 @@ SDCameras::SDCameras(SDView *c, int ncars){
// Get the factor of visibiity from the graphics settings and from the track.
//tdble fovFactor = GfParmGetNum(grHandle, GR_SCT_GRAPHIC, GR_ATT_FOVFACT, (char*)NULL, 1.0);
//fovFactor *= GfParmGetNum(grTrackHandle, TRK_SECT_GRAPH, TRK_ATT_FOVFACT, (char*)NULL, 1.0);
tdble fovFactor = GfParmGetNum(grHandle, GR_SCT_GRAPHIC, GR_ATT_FOVFACT, (char*)NULL, 1.0);
fovFactor *= GfParmGetNum(grTrackHandle, TRK_SECT_GRAPH, TRK_ATT_FOVFACT, (char*)NULL, 1.0);
tdble fovFactor =1;
//tdble fovFactor =1;
tdble fixedFar =0;
// If sky dome is enabled, we have a "fixed far" cut plane.
@ -2248,16 +2257,16 @@ SDCameras::SDCameras(SDView *c, int ncars){
1.0, /* fovymin */
110.0, /* fovymax */
0, /* up axis */
grWrldX/2, /* eyex */
grWrldY/2, /* eyey */
MAX(grWrldX/2, grWrldY*4/3/2) + grWrldZ, /* eyez */
grWrldX/2, /* centerx */
grWrldY/2, /* centery */
SDScenery::getWorldX()/2, /* eyex */
SDScenery::getWorldY()/2, /* eyey */
MAX(SDScenery::getWorldX()/2, SDScenery::getWorldY()*4/3/2) + SDScenery::getWorldZ(), /* eyez */
SDScenery::getWorldX()/2, /* centerx */
SDScenery::getWorldY()/2, /* centery */
0, /* centerz */
10.0, /* near */
grWrldMaxSize * 2.0, /* far */
grWrldMaxSize * 10.0, /* fogstart */
grWrldMaxSize * 20.0 /* fogend */
SDScenery::getWorldMaxSize() * 2.0, /* far */
SDScenery::getWorldMaxSize()* 10.0, /* fogstart */
SDScenery::getWorldMaxSize() * 20.0 /* fogend */
));
/* F8 - GoPro like views-index 6*/
@ -2354,23 +2363,24 @@ SDCameras::SDCameras(SDView *c, int ncars){
/* F11 - The Directors cut -index 9 */
id=0;
//TODO correct when params class
/* cameras[9].insert(cameras[9].end(),new SDCamRoadZoomTVD(myscreen,
cameras[9].insert(cameras[9].end(),new SDCarCamRoadZoomTVD(myscreen,
id,
1, /* drawCurr
1, /* drawBG
9.0, /* fovy
1.0, /* fovymin
90.0, /* fovymax
1.0, /* near
1, // drawCurr
1, // drawBG
9.0, // fovy
1.0, // fovymin
90.0, // fovymax
1.0, // near
ncars,
fixedFar ? fixedFar : 1000.0 * fovFactor, /* far
fixedFar ? fixedFar/2 : 500.0 * fovFactor, /* fogstart
fixedFar ? fixedFar : 1000.0 * fovFactor /* fogend
));*/
fixedFar ? fixedFar : 1000.0 * fovFactor, // far
fixedFar ? fixedFar/2 : 500.0 * fovFactor, // fogstart
fixedFar ? fixedFar : 1000.0 * fovFactor // fogend
));
selectedCamera =0;
selectedList=0;
cameras[selectedList][selectedCamera]->setProjection();
}
@ -2388,6 +2398,7 @@ void SDCameras::nextCamera(int list){
cameraHasChanged = true;
cameras[selectedList][selectedCamera]->setProjection();
this->screen->de_activateMirror();

View file

@ -40,6 +40,10 @@ SDScenery::SDScenery(void)
_grWrldY = 0;
_grWrldZ = 0;
_grWrldMaxSize = 0;
grWrldX = 0;
grWrldY = 0;
grWrldZ = 0;
grWrldMaxSize = 0;
_max_visibility = 0;
_nb_cloudlayer = 0;
_DynamicSkyDome = 0;

View file

@ -82,11 +82,11 @@ public:
void build(tTrack *track);
};*/
static int grWrldX;
static int grWrldY;
static int grWrldZ;
static int grWrldMaxSize;
static int grWrldX=0;
static int grWrldY=0;
static int grWrldZ = 0;
static int grWrldMaxSize=0;
static tTrack *grTrack;
class SDScenery
{
private:
@ -96,11 +96,11 @@ private:
osg::ref_ptr<osg::Group> _scenery;
osg::ref_ptr<osg::Group> _background;
int _grWrldX;
int _grWrldY;
int _grWrldZ;
int _grWrldMaxSize;
int _max_visibility;
int _grWrldX;
int _grWrldY;
int _grWrldZ;
int _grWrldMaxSize;
int _max_visibility;
int _nb_cloudlayer;
int _DynamicSkyDome;
int _SkyDomeDistance;
@ -114,14 +114,14 @@ private:
//_pits = 0;
std::string _strTexturePath;
tTrack *grTrack;
void LoadGraphicsOptions();
void LoadSkyOptions();
void CustomizePits(void);
bool LoadTrack(std::string strTrack);
//inline getGrWrldX(){return _grWrldX;}
//inline getGrWrldY(){return _grWrldX;}
public:
/* Constructor */
@ -136,6 +136,11 @@ public:
//void addTrees(SDTrees->build(tTrack *track));
void ShutdownScene(void);
//void
inline static int getWorldX(){return grWrldX;}
inline static int getWorldY(){return grWrldY;}
inline static int getWorldZ(){return grWrldZ;}
inline static int getWorldMaxSize(){return grWrldMaxSize;}
//osg::Node* getPreRoot() { return pre_root.get(); }

View file

@ -108,6 +108,8 @@ void SDView::Init(tSituation *s)
loadParams(s);
}
/* Update screen display */
void SDView::update(tSituation *s, const SDFrameInfo* frameInfo)
{