From 8b0110fe5d40abd58c6993a8fac39ef9fc076921 Mon Sep 17 00:00:00 2001 From: curt Date: Fri, 12 Feb 1999 01:46:29 +0000 Subject: [PATCH] Updates and fixes from Friedemann. --- Cockpit/panel.cxx | 344 +++++++++++++++++++++++++--------------------- Cockpit/panel.hxx | 14 +- 2 files changed, 201 insertions(+), 157 deletions(-) diff --git a/Cockpit/panel.cxx b/Cockpit/panel.cxx index 166bec377..0456f1e2e 100644 --- a/Cockpit/panel.cxx +++ b/Cockpit/panel.cxx @@ -108,6 +108,7 @@ static float texCoord[180][2]; static arthor myarthor; static int n1; static int n2; + static GLfloat Wings[] = {-1.25, -28.125, 1.255, -28.125, 1.255, 28.125, -1.25, 28.125}; static GLfloat Elevator[] = { 3.0, -10.9375, 4.5, -10.9375, 4.5, 10.9375, 3.0, 10.9375}; static GLfloat Rudder[] = {2.0, -0.45, 10.625, -0.45, 10.625, 0.55, 2.0, 0.55}; @@ -452,7 +453,7 @@ fgInitTurnCoordinator(&Turny); xglPushMatrix(); xglLoadIdentity(); xglViewport(0, 0, 640, 480); - glOrtho(0, 640, 0, 480, 1, -1); + xglOrtho(0, 640, 0, 480, 1, -1); xglMatrixMode(GL_MODELVIEW); xglPushMatrix(); xglLoadIdentity(); @@ -507,28 +508,26 @@ fgInitTurnCoordinator(&Turny); } void fgPanelReInit( int x, int y, int finx, int finy){ - // fgVIEW *v; fgOPTIONS *o; int i; GLint buffer; o = ¤t_options; - // v = ¤t_view; Xzoom = (float)((float)(current_view.get_winWidth())/1024); Yzoom = (float)((float)(current_view.get_winHeight())/768); // save the current buffer state - glGetIntegerv(GL_DRAW_BUFFER, &buffer); + xglGetIntegerv(GL_DRAW_BUFFER, &buffer); // and enable both buffers for writing - glDrawBuffer(GL_FRONT_AND_BACK); + xglDrawBuffer(GL_FRONT_AND_BACK); xglMatrixMode(GL_PROJECTION); xglPushMatrix(); xglLoadIdentity(); xglViewport(0, 0, 640, 480); - glOrtho(0, 640, 0, 480, 1, -1); + xglOrtho(0, 640, 0, 480, 1, -1); xglMatrixMode(GL_MODELVIEW); xglPushMatrix(); xglLoadIdentity(); @@ -543,7 +542,7 @@ void fgPanelReInit( int x, int y, int finx, int finy){ xglDrawPixels(finx - x, finy - y, GL_RGB, GL_UNSIGNED_BYTE, (GLvoid *)(img2->data)); // restore original buffer state - glDrawBuffer(buffer); + xglDrawBuffer( buffer ); } void fgPanelUpdate ( void ) { @@ -564,7 +563,7 @@ void fgPanelUpdate ( void ) { xglMatrixMode(GL_PROJECTION); xglPushMatrix(); xglLoadIdentity(); - glOrtho(0, 640, 0, 480, 10, -10); + xglOrtho(0, 640, 0, 480, 10, -10); xglMatrixMode(GL_MODELVIEW); xglPushMatrix(); xglLoadIdentity(); @@ -580,24 +579,26 @@ void fgPanelUpdate ( void ) { for(i=0;ivertices); - alpha=((((float)((var[pointer.variable]) - (pointer.value1))) / (pointer.value2 - pointer.value1))*(pointer.alpha2 - pointer.alpha1) + pointer.alpha1); + alpha=((((float)((var[pointer->variable]) - (pointer->value1))) / (pointer->value2 - pointer->value1))* (pointer->alpha2 - pointer->alpha1) + pointer->alpha1); - if (alpha < pointer.alpha1) - alpha = pointer.alpha1; - if (alpha > pointer.alpha2) - alpha = pointer.alpha2; + if (alpha < pointer->alpha1) + alpha = pointer->alpha1; + if (alpha > pointer->alpha2) + alpha = pointer->alpha2; xglMatrixMode(GL_MODELVIEW); xglPushMatrix(); xglLoadIdentity(); xglDisable(GL_TEXTURE_2D); - xglTranslatef(pointer.XPos, pointer.YPos, 0); + xglTranslatef(pointer->XPos, pointer->YPos, 0); xglRotatef(-alpha, 0.0, 0.0, 1.0); xglColor4f(1.0, 1.0, 1.0, 1.0); glDrawArrays(GL_POLYGON, 0, 10); - return alpha; + pointer->tape[0] = pointer->tape[1]; + pointer->tape[1] = alpha; xglEnable(GL_TEXTURE_2D); glDisableClientState(GL_VERTEX_ARRAY); } @@ -886,9 +889,9 @@ float UpdatePointer(Pointer pointer){ // fgEraseArea - 'Erases' a drawn Polygon by overlaying it with a textured // area. Shall be a method of a panel class once. -void fgEraseArea(GLfloat *array, int NumVerti, GLfloat texXPos, - GLfloat texYPos, GLfloat XPos, GLfloat YPos, - int Texid, float ScaleFactor) +void fgEraseArea( GLfloat *array, int NumVerti, GLfloat texXPos, + GLfloat texYPos, GLfloat XPos, GLfloat YPos, + int Texid, float ScaleFactor = 1) { int i, j; int n; @@ -975,88 +978,95 @@ pointer->vertices[19] = pointer->vertices[3]; void fgUpdateTurnCoordinator(TurnCoordinator *turn){ int n; -glDisable(GL_LIGHTING); -glDisable(GL_BLEND); -glEnable(GL_TEXTURE_2D); +xglDisable(GL_LIGHTING); +xglDisable(GL_BLEND); +xglEnable(GL_TEXTURE_2D); - turn->alpha = (get_sideslip() / 1.5) * 56; + turn->alpha = (get_sideslip() / 1.5) * 560; + if(turn->alpha > 56){ + turn->alpha = 56; + } + if(turn->alpha < -56){ + turn->alpha = -56; + } + turn->PlaneAlpha = get_roll(); xglTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); xglTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); -glMatrixMode(GL_MODELVIEW); -glLoadIdentity(); -glTranslatef(turn->BallXPos, turn->BallYPos, 0.0); -glTranslatef(0.75 * sin(turn->alphahist * DEG_TO_RAD) * 31, 0.3 * (39 - (cos(turn->alphahist * DEG_TO_RAD) * 39)), 0.0); +xglMatrixMode(GL_MODELVIEW); +xglLoadIdentity(); +xglTranslatef(turn->BallXPos, turn->BallYPos, 0.0); +xglTranslatef(0.75 * sin(turn->alphahist * DEG_TO_RAD) * 31, 0.3 * (39 - (cos(turn->alphahist * DEG_TO_RAD) * 39)), 0.0); fgEraseArea(turn->vertices, 72, turn->BallTexXPos + ((0.75 * sin(turn->alphahist * DEG_TO_RAD) * 31) / 0.625), turn->BallTexYPos + ((0.3 * (39 - (cos(turn->alphahist * DEG_TO_RAD) * 39))) / 0.625), turn->BallXPos + (0.75 * sin(turn->alphahist * DEG_TO_RAD) * 31), turn->BallYPos + (0.3 * (39 - (cos(turn->alphahist * DEG_TO_RAD) * 39))), 1); -glDisable(GL_TEXTURE_2D); -glEnable(GL_BLEND); -glBlendFunc(GL_ONE_MINUS_DST_COLOR, GL_ONE); -glMatrixMode(GL_MODELVIEW); -glLoadIdentity(); -glTranslatef(turn->BallXPos, turn->BallYPos, 0.0); -glTranslatef(0.75 * sin(turn->alpha * DEG_TO_RAD) * 31, 0.3 * (39 - (cos(turn->alpha * DEG_TO_RAD) * 39)), 0.0); -glBegin(GL_POLYGON); -glColor3f(0.8, 0.8, 0.8); +xglDisable(GL_TEXTURE_2D); +xglEnable(GL_BLEND); +xglBlendFunc(GL_ONE_MINUS_DST_COLOR, GL_ONE); +xglMatrixMode(GL_MODELVIEW); +xglLoadIdentity(); +xglTranslatef(turn->BallXPos, turn->BallYPos, 0.0); +xglTranslatef(0.75 * sin(turn->alpha * DEG_TO_RAD) * 31, 0.3 * (39 - (cos(turn->alpha * DEG_TO_RAD) * 39)), 0.0); +xglBegin(GL_POLYGON); +xglColor3f(0.8, 0.8, 0.8); for(i=0;i<36;i++){ -glVertex2f(turn->vertices[2 * i], turn->vertices[(2 * i) + 1]); +xglVertex2f(turn->vertices[2 * i], turn->vertices[(2 * i) + 1]); } -glEnd(); +xglEnd(); -glDisable(GL_TEXTURE_2D); -glDisable(GL_BLEND); +xglDisable(GL_TEXTURE_2D); +xglDisable(GL_BLEND); -glMatrixMode(GL_MODELVIEW); -glLoadIdentity(); -glTranslatef(turn->PlaneXPos, turn->PlaneYPos, 0.0); -glRotatef(turn->rollhist * RAD_TO_DEG + 90, 0.0, 0.0, 1.0); +xglMatrixMode(GL_MODELVIEW); +xglLoadIdentity(); +xglTranslatef(turn->PlaneXPos, turn->PlaneYPos, 0.0); +xglRotatef(turn->rollhist * RAD_TO_DEG + 90, 0.0, 0.0, 1.0); fgEraseArea(Wings, 8, turn->PlaneTexXPos, turn->PlaneTexYPos, turn->PlaneXPos, turn->PlaneYPos, 1); fgEraseArea(Elevator, 8, turn->PlaneTexXPos, turn->PlaneTexYPos, turn->PlaneXPos, turn->PlaneYPos, 1); fgEraseArea(Rudder, 8, turn->PlaneTexXPos, turn->PlaneTexYPos, turn->PlaneXPos, turn->PlaneYPos, 1); -glLoadIdentity(); -glTranslatef(turn->PlaneXPos, turn->PlaneYPos, 0.0); -glRotatef(-get_roll() * RAD_TO_DEG + 90, 0.0, 0.0, 1.0); +xglLoadIdentity(); +xglTranslatef(turn->PlaneXPos, turn->PlaneYPos, 0.0); +xglRotatef(-get_roll() * RAD_TO_DEG + 90, 0.0, 0.0, 1.0); -glBegin(GL_POLYGON); -glColor3f(1.0, 1.0, 1.0); +xglBegin(GL_POLYGON); +xglColor3f(1.0, 1.0, 1.0); for(i=0;i<90;i++){ -glVertex2f(cos(i * 4 * DEG_TO_RAD) * 5, sin(i * 4 * DEG_TO_RAD) * 5); +xglVertex2f(cos(i * 4 * DEG_TO_RAD) * 5, sin(i * 4 * DEG_TO_RAD) * 5); } -glEnd(); - -glBegin(GL_POLYGON); -glVertex2f(Wings[0], Wings[1]); -glVertex2f(Wings[2], Wings[3]); -glVertex2f(Wings[4], Wings[5]); -glVertex2f(Wings[6], Wings[7]); -glVertex2f(Wings[0], Wings[1]); -glEnd(); - -glBegin(GL_POLYGON); -glVertex2f(Elevator[0], Elevator[1]); -glVertex2f(Elevator[2], Elevator[3]); -glVertex2f(Elevator[4], Elevator[5]); -glVertex2f(Elevator[6], Elevator[7]); -glVertex2f(Elevator[0], Elevator[1]); -glEnd(); - -glBegin(GL_POLYGON); -glVertex2f(Rudder[0], Rudder[1]); -glVertex2f(Rudder[2], Rudder[3]); -glVertex2f(Rudder[4], Rudder[5]); -glVertex2f(Rudder[6], Rudder[7]); -glVertex2f(Rudder[0], Rudder[1]); -glEnd(); +xglEnd(); + +xglBegin(GL_POLYGON); +xglVertex2f(Wings[0], Wings[1]); +xglVertex2f(Wings[2], Wings[3]); +xglVertex2f(Wings[4], Wings[5]); +xglVertex2f(Wings[6], Wings[7]); +xglVertex2f(Wings[0], Wings[1]); +xglEnd(); + +xglBegin(GL_POLYGON); +xglVertex2f(Elevator[0], Elevator[1]); +xglVertex2f(Elevator[2], Elevator[3]); +xglVertex2f(Elevator[4], Elevator[5]); +xglVertex2f(Elevator[6], Elevator[7]); +xglVertex2f(Elevator[0], Elevator[1]); +xglEnd(); + +xglBegin(GL_POLYGON); +xglVertex2f(Rudder[0], Rudder[1]); +xglVertex2f(Rudder[2], Rudder[3]); +xglVertex2f(Rudder[4], Rudder[5]); +xglVertex2f(Rudder[6], Rudder[7]); +xglVertex2f(Rudder[0], Rudder[1]); +xglEnd(); turn->alphahist = turn->alpha; turn->PlaneAlphaHist = turn->PlaneAlpha; turn->rollhist = -get_roll(); -glDisable(GL_BLEND); +xglDisable(GL_BLEND); } void fgInitTurnCoordinator(TurnCoordinator *turn){ @@ -1068,10 +1078,33 @@ turn->vertices[(2 * n) + 1] = sin(10 * n * DEG_TO_RAD) * turn->BallRadius; } } +void DrawScale(float XPos, float YPos, float InnerRadius, float OuterRadius, float alpha1, float alpha2, int steps, float LineWidth, float red, float green, float blue){ + int i; + float diff = (alpha2 - alpha1) / (float)(steps); + + xglMatrixMode(GL_MODELVIEW); + xglLoadIdentity(); + + xglTranslatef(XPos, YPos, 0.0); + xglRotatef(-alpha1, 0.0, 0.0, 1.0); + + xglLineWidth(LineWidth); + xglColor3f(red, green, blue); + + xglBegin(GL_LINES); + for(i=0;i < steps; i++){ + xglVertex3f(sin(i * diff * DEG_TO_RAD) * OuterRadius, cos(i * diff * DEG_TO_RAD) * OuterRadius, 0.0); + xglVertex3f(sin(i * diff * DEG_TO_RAD) * InnerRadius, cos(i * diff * DEG_TO_RAD) * InnerRadius, 0.0); + } + xglEnd(); + + xglLoadIdentity(); + } + // PrintMatrix - routine to print the current modelview matrix. void PrintMatrix( void){ -glGetDoublev(GL_MODELVIEW_MATRIX, mvmatrix); +xglGetDoublev(GL_MODELVIEW_MATRIX, mvmatrix); printf("matrix2 = %f %f %f %f \n", mvmatrix[0], mvmatrix[1], mvmatrix[2], mvmatrix[3]); printf(" %f %f %f %f \n", mvmatrix[4], mvmatrix[5], mvmatrix[6], mvmatrix[7]); printf(" %f %f %f %f \n", mvmatrix[8], mvmatrix[9], mvmatrix[10], mvmatrix[11]); @@ -1079,6 +1112,9 @@ printf(" %f %f %f %f \n", mvmatrix[12], mvmatrix[13], mvmatrix[14], mvma } // $Log$ +// Revision 1.15 1999/02/12 01:46:29 curt +// Updates and fixes from Friedemann. +// // Revision 1.14 1999/02/02 20:13:33 curt // MSVC++ portability changes by Bernie Bright: // diff --git a/Cockpit/panel.hxx b/Cockpit/panel.hxx index 9b1a0224d..91e785aca 100644 --- a/Cockpit/panel.hxx +++ b/Cockpit/panel.hxx @@ -58,7 +58,7 @@ typedef struct { float length; float width; float angle; - float hist; + float tape[2]; float value1; float value2; float alpha1; @@ -103,10 +103,15 @@ void fgPanelUpdate( void); void horizon( arthor hor); void fgHorizonInit( arthor hor); void CreatePointer(Pointer *pointer); -float UpdatePointer(Pointer pointer); -void fgEraseArea(GLfloat *array, int NumVerti, GLfloat texXPos, GLfloat texYPos, GLfloat XPos, GLfloat YPos, int Texid, float ScaleFactor = 1); +void UpdatePointer(Pointer *pointer); +void fgEraseArea(GLfloat *array, int NumVerti, GLfloat texXPos, + GLfloat texYPos, GLfloat XPos, GLfloat YPos, + int Texid, float ScaleFactor = 1); void fgUpdateTurnCoordinator(TurnCoordinator *turn); void fgInitTurnCoordinator(TurnCoordinator *turn); +void DrawScale(float XPos, float YPos, float InnerRadius, float OuterRadius, + float alpha1, float alpha2, int steps, float LineWidth, + float red, float green, float blue); void PrintMatrix( void); @@ -115,6 +120,9 @@ void PrintMatrix( void); // $Log$ +// Revision 1.6 1999/02/12 01:46:30 curt +// Updates and fixes from Friedemann. +// // Revision 1.5 1999/01/07 19:25:55 curt // Updates from Friedemann Reinhard. // -- 2.39.5