00001
00006 #include <qcursor.h>
00007 #include <qfont.h>
00008
00009 #include <math.h>
00010 #include <iostream>
00011 using namespace std;
00012
00013 #include "GLWireframe.h"
00014
00015
00030 GLWireframe::GLWireframe( QWidget* parent, const char* name, QGLWidget *share, WFlags f, Spur** spurenliste, long int anzahlSpuren, Liste *kreuzungsliste ) : QGLWidget( parent, name, share, f )
00031 {
00032 clear();
00033
00034 spurenliste_ = spurenliste;
00035 anzahlSpuren_ = anzahlSpuren;
00036 kreuzungsliste_ = kreuzungsliste;
00037
00038 erzeugeParameter();
00039 ladeWerkseinstellungen();
00040 initializeGL();
00041 }
00042
00043
00044
00045
00046
00053 void GLWireframe::erzeugeParameter()
00054 {
00055
00056 int i(0);
00057
00058 for( i = 0; i < anzahlSpuren_; i++ )
00059 {
00060 if( maximaleKoordinaten_[0] < spurenliste_[i]->gibKoordinaten().x )
00061 maximaleKoordinaten_[0] = spurenliste_[i]->gibKoordinaten().x;
00062 if( maximaleKoordinaten_[1] < spurenliste_[i]->gibKoordinaten().y )
00063 maximaleKoordinaten_[1] = spurenliste_[i]->gibKoordinaten().y;
00064 if( maximaleKoordinaten_[2] < spurenliste_[i]->gibKoordinaten().z )
00065 maximaleKoordinaten_[2] = spurenliste_[i]->gibKoordinaten().z;
00066
00067 if( minimaleKoordinaten_[0] > spurenliste_[i]->gibKoordinaten().x )
00068 minimaleKoordinaten_[0] = spurenliste_[i]->gibKoordinaten().x;
00069 if( minimaleKoordinaten_[1] > spurenliste_[i]->gibKoordinaten().y )
00070 minimaleKoordinaten_[1] = spurenliste_[i]->gibKoordinaten().y;
00071 if( minimaleKoordinaten_[2] > spurenliste_[i]->gibKoordinaten().z )
00072 minimaleKoordinaten_[2] = spurenliste_[i]->gibKoordinaten().z;
00073 }
00074
00075 if( anzahlSpuren_!= 0 ){
00076
00077 verschiebungsKoordinaten_[0] = (maximaleKoordinaten_[0] + minimaleKoordinaten_[0]) / 2;
00078 verschiebungsKoordinaten_[1] = (maximaleKoordinaten_[1] + minimaleKoordinaten_[1]) / 2;
00079 verschiebungsKoordinaten_[2] = (maximaleKoordinaten_[2] + minimaleKoordinaten_[2]) / 2;
00080 }
00081 }
00082
00083
00084
00085
00086
00107 GLWireframe::GLWireframe( QWidget* parent, const char* name, QGLWidget *share, WFlags f , double xRotD, double yRotD, double zRotD,
00108 double xKameraD, double yKameraD, double zKameraD, Spur** spurenliste, long int anzahlSpuren, Liste *kreuzungsliste ) : QGLWidget( parent, name, share, f )
00109 {
00110 clear();
00111
00112 spurenliste_ = spurenliste;
00113 anzahlSpuren_ = anzahlSpuren;
00114 kreuzungsliste_ = kreuzungsliste;
00115
00116 standardxRot_ = xRotD;
00117 standardyRot_ = yRotD;
00118 standardzRot_ = zRotD;
00119
00120 standardpunktKamera_[0] = xKameraD;
00121 standardpunktKamera_[1] = yKameraD;
00122 standardpunktKamera_[2] = zKameraD;
00123
00124 standardpunktReferenz_[0] = xKameraD;
00125 standardpunktReferenz_[1] = yKameraD;
00126 standardpunktReferenz_[2] = zKameraD;
00127
00128 standardvectorKameraOben_[0] = 0;
00129 standardvectorKameraOben_[1] = 0;
00130 standardvectorKameraOben_[2] = 1;
00131
00132 erzeugeParameter();
00133 ladeStandardwerte();
00134 initializeGL();
00135 }
00136
00137
00138
00139
00140
00147 GLWireframe::~GLWireframe(){
00148
00149 }
00150
00151
00152
00153
00154
00161 void GLWireframe::paintGL()
00162 {
00163 Fahrzeug *fahrzeug;
00164 int i = 0;
00165
00166 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
00167 transform();
00168
00169 glTranslatef( -1*verschiebungsKoordinaten_[0], -1*verschiebungsKoordinaten_[1],-1*verschiebungsKoordinaten_[2] );
00170
00171
00172 glCallList( list_ );
00173
00174
00175 for( i = 0; i < anzahlSpuren_; i++ )
00176 zeichneHaltelinie( spurenliste_[i] );
00177
00178
00179 if( fahrzeugliste_ != 0 )
00180 {
00181 fahrzeugliste_->geheZuErsten();
00182 while( !fahrzeugliste_->istEnde() )
00183 {
00184 fahrzeugliste_->geheZuNaechsten();
00185 fahrzeug = (Fahrzeug *) fahrzeugliste_->gibDaten();
00186 if( !fahrzeug->sollEntferntWerden() )
00187 zeichneFahrzeug( fahrzeug );
00188 }
00189 }
00190
00191 glTranslatef( verschiebungsKoordinaten_[0], verschiebungsKoordinaten_[1],verschiebungsKoordinaten_[2] );
00192 }
00193
00194
00195
00196
00197
00207 void GLWireframe::initializeGL()
00208 {
00209
00210 glClearColor( 1.0, 1.0, 1.0, 1.0 );
00211 glEnable( GL_NORMALIZE );
00212
00213 if( anzahlSpuren_ != 0 ){
00214
00215 erzeugeZeichenliste();
00216 }
00217
00218
00219
00220
00221
00222
00223
00224
00225
00226
00227
00228
00229
00230
00231
00232
00233
00234
00235
00236
00237
00238
00239
00240
00241
00242 }
00243
00244
00245
00246
00247
00259 void GLWireframe::resizeGL( int breite, int hoehe )
00260 {
00261 if( breite > hoehe )
00262 hoehe = breite;
00263 else
00264 breite = hoehe;
00265
00266 glViewport( 0, 0, breite, hoehe );
00267 glMatrixMode(GL_PROJECTION);
00268 glLoadIdentity();
00269 gluPerspective( 90.0, 1, 0, 20.0 );
00270
00271
00272
00273 #ifndef _WIN32 && #ifndef WIN32 && #ifndef __WIN32__
00274 glFrustum( -1.0, 1.0, -1.0, 1.0, 1.0, 10000.0 );
00275 #endif
00276
00277 glMatrixMode(GL_MODELVIEW);
00278 glLoadIdentity();
00279 glTranslatef( 0.0, 0.0, -40.0 );
00280 }
00281
00282
00283
00284
00285
00292 void GLWireframe::transform()
00293 {
00294 glLoadIdentity();
00295
00296
00297 gluLookAt(punktKamera_[0],punktKamera_[1], punktKamera_[2]+(gibMaximaleAusdehnung()),
00298 punktReferenz_[0], punktReferenz_[1], punktReferenz_[2],
00299 vectorKameraOben_[0], vectorKameraOben_[1], vectorKameraOben_[2] );
00300
00301
00302 glRotatef( xRot_, 1.0, 0.0, 0.0 );
00303 glRotatef( yRot_, 0.0, 1.0, 0.0 );
00304 glRotatef( zRot_, 0.0, 0.0, 1.0 );
00305 }
00306
00307
00308
00309
00310
00319 void GLWireframe::setzeXRotation( double grad )
00320 {
00321 xRot_ = (GLfloat)fmod(grad, 360.0);
00322
00323 updateGL();
00324 }
00325
00326
00327
00328
00329
00338 void GLWireframe::setzeYRotation( double grad )
00339 {
00340 yRot_ = (GLfloat)fmod(grad, 360.0);
00341
00342 updateGL();
00343 }
00344
00345
00346
00347
00348
00357 void GLWireframe::setzeZRotation( double grad )
00358 {
00359 zRot_ = (GLfloat)fmod(grad, 360.0);
00360
00361 updateGL();
00362 }
00363
00364
00365
00366
00367
00378 void GLWireframe::setzeRotationImpulse( double x, double y, double z )
00379 {
00380 setzeXRotation( xRot_ + 180*x );
00381 setzeYRotation( yRot_ + 180*y );
00382 setzeZRotation( zRot_ - 180*z );
00383 }
00384
00385
00386
00387
00388
00397 void GLWireframe::setzeZoom( double aenderung )
00398 {
00399 aenderung = aenderung / 100 * gibMaximaleAusdehnung();
00400
00401 punktKamera_[2] = punktKamera_[2] - aenderung;
00402 punktReferenz_[2] = punktReferenz_[2] - aenderung;
00403
00404 updateGL();
00405 }
00406
00407
00408
00409
00410
00420 void GLWireframe::setzeTranslationImpulse( double x, double y )
00421 {
00422 x = x / 700 * gibMaximaleAusdehnung();
00423 y = y / 700 * gibMaximaleAusdehnung();
00424
00425 punktKamera_[0] = punktKamera_[0] - x;
00426 punktKamera_[1] = punktKamera_[1] + y;
00427
00428 punktReferenz_[0] = punktReferenz_[0] - x;
00429 punktReferenz_[1] = punktReferenz_[1] + y;
00430
00431 updateGL();
00432 }
00433
00434
00435
00436
00437
00446 void GLWireframe::mousePressEvent( QMouseEvent *event )
00447 {
00448 event->accept();
00449 oldPos_ = event->pos();
00450 }
00451
00452
00453
00454
00455
00464 void GLWireframe::mouseReleaseEvent( QMouseEvent *event )
00465 {
00466 event->accept();
00467 oldPos_ = event->pos();
00468 }
00469
00470
00471
00472
00473
00482 void GLWireframe::mouseMoveEvent( QMouseEvent *event )
00483 {
00484 event->accept();
00485
00486 double dx = event->x() - oldPos_.x();
00487 double dy = event->y() - oldPos_.y();
00488
00489 oldPos_ = event->pos();
00490
00491 double rx = dx / width();
00492 double ry = dy / height();
00493
00494 if( maussteuerung_ == 1 )
00495 {
00496 if ( event->state() == (LeftButton | RightButton) )
00497 setzeRotationImpulse( -ry, rx, 0 );
00498 else if ( event->state() == LeftButton )
00499 {
00500 setzeZoom( dy );
00501 setzeRotationImpulse( 0, 0, -rx );
00502 }
00503 else if ( event->state() == RightButton )
00504 setzeTranslationImpulse( dx, dy );
00505 }
00506 else
00507 {
00508 if ( event->state() == MidButton )
00509 setzeRotationImpulse( 0, 0, -rx );
00510 else if ( event->state() == LeftButton )
00511 setzeTranslationImpulse( dx, dy );
00512 else if ( event->state() == RightButton )
00513 setzeRotationImpulse( -ry, rx, 0 );
00514 }
00515 }
00516
00517
00518
00519
00528 void GLWireframe::wheelEvent( QWheelEvent *event )
00529 {
00530 if( maussteuerung_ == 2 )
00531 {
00532 event->accept();
00533 setzeZoom( event->delta() / 100 );
00534 }
00535 }
00536
00537
00546 double GLWireframe::gibXRot()
00547 {
00548 return xRot_;
00549 }
00550
00551
00552
00553
00554
00563 double GLWireframe::gibYRot()
00564 {
00565 return yRot_;
00566 }
00567
00568
00569
00570
00571
00580 double GLWireframe::gibZRot( )
00581 {
00582 return zRot_;
00583 }
00584
00585
00586
00587
00588
00597 double GLWireframe::gibXKamera( )
00598 {
00599 return punktKamera_[0];
00600 }
00601
00602
00603
00604
00605
00614 double GLWireframe::gibYKamera( )
00615 {
00616 return punktKamera_[1];
00617 }
00618
00619
00620
00621
00622
00631 double GLWireframe::gibZKamera( )
00632 {
00633 return punktKamera_[2];
00634 }
00635
00636
00637
00638
00639
00647 void GLWireframe::zeichne( )
00648 {
00649 updateGL();
00650 }
00651
00652
00653
00654
00655
00662 void GLWireframe::clear()
00663 {
00664 maximaleKoordinaten_[0] = 0;
00665 maximaleKoordinaten_[1] = 0;
00666 maximaleKoordinaten_[2] = 0;
00667 minimaleKoordinaten_[0] = 5000;
00668 minimaleKoordinaten_[1] = 5000;
00669 minimaleKoordinaten_[2] = 5000;
00670 anzahlSpuren_ = 0;
00671 fahrzeugliste_ = 0;
00672 spurenliste_ = 0;
00673 kreuzungsliste_ = 0;
00674 maussteuerung_ = 2;
00675 list_ = 0;
00676 }
00677
00678
00679
00686 void GLWireframe::setzeMaussteuerung( int maussteuerung )
00687 {
00688 if( maussteuerung == 1 || maussteuerung == 2 )
00689 {
00690 maussteuerung_ = maussteuerung;
00691 }
00692 }
00693
00694
00695
00696
00705 double GLWireframe::gibMaximaleAusdehnung( )
00706 {
00707 double ausdehnung(0);
00708
00709 ausdehnung = maximaleKoordinaten_[0] - minimaleKoordinaten_[0];
00710 if( ausdehnung < maximaleKoordinaten_[1] - minimaleKoordinaten_[1] )
00711 ausdehnung = maximaleKoordinaten_[1] - minimaleKoordinaten_[1];
00712 if( ausdehnung < maximaleKoordinaten_[2] - minimaleKoordinaten_[2] )
00713 ausdehnung = maximaleKoordinaten_[2] - minimaleKoordinaten_[2];
00714
00715 return ausdehnung;
00716 }
00717
00718
00719
00720
00721
00730 void GLWireframe::ladeStandardwerte()
00731 {
00732 xRot_ = standardxRot_;
00733 yRot_ = standardyRot_;
00734 zRot_ = standardzRot_;
00735
00736 punktKamera_[0] = standardpunktKamera_[0];
00737 punktKamera_[1] = standardpunktKamera_[1];
00738 punktKamera_[2] = standardpunktKamera_[2];
00739
00740 punktReferenz_[0] = standardpunktReferenz_[0];
00741 punktReferenz_[1] = standardpunktReferenz_[1];
00742 punktReferenz_[2] = standardpunktReferenz_[2];
00743
00744 vectorKameraOben_[0] = standardvectorKameraOben_[0];
00745 vectorKameraOben_[1] = standardvectorKameraOben_[1];
00746 vectorKameraOben_[2] = standardvectorKameraOben_[2];
00747
00748 updateGL();
00749 }
00750
00751
00752
00753
00754
00763 void GLWireframe::ladeWerkseinstellungen()
00764 {
00765 standardxRot_ = 0;
00766 standardyRot_ = 0;
00767 standardzRot_ = 0;
00768
00769 erzeugeParameter();
00770
00771 standardpunktKamera_[0] = 0;
00772 standardpunktKamera_[1] = 1000;
00773 standardpunktKamera_[2] = 200;
00774
00775 standardpunktReferenz_[0] = 0;
00776 standardpunktReferenz_[1] = 1000;
00777 standardpunktReferenz_[2] = 0;
00778
00779 standardvectorKameraOben_[0] = 0;
00780 standardvectorKameraOben_[1] = 1;
00781 standardvectorKameraOben_[2] = 0;
00782
00783 ladeStandardwerte();
00784 }
00785
00786
00787
00788
00789
00798 void GLWireframe::erzeugeZeichenliste()
00799 {
00800 Kreuzung *kreuzung;
00801 int i = 0;
00802
00803
00804 list_ = glGenLists( 1 );
00805 glNewList( list_, GL_COMPILE );
00806
00807
00808 for( i = 0; i < anzahlSpuren_; i++ )
00809 zeichneSpur( spurenliste_[i] );
00810
00811
00812 for( i = 0; i < anzahlSpuren_; i++ )
00813 {
00814 if( spurenliste_[i]->gibWahrscheinlichkeit( LINKS ) != 0 )
00815 zeichneSpurverbindung( spurenliste_[i], spurenliste_[i]->gibNaechsteSpur( LINKS ) );
00816
00817 if( spurenliste_[i]->gibWahrscheinlichkeit( MITTE ) != 0 )
00818 zeichneSpurverbindung( spurenliste_[i], spurenliste_[i]->gibNaechsteSpur( MITTE ) );
00819
00820 if( spurenliste_[i]->gibWahrscheinlichkeit( RECHTS ) != 0 )
00821 zeichneSpurverbindung( spurenliste_[i], spurenliste_[i]->gibNaechsteSpur( RECHTS ) );
00822 }
00823
00824
00825 if( kreuzungsliste_ != 0 )
00826 {
00827 kreuzungsliste_->geheZuErsten();
00828 while( !kreuzungsliste_->istEnde() )
00829 {
00830 kreuzungsliste_->geheZuNaechsten();
00831 kreuzung = (Kreuzung *) kreuzungsliste_->gibDaten();
00832 zeichneKreuzung( kreuzung );
00833 }
00834 }
00835
00836
00837 glEndList();
00838 }
00839
00840
00841
00842
00843
00853 void GLWireframe::zeichneSpur(Spur *spur)
00854 {
00855 double laenge,breite = 20.0;
00856 int ausrichtung, richtung, pfeil;
00857 Koordinaten *grau = new Koordinaten();
00858 grau->x = grau->y = grau->z = 76.0;
00859 Koordinaten *weiss = new Koordinaten();
00860 weiss->x = weiss->y = weiss->z = 204.0;
00861
00862 laenge = spur->gibLaenge()*10;
00863 ausrichtung = spur->gibAusrichtung();
00864 richtung = spur->gibRichtung();
00865 pfeil = spur->gibAbbiegerichtung();
00866
00867
00868 Koordinaten *ursprung = new Koordinaten();
00869 *ursprung = spur->gibKoordinaten();
00870
00871
00872 glTranslated( ursprung->x, ursprung->y, ursprung->z);
00873
00874 if( ausrichtung == HOR )
00875 {
00876
00877 glBegin(GL_QUADS);
00878 setMaterialColor3d( *weiss );
00879
00880 glVertex3d( 0.0, 0.0, 0.0 );
00881 glVertex3d( laenge*richtung, 0.0, 0.0 );
00882 glVertex3d( laenge*richtung, 2.0*richtung, 0.0 );
00883 glVertex3d( 0.0, 2.0*richtung, 0.0 );
00884 glEnd();
00885
00886
00887 glBegin(GL_QUADS);
00888 setMaterialColor3d( *grau );
00889
00890 glVertex3d( 0.0, 2.0*richtung, 0.0 );
00891 glVertex3d( laenge*richtung, 2.0*richtung, 0.0 );
00892 glVertex3d( laenge*richtung, (breite-2.0)*richtung, 0.0 );
00893 glVertex3d( 0.0, (breite-2.0)*richtung, 0.0 );
00894 glEnd();
00895
00896
00897 glBegin(GL_QUADS);
00898 setMaterialColor3d( *weiss );
00899
00900 glVertex3d( 0.0, (breite-2.0)*richtung, 0.0 );
00901 glVertex3d( laenge*richtung, (breite-2.0)*richtung, 0.0 );
00902 glVertex3d( laenge*richtung, breite*richtung, 0.0 );
00903 glVertex3d( 0.0, breite*richtung, 0.0 );
00904 glEnd();
00905
00906
00907 switch( pfeil )
00908 {
00909 case MITTE:
00910 {
00911 glBegin(GL_QUADS);
00912 setMaterialColor3d( *weiss );
00913
00914 glVertex3d( (laenge-19)*richtung, (6.0)*richtung, 0.5 );
00915 glVertex3d( (laenge-8)*richtung, ((breite/2)-0.5)*richtung, 0.5 );
00916 glVertex3d( (laenge-8)*richtung, ((breite/2)+0.5)*richtung, 0.5 );
00917 glVertex3d( (laenge-19)*richtung, (breite-6.0)*richtung, 0.5 );
00918 glEnd();
00919 } break;
00920 case LINKS:
00921 {
00922 glBegin(GL_QUADS);
00923 setMaterialColor3d( *weiss );
00924
00925 glVertex3d( (laenge-15)*richtung, 4.0*richtung, 0.5 );
00926 glVertex3d( (laenge-8)*richtung, (breite-6.0)*richtung, 0.5 );
00927 glVertex3d( (laenge-8)*richtung, (breite-5.0)*richtung, 0.5 );
00928 glVertex3d( (laenge-21)*richtung, (breite-9.0)*richtung, 0.5 );
00929 glEnd();
00930 } break;
00931 case RECHTS:
00932 {
00933 glBegin(GL_QUADS);
00934 setMaterialColor3d( *weiss );
00935
00936 glVertex3d( (laenge-21)*richtung, (breite-11.0)*richtung, 0.5 );
00937 glVertex3d( (laenge-8)*richtung, 5.0*richtung, 0.5 );
00938 glVertex3d( (laenge-8)*richtung, 6.0*richtung, 0.5 );
00939 glVertex3d( (laenge-15)*richtung, (breite- 4.0)*richtung, 0.5 );
00940 glEnd();
00941 } break;
00942 default: break;
00943 }
00944 }
00945 else
00946 {
00947 glBegin(GL_QUADS);
00948 setMaterialColor3d( *weiss );
00949
00950 glVertex3d( 0.0, 0.0, 0.0 );
00951 glVertex3d( 2.0*richtung, 0.0, 0.0 );
00952 glVertex3d( 2.0*richtung, laenge*richtung, 0.0 );
00953 glVertex3d( 0.0, laenge*richtung, 0.0 );
00954 glEnd();
00955
00956
00957 glBegin(GL_QUADS);
00958 setMaterialColor3d( *grau );
00959
00960 glVertex3d( 2.0*richtung, 0.0, 0.0 );
00961 glVertex3d( (breite-2.0)*richtung, 0.0, 0.0 );
00962 glVertex3d( (breite-2.0)*richtung, laenge*richtung, 0.0 );
00963 glVertex3d( 2.0*richtung, laenge*richtung, 0.0 );
00964 glEnd();
00965
00966
00967 glBegin(GL_QUADS);
00968 setMaterialColor3d( *weiss );
00969
00970 glVertex3d( (breite-2.0)*richtung, 0.0, 0.0 );
00971 glVertex3d( breite*richtung, 0.0, 0.0 );
00972 glVertex3d( breite*richtung, laenge*richtung, 0.0 );
00973 glVertex3d( (breite-2.0)*richtung, laenge*richtung, 0.0 );
00974 glEnd();
00975
00976
00977 switch( pfeil )
00978 {
00979 case MITTE:
00980 {
00981 glBegin(GL_QUADS);
00982 setMaterialColor3d( *weiss );
00983
00984 glVertex3d( (6.0)*richtung, (laenge-19)*richtung, 0.5 );
00985 glVertex3d( (breite-6.0)*richtung, (laenge-19)*richtung, 0.5 );
00986 glVertex3d( ((breite/2)+0.5)*richtung, (laenge-8)*richtung, 0.5 );
00987 glVertex3d( ((breite/2)-0.5)*richtung, (laenge-8)*richtung, 0.5 );
00988 glEnd();
00989 } break;
00990 case RECHTS:
00991 {
00992 glBegin(GL_QUADS);
00993 setMaterialColor3d( *weiss );
00994
00995 glVertex3d( 4.0*richtung, (laenge-15.0)*richtung, 0.5 );
00996 glVertex3d( (breite-9.0)*richtung, (laenge-21.0)*richtung, 0.5 );
00997 glVertex3d( (breite-4.0)*richtung, (laenge-10.0)*richtung, 0.5 );
00998 glVertex3d( (breite-4.0)*richtung, (laenge- 9.0)*richtung, 0.5 );
00999 glEnd();
01000 } break;
01001 case LINKS:
01002 {
01003 glBegin(GL_QUADS);
01004 setMaterialColor3d( *weiss );
01005
01006 glVertex3d( 4.0*richtung, (laenge- 9.0)*richtung, 0.5 );
01007 glVertex3d( 4.0*richtung, (laenge-10.0)*richtung, 0.5 );
01008 glVertex3d( (breite-11.0)*richtung, (laenge-21.0)*richtung, 0.5 );
01009 glVertex3d( (breite- 4.0)*richtung, (laenge-15.0)*richtung, 0.5 );
01010 glEnd();
01011 } break;
01012 }
01013 }
01014
01015
01016 glTranslated( -1*ursprung->x, -1*ursprung->y, -1*ursprung->z);
01017 }
01018
01019
01020
01021
01022
01031 void GLWireframe::zeichneHaltelinie(Spur *spur)
01032 {
01033 double laenge,breite = 20.0;
01034 int richtung, zustand, ausrichtung;
01035 Koordinaten *zustandsFarbe = new Koordinaten();
01036
01037
01038 laenge = spur->gibLaenge()*10;
01039 richtung = spur->gibRichtung();
01040 ausrichtung = spur->gibAusrichtung();
01041 zustand = spur->gibEndzustand();
01042
01043
01044
01045 switch( zustand )
01046 {
01047 case ROT: { zustandsFarbe->x = 222; zustandsFarbe->y = 33; zustandsFarbe->z = 56; } break;
01048 case GELB: { zustandsFarbe->x = 247; zustandsFarbe->y = 217; zustandsFarbe->z = 54; } break;
01049 default: { zustandsFarbe->x = 0; zustandsFarbe->y = 252; zustandsFarbe->z = 69; } break;
01050 }
01051
01052 Koordinaten *ursprung = new Koordinaten();
01053 *ursprung = spur->gibKoordinaten();
01054
01055
01056 glTranslated( ursprung->x, ursprung->y, ursprung->z);
01057
01058 if( ausrichtung == HOR )
01059 {
01060 if( zustand )
01061 {
01062 glBegin(GL_QUADS);
01063 setMaterialColor3d( *zustandsFarbe );
01064
01065 glVertex3d( (laenge-4)*richtung, 2.0*richtung, 0.5 );
01066 glVertex3d( laenge*richtung, 2.0*richtung, 0.5 );
01067 glVertex3d( laenge*richtung, (breite-2.0)*richtung, 0.5 );
01068 glVertex3d( (laenge-4)*richtung, (breite-2.0)*richtung, 0.5 );
01069 glEnd();
01070 }
01071 }
01072 else
01073 {
01074 if( zustand )
01075 {
01076 glBegin(GL_QUADS);
01077 setMaterialColor3d( *zustandsFarbe );
01078
01079 glVertex3d( 2.0*richtung, (laenge-4)*richtung, 0.5 );
01080 glVertex3d( (breite-2.0)*richtung, (laenge-4)*richtung, 0.5 );
01081 glVertex3d( (breite-2.0)*richtung, laenge*richtung, 0.5 );
01082 glVertex3d( 2.0*richtung, laenge*richtung, 0.5 );
01083 glEnd();
01084 }
01085 }
01086
01087
01088 glTranslated( -1*ursprung->x, -1*ursprung->y, -1*ursprung->z);
01089 }
01090
01091
01092
01093
01094
01103 void GLWireframe::zeichneKreuzung(Kreuzung *kreuzung)
01104 {
01105 Koordinaten *nordR = new Koordinaten();
01106 nordR->x = nordR->y = nordR->z = -1;
01107 Koordinaten *nordL = new Koordinaten();
01108 nordL->x = nordL->y = nordL->z = -1;
01109 Koordinaten *westO = new Koordinaten();
01110 westO->x = westO->y = westO->z = -1;
01111 Koordinaten *westU = new Koordinaten();
01112 westU->x = westU->y = westU->z = -1;
01113 Koordinaten *suedL = new Koordinaten();
01114 suedL->x = suedL->y = suedL->z = -1;
01115 Koordinaten *suedR = new Koordinaten();
01116 suedR->x = suedR->y = suedR->z = -1;
01117 Koordinaten *ostU = new Koordinaten();
01118 ostU->x = ostU->y = ostU->z = -1;
01119 Koordinaten *ostO = new Koordinaten();
01120 ostO->x = ostO->y = ostO->z = -1;
01121
01122 Koordinaten *farbe = new Koordinaten();
01123 farbe->x = farbe->y = farbe->z = 76;
01124 bool nordFlag = FALSE,westFlag = FALSE,suedFlag = FALSE,ostFlag = FALSE;
01125 int i;
01126
01127
01128
01129 for( i = LINKS; i <= RECHTS; i++ )
01130 {
01131 if( kreuzung->gibSpur( WEST, i ) )
01132 {
01133 westFlag = TRUE;
01134
01135 if( westO->y == -1 )
01136 {
01137 *westO = kreuzung->gibSpur( WEST, i )->gibKoordinaten();
01138 westO->x += kreuzung->gibSpur( WEST, i )->gibLaenge()*10;
01139 westO->y += 20;
01140 }
01141
01142 *westU = kreuzung->gibSpur( WEST, i )->gibKoordinaten();
01143 westU->x += kreuzung->gibSpur( WEST, i )->gibLaenge()*10;
01144 }
01145 }
01146
01147
01148 for( i = LINKS; i <= RECHTS; i++ )
01149 {
01150 if( kreuzung->gibSpur( SUED, i ) )
01151 {
01152 suedFlag = TRUE;
01153
01154 if( suedL->y == -1 )
01155 {
01156 *suedL = kreuzung->gibSpur( SUED, i )->gibKoordinaten();
01157 suedL->y += kreuzung->gibSpur( SUED, i )->gibLaenge()*10;
01158 }
01159
01160 *suedR = kreuzung->gibSpur( SUED, i )->gibKoordinaten();
01161 suedR->y += kreuzung->gibSpur( SUED, i )->gibLaenge()*10;
01162 suedR->x += 20;
01163 }
01164 }
01165
01166
01167 for( i = LINKS; i <= RECHTS; i++ )
01168 {
01169 if( kreuzung->gibSpur( OST, i ) )
01170 {
01171 ostFlag = TRUE;
01172
01173 if( ostU->y == -1 )
01174 {
01175 *ostU = kreuzung->gibSpur( OST, i )->gibKoordinaten();
01176 ostU->x -= kreuzung->gibSpur( OST, i )->gibLaenge()*10;
01177 ostU->y -= 20;
01178 }
01179
01180 *ostO = kreuzung->gibSpur( OST, i )->gibKoordinaten();
01181 ostO->x -= kreuzung->gibSpur( OST, i )->gibLaenge()*10;
01182 }
01183 }
01184
01185
01186 for( i = LINKS; i <= RECHTS; i++ )
01187 {
01188 if( kreuzung->gibSpur( NORD, i ) )
01189 {
01190 nordFlag = TRUE;
01191
01192 if( nordR->y == -1 )
01193 {
01194 *nordR = kreuzung->gibSpur( NORD, i )->gibKoordinaten();
01195 nordR->y -= kreuzung->gibSpur( NORD, i )->gibLaenge()*10;
01196 }
01197
01198 *nordL = kreuzung->gibSpur( NORD, i )->gibKoordinaten();
01199 nordL->y -= kreuzung->gibSpur( NORD, i )->gibLaenge()*10;
01200 nordL->x -= 20;
01201 }
01202 }
01203
01204
01205 glBegin(GL_POLYGON);
01206 setMaterialColor3d( *farbe );
01207
01208 if( westFlag )
01209 {
01210 glVertex3d( westO->x, westO->y, westO->z );
01211 glVertex3d( westU->x, westU->y, westU->z );
01212 }
01213 if( suedFlag )
01214 {
01215 glVertex3d( suedL->x, suedL->y, suedL->z );
01216 glVertex3d( suedR->x, suedR->y, suedR->z );
01217 }
01218 if( ostFlag )
01219 {
01220 glVertex3d( ostU->x, ostU->y, ostU->z );
01221 glVertex3d( ostO->x, ostO->y, ostO->z );
01222 }
01223 if( nordFlag )
01224 {
01225 glVertex3d( nordR->x, nordR->y, nordR->z );
01226 glVertex3d( nordL->x, nordL->y, nordL->z );
01227 }
01228 glEnd();
01229 }
01230
01231
01232
01233
01234
01244 void GLWireframe::zeichneSpurverbindung(Spur *vorgaenger, Spur *nachfolger)
01245 {
01246 double breite = 20.0;
01247 double vLaenge = vorgaenger->gibLaenge()*10;
01248 int vAusrichtung = vorgaenger->gibAusrichtung();
01249 int nAusrichtung = nachfolger->gibAusrichtung();
01250 int vRichtung = vorgaenger->gibRichtung();
01251 int nRichtung = nachfolger->gibRichtung();
01252 Koordinaten *vCoord = new Koordinaten();
01253 *vCoord = vorgaenger->gibKoordinaten();
01254 Koordinaten *nCoord = new Koordinaten();
01255 *nCoord = nachfolger->gibKoordinaten();
01256 Koordinaten *farbe = new Koordinaten();
01257 farbe->x = farbe->y = farbe->z = 76;
01258
01259
01260 if( vAusrichtung == HOR )
01261 {
01262 if( nAusrichtung == HOR )
01263 {
01264 glBegin(GL_QUADS);
01265 setMaterialColor3d( *farbe );
01266
01267 glVertex3d( (vCoord->x+(vLaenge*vRichtung)), (vCoord->y), (vCoord->z) );
01268 glVertex3d( (nCoord->x), (nCoord->y), (nCoord->z) );
01269 glVertex3d( (nCoord->x), (nCoord->y+(breite*nRichtung)), (nCoord->z) );
01270 glVertex3d( (vCoord->x+(vLaenge*vRichtung)), (vCoord->y+(breite*vRichtung)), (vCoord->z) );
01271 glEnd();
01272 }
01273 else
01274 {
01275 glBegin(GL_QUADS);
01276 setMaterialColor3d( *farbe );
01277
01278 glVertex3d( (vCoord->x+(vLaenge*vRichtung)), (vCoord->y), (vCoord->z) );
01279 glVertex3d( (nCoord->x+(breite*nRichtung)), (nCoord->y), (nCoord->z) );
01280 glVertex3d( (nCoord->x), (nCoord->y), (nCoord->z) );
01281 glVertex3d( (vCoord->x+(vLaenge*vRichtung)), (vCoord->y+(breite*vRichtung)), (vCoord->z) );
01282 glEnd();
01283 }
01284 }
01285 else
01286 {
01287 if( nAusrichtung == HOR )
01288 {
01289 glBegin(GL_QUADS);
01290 setMaterialColor3d( *farbe );
01291
01292 glVertex3d( (vCoord->x), (vCoord->y+(vLaenge*vRichtung)), (vCoord->z) );
01293 glVertex3d( (vCoord->x+(breite*vRichtung)), (vCoord->y+(vLaenge*vRichtung)), (vCoord->z) );
01294 glVertex3d( (nCoord->x), (nCoord->y), (nCoord->z) );
01295 glVertex3d( (nCoord->x), (nCoord->y+(breite*nRichtung)), (nCoord->z) );
01296 glEnd();
01297 }
01298 else
01299 {
01300 glBegin(GL_QUADS);
01301 setMaterialColor3d( *farbe );
01302
01303 glVertex3d( (vCoord->x), (vCoord->y+(vLaenge*vRichtung)), (vCoord->z) );
01304 glVertex3d( (nCoord->x), (nCoord->y), (nCoord->z) );
01305 glVertex3d( (nCoord->x+(breite*nRichtung)), (nCoord->y), (nCoord->z) );
01306 glVertex3d( (vCoord->x+(breite*vRichtung)), (vCoord->y+(vLaenge*vRichtung)), (vCoord->z) );
01307 glEnd();
01308 }
01309 }
01310 }
01311
01312
01313
01314
01315
01324 void GLWireframe::zeichneFahrzeug(Fahrzeug *fahrzeug)
01325 {
01326 double laenge,breite,hoehe;
01327 int ausrichtung, richtung, bremsen, typ, weg;
01328 Koordinaten *rot = new Koordinaten();
01329 rot->x = 255.0;
01330 rot->y = rot->z = 10.0;
01331 Koordinaten *schwarz = new Koordinaten();
01332 schwarz->x = schwarz->y = schwarz->z = 10.0;
01333
01334 laenge = fahrzeug->gibLaenge()*10;
01335 bremsen = fahrzeug->istBremsend();
01336 typ = fahrzeug->gibTyp();
01337 ausrichtung = fahrzeug->gibSpur()->gibAusrichtung();
01338 richtung = fahrzeug->gibSpur()->gibRichtung();
01339 weg = fahrzeug->gibPosition()*10;
01340
01341 Koordinaten *ursprung = &fahrzeug->gibSpur()->gibKoordinaten();
01342 Koordinaten *fahrzeugPosition = new Koordinaten();
01343
01344
01345 if( ausrichtung == HOR )
01346 {
01347 fahrzeugPosition->x = ursprung->x + ( richtung * weg );
01348 if( typ == BIKE )
01349 fahrzeugPosition->y = ursprung->y + ( richtung * 7.0 );
01350 else if( typ == PKW )
01351 fahrzeugPosition->y = ursprung->y + ( richtung * 4.0 );
01352 else
01353 fahrzeugPosition->y = ursprung->y + ( richtung * 2.0 );
01354 fahrzeugPosition->z = ursprung->z;
01355 }
01356 else
01357 {
01358 if( typ == BIKE )
01359 fahrzeugPosition->x = ursprung->x + ( richtung * 7.0 );
01360 else if( typ == PKW )
01361 fahrzeugPosition->x = ursprung->x + ( richtung * 4.0 );
01362 else
01363 fahrzeugPosition->x = ursprung->x + ( richtung * 2.0 );
01364 fahrzeugPosition->y = ursprung->y + ( richtung * weg );
01365 fahrzeugPosition->z = ursprung->z;
01366 }
01367
01368 glTranslated( fahrzeugPosition->x, fahrzeugPosition->y, fahrzeugPosition->z);
01369
01370 switch( typ )
01371 {
01372 case PKW:
01373 { hoehe = 10.0;
01374 breite = 13.0;
01375
01376 if( ausrichtung == HOR )
01377 {
01378
01379 glBegin(GL_QUADS);
01380 setMaterialColor3d( fahrzeug->gibFarbe() );
01381
01382 glVertex3d( 0.0, breite*richtung, 0.0 );
01383 glVertex3d( laenge*richtung, breite*richtung, 0.0 );
01384 glVertex3d( laenge*richtung, 0.0, 0.0 );
01385 glVertex3d( 0.0, 0.0, 0.0 );
01386 glEnd();
01387
01388
01389 glBegin(GL_QUADS);
01390 setMaterialColor3d( fahrzeug->gibFarbe() );
01391
01392 glVertex3d( laenge*richtung, 0.0, 0.0 );
01393 glVertex3d( laenge*richtung, breite*richtung, 0.0 );
01394 glVertex3d( (laenge-1)*richtung, breite*richtung, 5.0 );
01395 glVertex3d( (laenge-1)*richtung, 0.0, 5.0 );
01396 glEnd();
01397
01398
01399 glBegin(GL_QUADS);
01400 setMaterialColor3d( fahrzeug->gibFarbe() );
01401
01402 glVertex3d( (laenge-1)*richtung, 0.0, 5.0 );
01403 glVertex3d( (laenge-1)*richtung, breite*richtung, 5.0 );
01404 glVertex3d( (laenge-8)*richtung, breite*richtung, 6.0 );
01405 glVertex3d( (laenge-8)*richtung, 0.0, 6.0 );
01406 glEnd();
01407
01408
01409 glBegin(GL_QUADS);
01410 setMaterialColor3d( fahrzeug->gibFarbe() );
01411
01412 glVertex3d( (laenge-8 )*richtung, 0.0, 6.0 );
01413 glVertex3d( (laenge-8 )*richtung, breite*richtung, 6.0 );
01414 glVertex3d( (laenge-11)*richtung, breite*richtung, hoehe );
01415 glVertex3d( (laenge-11)*richtung, 0.0, hoehe );
01416 glEnd();
01417
01418
01419
01420 glBegin(GL_QUADS);
01421 setMaterialColor3d( fahrzeug->gibFarbe() );
01422
01423 glVertex3d( (laenge-11)*richtung, 0.0, hoehe );
01424 glVertex3d( (laenge-11)*richtung, breite*richtung, hoehe );
01425 glVertex3d( 9.0*richtung, breite*richtung, hoehe );
01426 glVertex3d( 9.0*richtung, 0.0, hoehe );
01427 glEnd();
01428
01429
01430 glBegin(GL_QUADS);
01431 setMaterialColor3d( fahrzeug->gibFarbe() );
01432
01433 glVertex3d( 9.0*richtung, 0.0, hoehe );
01434 glVertex3d( 9.0*richtung, breite*richtung, hoehe );
01435 glVertex3d( 7.0*richtung, breite*richtung, hoehe-4 );
01436 glVertex3d( 7.0*richtung, 0.0, hoehe-4 );
01437 glEnd();
01438
01439
01440 glBegin(GL_QUADS);
01441 setMaterialColor3d( fahrzeug->gibFarbe() );
01442
01443 glVertex3d( 7.0*richtung, 0.0, hoehe-4 );
01444 glVertex3d( 7.0*richtung, breite*richtung, hoehe-4 );
01445 glVertex3d( 2.0*richtung, breite*richtung, 5.0 );
01446 glVertex3d( 2.0*richtung, 0.0, 5.0 );
01447 glEnd();
01448
01449
01450 glBegin(GL_QUADS);
01451 if( bremsen )
01452 setMaterialColor3d( *rot );
01453 else
01454 setMaterialColor3d( fahrzeug->gibFarbe() );
01455
01456 glVertex3d( 2.0*richtung, 0.0, 5.0 );
01457 glVertex3d( 2.0*richtung, breite*richtung, 5.0 );
01458 glVertex3d( 0.0, breite*richtung, 0.0 );
01459 glVertex3d( 0.0, 0.0, 0.0 );
01460 glEnd();
01461
01462
01463 glBegin(GL_POLYGON);
01464 setMaterialColor3d( fahrzeug->gibFarbe() );
01465
01466 glVertex3d( 0.0, 0.0, 0.0 );
01467 glVertex3d( laenge*richtung, 0.0, 0.0 );
01468 glVertex3d( (laenge-1 )*richtung, 0.0, 5.0 );
01469 glVertex3d( (laenge-8 )*richtung, 0.0, 6.0 );
01470 glVertex3d( (laenge-11)*richtung, 0.0, hoehe );
01471 glVertex3d( 9.0*richtung, 0.0, hoehe );
01472 glVertex3d( 7.0*richtung, 0.0, hoehe-4 );
01473 glVertex3d( 2.0*richtung, 0.0, 5.0 );
01474 glEnd();
01475
01476
01477 glBegin(GL_POLYGON);
01478 setMaterialColor3d( fahrzeug->gibFarbe() );
01479
01480 glVertex3d( 0.0, breite*richtung, 0.0 );
01481 glVertex3d( 2.0*richtung, breite*richtung, 5.0 );
01482 glVertex3d( 7.0*richtung, breite*richtung, hoehe-4 );
01483 glVertex3d( 9.0*richtung, breite*richtung, hoehe );
01484 glVertex3d( (laenge-11)*richtung, breite*richtung, hoehe );
01485 glVertex3d( (laenge-8 )*richtung, breite*richtung, 6.0 );
01486 glVertex3d( (laenge-1 )*richtung, breite*richtung, 5.0 );
01487 glVertex3d( laenge*richtung, breite*richtung, 0.0 );
01488 glEnd();
01489 }
01490 else
01491
01492 {
01493
01494 glBegin(GL_QUADS);
01495 setMaterialColor3d( fahrzeug->gibFarbe() );
01496
01497 glVertex3d( breite*richtung, 0.0, 0.0 );
01498 glVertex3d( 0.0, 0.0, 0.0 );
01499 glVertex3d( 0.0, laenge*richtung, 0.0 );
01500 glVertex3d( breite*richtung, laenge*richtung, 0.0 );
01501 glEnd();
01502
01503
01504 glBegin(GL_QUADS);
01505 setMaterialColor3d( fahrzeug->gibFarbe() );
01506
01507 glVertex3d( 0.0, laenge*richtung, 0.0 );
01508 glVertex3d( 0.0, (laenge-1)*richtung, 5.0 );
01509 glVertex3d( breite*richtung, (laenge-1)*richtung, 5.0 );
01510 glVertex3d( breite*richtung, laenge*richtung, 0.0 );
01511 glEnd();
01512
01513
01514 glBegin(GL_QUADS);
01515 setMaterialColor3d( fahrzeug->gibFarbe() );
01516
01517 glVertex3d( 0.0, (laenge-1)*richtung, 5.0 );
01518 glVertex3d( 0.0, (laenge-8)*richtung, 6.0 );
01519 glVertex3d( breite*richtung, (laenge-8)*richtung, 6.0 );
01520 glVertex3d( breite*richtung, (laenge-1)*richtung, 5.0 );
01521 glEnd();
01522
01523
01524 glBegin(GL_QUADS);
01525 setMaterialColor3d( fahrzeug->gibFarbe() );
01526
01527 glVertex3d( 0.0, (laenge-8 )*richtung, 6.0 );
01528 glVertex3d( 0.0, (laenge-11)*richtung, hoehe );
01529 glVertex3d( breite*richtung, (laenge-11)*richtung, hoehe );
01530 glVertex3d( breite*richtung, (laenge-8 )*richtung, 6.0 );
01531 glEnd();
01532
01533
01534
01535 glBegin(GL_QUADS);
01536 setMaterialColor3d( fahrzeug->gibFarbe() );
01537
01538 glVertex3d( 0.0, (laenge-11)*richtung, hoehe );
01539 glVertex3d( 0.0, 9.0*richtung, hoehe );
01540 glVertex3d( breite*richtung, 9.0*richtung, hoehe );
01541 glVertex3d( breite*richtung, (laenge-11)*richtung, hoehe );
01542 glEnd();
01543
01544
01545 glBegin(GL_QUADS);
01546 setMaterialColor3d( fahrzeug->gibFarbe() );
01547
01548 glVertex3d( 0.0, 9.0*richtung, hoehe );
01549 glVertex3d( 0.0, 7.0*richtung, hoehe-4 );
01550 glVertex3d( breite*richtung, 7.0*richtung, hoehe-4 );
01551 glVertex3d( breite*richtung, 9.0*richtung, hoehe );
01552 glEnd();
01553
01554
01555 glBegin(GL_QUADS);
01556 setMaterialColor3d( fahrzeug->gibFarbe() );
01557
01558 glVertex3d( 0.0, 7.0*richtung, hoehe-4 );
01559 glVertex3d( 0.0, 2.0*richtung, 5.0 );
01560 glVertex3d( breite*richtung, 2.0*richtung, 5.0 );
01561 glVertex3d( breite*richtung, 7.0*richtung, hoehe-4 );
01562 glEnd();
01563
01564
01565 glBegin(GL_QUADS);
01566 if( bremsen )
01567 setMaterialColor3d( *rot );
01568 else
01569 setMaterialColor3d( fahrzeug->gibFarbe() );
01570
01571 glVertex3d( 0.0, 2.0*richtung, 5.0 );
01572 glVertex3d( 0.0, 0.0, 0.0 );
01573 glVertex3d( breite*richtung, 0.0, 0.0 );
01574 glVertex3d( breite*richtung, 2.0*richtung, 5.0 );
01575 glEnd();
01576
01577
01578 glBegin(GL_POLYGON);
01579 setMaterialColor3d( fahrzeug->gibFarbe() );
01580
01581 glVertex3d( 0.0, 0.0, 0.0 );
01582 glVertex3d( 0.0, 2.0*richtung, 5.0 );
01583 glVertex3d( 0.0, 7.0*richtung, hoehe-4 );
01584 glVertex3d( 0.0, 9.0*richtung, hoehe );
01585 glVertex3d( 0.0, (laenge-11)*richtung, hoehe );
01586 glVertex3d( 0.0, (laenge-8 )*richtung, 6.0 );
01587 glVertex3d( 0.0, (laenge-1 )*richtung, 5.0 );
01588 glVertex3d( 0.0, laenge*richtung, 0.0 );
01589 glEnd();
01590
01591
01592 glBegin(GL_POLYGON);
01593 setMaterialColor3d( fahrzeug->gibFarbe() );
01594
01595 glVertex3d( breite*richtung, 0.0, 0.0 );
01596 glVertex3d( breite*richtung, laenge*richtung, 0.0 );
01597 glVertex3d( breite*richtung, (laenge-1 )*richtung, 5.0 );
01598 glVertex3d( breite*richtung, (laenge-8 )*richtung, 6.0 );
01599 glVertex3d( breite*richtung, (laenge-11)*richtung, hoehe );
01600 glVertex3d( breite*richtung, 9.0*richtung, hoehe );
01601 glVertex3d( breite*richtung, 7.0*richtung, hoehe-4 );
01602 glVertex3d( breite*richtung, 2.0*richtung, 5.0 );
01603 glEnd();
01604 }
01605
01606 } break;
01607
01608
01609 case LKW:
01610 { hoehe = 20.0;
01611 breite = 15.0;
01612
01613 if( ausrichtung == VER )
01614 {
01615
01616
01617 glBegin(GL_QUADS);
01618 setMaterialColor3d( fahrzeug->gibFarbe() );
01619
01620 glVertex3d( breite*richtung, 0.0, 0.0 );
01621 glVertex3d( 0.0, 0.0, 0.0 );
01622 glVertex3d( 0.0, laenge*richtung, 0.0 );
01623 glVertex3d( breite*richtung, laenge*richtung, 0.0 );
01624 glEnd();
01625
01626
01627 glBegin(GL_QUADS);
01628 setMaterialColor3d( fahrzeug->gibFarbe() );
01629
01630 glVertex3d( 0.0, laenge*richtung, 0.0 );
01631 glVertex3d( 0.0, laenge*richtung, hoehe-10 );
01632 glVertex3d( breite*richtung, laenge*richtung, hoehe-10 );
01633 glVertex3d( breite*richtung, laenge*richtung, 0.0 );
01634 glEnd();
01635
01636
01637 glBegin(GL_QUADS);
01638 setMaterialColor3d( fahrzeug->gibFarbe() );
01639
01640 glVertex3d( 0.0, (laenge-2)*richtung, hoehe-5 );
01641 glVertex3d( breite*richtung, (laenge-2)*richtung, hoehe-5 );
01642 glVertex3d( breite*richtung, laenge*richtung, hoehe-10 );
01643 glVertex3d( 0.0, laenge*richtung, hoehe-10 );
01644 glEnd();
01645
01646
01647 glBegin(GL_QUADS);
01648 setMaterialColor3d( fahrzeug->gibFarbe() );
01649
01650 glVertex3d( 0.0, (laenge-2)*richtung, hoehe-5 );
01651 glVertex3d( 0.0, (laenge-7)*richtung, hoehe-5 );
01652 glVertex3d( breite*richtung, (laenge-7)*richtung, hoehe-5 );
01653 glVertex3d( breite*richtung, (laenge-2)*richtung, hoehe-5 );
01654 glEnd();
01655
01656
01657 glBegin(GL_QUADS);
01658 setMaterialColor3d( fahrzeug->gibFarbe() );
01659
01660 glVertex3d( 0.0, (laenge-7)*richtung, hoehe-5 );
01661 glVertex3d( 0.0, (laenge-7)*richtung, hoehe );
01662 glVertex3d( breite*richtung, (laenge-7)*richtung, hoehe );
01663 glVertex3d( breite*richtung, (laenge-7)*richtung, hoehe-5 );
01664 glEnd();
01665
01666
01667 glBegin(GL_QUADS);
01668 setMaterialColor3d( fahrzeug->gibFarbe() );
01669
01670 glVertex3d( 0.0, (laenge-7)*richtung, hoehe );
01671 glVertex3d( 0.0, 2.0*richtung, hoehe );
01672 glVertex3d( breite*richtung, 2.0*richtung, hoehe );
01673 glVertex3d( breite*richtung, (laenge-7)*richtung, hoehe );
01674 glEnd();
01675
01676
01677 glBegin(GL_QUADS);
01678 if( bremsen )
01679 setMaterialColor3d( *rot);
01680 else
01681 setMaterialColor3d( fahrzeug->gibFarbe() );
01682
01683 glVertex3d( 0.0, 2.0*richtung, hoehe );
01684 glVertex3d( 0.0, 0.0, hoehe-5 );
01685 glVertex3d( breite*richtung, 0.0, hoehe-5 );
01686 glVertex3d( breite*richtung, 2.0*richtung, hoehe );
01687 glEnd();
01688
01689
01690 glBegin(GL_QUADS);
01691 setMaterialColor3d( fahrzeug->gibFarbe() );
01692
01693 glVertex3d( 0.0, 0.0, hoehe-5 );
01694 glVertex3d( 0.0, 0.0, 0.0 );
01695 glVertex3d( breite*richtung, 0.0, 0.0 );
01696 glVertex3d( breite*richtung, 0.0, hoehe-5 );
01697 glEnd();
01698
01699
01700 glBegin(GL_POLYGON);
01701 setMaterialColor3d( fahrzeug->gibFarbe() );
01702
01703 glVertex3d( breite*richtung, 0.0, 0.0 );
01704 glVertex3d( breite*richtung, laenge*richtung, 0.0 );
01705 glVertex3d( breite*richtung, laenge*richtung, hoehe-10 );
01706 glVertex3d( breite*richtung, (laenge-2)*richtung, hoehe-5 );
01707 glVertex3d( breite*richtung, (laenge-7)*richtung, hoehe-5 );
01708 glVertex3d( breite*richtung, (laenge-7)*richtung, hoehe );
01709 glVertex3d( breite*richtung, 2.0*richtung, hoehe );
01710 glVertex3d( breite*richtung, 0.0, hoehe-5 );
01711 glEnd();
01712
01713
01714 glBegin(GL_POLYGON);
01715 setMaterialColor3d( fahrzeug->gibFarbe() );
01716
01717 glVertex3d( 0.0, 0.0, 0.0 );
01718 glVertex3d( 0.0, 0.0, hoehe-5 );
01719 glVertex3d( 0.0, 2.0*richtung, hoehe );
01720 glVertex3d( 0.0, (laenge-7)*richtung, hoehe );
01721 glVertex3d( 0.0, (laenge-7)*richtung, hoehe-5 );
01722 glVertex3d( 0.0, (laenge-2)*richtung, hoehe-5 );
01723 glVertex3d( 0.0, laenge*richtung, hoehe-10 );
01724 glVertex3d( 0.0, laenge*richtung, 0.0 );
01725 glEnd();
01726 }
01727 else
01728 {
01729
01730 glBegin(GL_QUADS);
01731 setMaterialColor3d( fahrzeug->gibFarbe() );
01732
01733 glVertex3d( 0.0, breite*richtung, 0.0 );
01734 glVertex3d( laenge*richtung, breite*richtung, 0.0 );
01735 glVertex3d( laenge*richtung, 0.0, 0.0 );
01736 glVertex3d( 0.0, 0.0, 0.0 );
01737 glEnd();
01738
01739
01740 glBegin(GL_QUADS);
01741 setMaterialColor3d( fahrzeug->gibFarbe() );
01742
01743 glVertex3d( laenge*richtung, 0.0, 0.0 );
01744 glVertex3d( laenge*richtung, breite*richtung, 0.0 );
01745 glVertex3d( laenge*richtung, breite*richtung, hoehe-10 );
01746 glVertex3d( laenge*richtung, 0.0, hoehe-10 );
01747 glEnd();
01748
01749
01750 glBegin(GL_QUADS);
01751 setMaterialColor3d( fahrzeug->gibFarbe() );
01752
01753 glVertex3d( (laenge-2)*richtung, 0.0, hoehe-5 );
01754 glVertex3d( laenge*richtung, 0.0, hoehe-10 );
01755 glVertex3d( laenge*richtung, breite*richtung, hoehe-10 );
01756 glVertex3d( (laenge-2)*richtung, breite*richtung, hoehe-5 );
01757 glEnd();
01758
01759
01760 glBegin(GL_QUADS);
01761 setMaterialColor3d( fahrzeug->gibFarbe() );
01762
01763 glVertex3d( (laenge-2)*richtung, 0.0, hoehe-5 );
01764 glVertex3d( (laenge-2)*richtung, breite*richtung, hoehe-5 );
01765 glVertex3d( (laenge-7)*richtung, breite*richtung, hoehe-5 );
01766 glVertex3d( (laenge-7)*richtung, 0.0, hoehe-5 );
01767 glEnd();
01768
01769
01770 glBegin(GL_QUADS);
01771 setMaterialColor3d( fahrzeug->gibFarbe() );
01772
01773 glVertex3d( (laenge-7)*richtung, 0.0, hoehe-5 );
01774 glVertex3d( (laenge-7)*richtung, breite*richtung, hoehe-5 );
01775 glVertex3d( (laenge-7)*richtung, breite*richtung, hoehe );
01776 glVertex3d( (laenge-7)*richtung, 0.0, hoehe );
01777 glEnd();
01778
01779
01780 glBegin(GL_QUADS);
01781 setMaterialColor3d( fahrzeug->gibFarbe() );
01782
01783 glVertex3d( (laenge-7)*richtung, 0.0, hoehe );
01784 glVertex3d( (laenge-7)*richtung, breite*richtung, hoehe );
01785 glVertex3d( 2.0*richtung, breite*richtung, hoehe );
01786 glVertex3d( 2.0*richtung, 0.0, hoehe );
01787 glEnd();
01788
01789
01790 glBegin(GL_QUADS);
01791 if( bremsen )
01792 setMaterialColor3d( *rot );
01793 else
01794 setMaterialColor3d( fahrzeug->gibFarbe() );
01795
01796 glVertex3d( 2.0*richtung, 0.0, hoehe );
01797 glVertex3d( 2.0*richtung, breite*richtung, hoehe );
01798 glVertex3d( 0.0, breite*richtung, hoehe-5 );
01799 glVertex3d( 0.0, 0.0, hoehe-5 );
01800 glEnd();
01801
01802
01803 glBegin(GL_QUADS);
01804 setMaterialColor3d( fahrzeug->gibFarbe() );
01805
01806 glVertex3d( 0.0, 0.0, hoehe-5 );
01807 glVertex3d( 0.0, breite*richtung, hoehe-5 );
01808 glVertex3d( 0.0, breite*richtung, 0.0 );
01809 glVertex3d( 0.0, 0.0, 0.0 );
01810 glEnd();
01811
01812
01813 glBegin(GL_POLYGON);
01814 setMaterialColor3d( fahrzeug->gibFarbe() );
01815
01816 glVertex3d( 0.0, breite*richtung, 0.0 );
01817 glVertex3d( 0.0, breite*richtung, hoehe-5 );
01818 glVertex3d( 2.0*richtung, breite*richtung, hoehe );
01819 glVertex3d( (laenge-7)*richtung, breite*richtung, hoehe );
01820 glVertex3d( (laenge-7)*richtung, breite*richtung, hoehe-5 );
01821 glVertex3d( (laenge-2)*richtung, breite*richtung, hoehe-5 );
01822 glVertex3d( laenge*richtung, breite*richtung, hoehe-10 );
01823 glVertex3d( laenge*richtung, breite*richtung, 0.0 );
01824 glEnd();
01825
01826
01827 glBegin(GL_POLYGON);
01828 setMaterialColor3d( fahrzeug->gibFarbe() );
01829
01830 glVertex3d( 0.0, 0.0, 0.0 );
01831 glVertex3d( laenge*richtung, 0.0, 0.0 );
01832 glVertex3d( laenge*richtung, 0.0, hoehe-10 );
01833 glVertex3d( (laenge-2)*richtung, 0.0, hoehe-5 );
01834 glVertex3d( (laenge-7)*richtung, 0.0, hoehe-5 );
01835 glVertex3d( (laenge-7)*richtung, 0.0, hoehe );
01836 glVertex3d( 2.0*richtung, 0.0, hoehe );
01837 glVertex3d( 0.0, 0.0, hoehe-5 );
01838 glEnd();
01839 }
01840 } break;
01841
01842
01843 case BUS:
01844 { hoehe = 20.0;
01845 breite = 15.0;
01846
01847 if( ausrichtung == HOR )
01848 {
01849
01850 glBegin(GL_QUADS);
01851 setMaterialColor3d( fahrzeug->gibFarbe() );
01852
01853 glVertex3d( 0.0, breite*richtung, 0.0 );
01854 glVertex3d( (laenge-2)*richtung, breite*richtung, 0.0 );
01855 glVertex3d( (laenge-2)*richtung, 0.0, 0.0 );
01856 glVertex3d( 0.0, 0.0, 0.0 );
01857 glEnd();
01858
01859
01860 glBegin(GL_QUADS);
01861 setMaterialColor3d( fahrzeug->gibFarbe() );
01862
01863 glVertex3d( (laenge-2)*richtung, 0.0, 0.0 );
01864 glVertex3d( (laenge-2)*richtung, breite*richtung, 0.0 );
01865 glVertex3d( laenge*richtung, breite*richtung, 5.0 );
01866 glVertex3d( laenge*richtung, 0.0, 5.0 );
01867 glEnd();
01868
01869
01870 glBegin(GL_QUADS);
01871 setMaterialColor3d( fahrzeug->gibFarbe() );
01872
01873 glVertex3d( (laenge-2)*richtung, 0.0, hoehe );
01874 glVertex3d( laenge*richtung, 0.0, 5.0 );
01875 glVertex3d( laenge*richtung, breite*richtung, 5.0 );
01876 glVertex3d( (laenge-2)*richtung, breite*richtung, hoehe );
01877 glEnd();
01878
01879
01880 glBegin(GL_QUADS);
01881 setMaterialColor3d( fahrzeug->gibFarbe() );
01882
01883 glVertex3d( (laenge-2)*richtung, 0.0, hoehe );
01884 glVertex3d( (laenge-2)*richtung, breite*richtung, hoehe );
01885 glVertex3d( 2.0*richtung, breite*richtung, hoehe );
01886 glVertex3d( 2.0*richtung, 0.0, hoehe );
01887 glEnd();
01888
01889
01890 glBegin(GL_QUADS);
01891 if( bremsen )
01892 setMaterialColor3d( *rot );
01893 else
01894 setMaterialColor3d( fahrzeug->gibFarbe() );
01895
01896 glVertex3d( 2.0*richtung, 0.0, hoehe );
01897 glVertex3d( 2.0*richtung, breite*richtung, hoehe );
01898 glVertex3d( 0.0, breite*richtung, hoehe-5 );
01899 glVertex3d( 0.0, 0.0, hoehe-5 );
01900 glEnd();
01901
01902
01903 glBegin(GL_QUADS);
01904 setMaterialColor3d( fahrzeug->gibFarbe() );
01905
01906 glVertex3d( 0.0, 0.0, hoehe-5 );
01907 glVertex3d( 0.0, breite*richtung, hoehe-5 );
01908 glVertex3d( 0.0, breite*richtung, 0.0 );
01909 glVertex3d( 0.0, 0.0, 0.0 );
01910 glEnd();
01911
01912
01913 glBegin(GL_POLYGON);
01914 setMaterialColor3d( fahrzeug->gibFarbe() );
01915
01916 glVertex3d( 0.0, 0.0, 0.0 );
01917 glVertex3d( (laenge-2)*richtung, 0.0, 0.0 );
01918 glVertex3d( laenge*richtung, 0.0, 5.0 );
01919 glVertex3d( (laenge-2)*richtung, 0.0, hoehe );
01920 glVertex3d( 2.0*richtung, 0.0, hoehe );
01921 glVertex3d( 0.0, 0.0, hoehe-5 );
01922 glEnd();
01923
01924
01925 glBegin(GL_POLYGON);
01926 setMaterialColor3d( fahrzeug->gibFarbe() );
01927
01928 glVertex3d( 0.0, breite*richtung, 0.0 );
01929 glVertex3d( 0.0, breite*richtung, hoehe-5 );
01930 glVertex3d( 2.0*richtung, breite*richtung, hoehe );
01931 glVertex3d( (laenge-2)*richtung, breite*richtung, hoehe );
01932 glVertex3d( laenge*richtung, breite*richtung, 5.0 );
01933 glVertex3d( (laenge-2)*richtung, breite*richtung, 0.0 );
01934 glEnd();
01935 }
01936 else
01937 {
01938
01939 glBegin(GL_QUADS);
01940 setMaterialColor3d( fahrzeug->gibFarbe() );
01941
01942 glVertex3d( breite*richtung, 0.0, 0.0 );
01943 glVertex3d( 0.0, 0.0, 0.0 );
01944 glVertex3d( 0.0, (laenge-2)*richtung, 0.0 );
01945 glVertex3d( breite*richtung, (laenge-2)*richtung, 0.0 );
01946 glEnd();
01947
01948
01949 glBegin(GL_QUADS);
01950 setMaterialColor3d( fahrzeug->gibFarbe() );
01951
01952 glVertex3d( 0.0, (laenge-2)*richtung, 0.0 );
01953 glVertex3d( 0.0, laenge*richtung, 5.0 );
01954 glVertex3d( breite*richtung, laenge*richtung, 5.0 );
01955 glVertex3d( breite*richtung, (laenge-2)*richtung, 0.0 );
01956 glEnd();
01957
01958
01959 glBegin(GL_QUADS);
01960 setMaterialColor3d( fahrzeug->gibFarbe() );
01961
01962 glVertex3d( 0.0, (laenge-2)*richtung, hoehe );
01963 glVertex3d( breite*richtung, (laenge-2)*richtung, hoehe );
01964 glVertex3d( breite*richtung, laenge*richtung, 5.0 );
01965 glVertex3d( 0.0, laenge*richtung, 5.0 );
01966 glEnd();
01967
01968
01969 glBegin(GL_QUADS);
01970 setMaterialColor3d( fahrzeug->gibFarbe() );
01971
01972 glVertex3d( 0.0, (laenge-2)*richtung, hoehe );
01973 glVertex3d( 0.0, 2.0*richtung, hoehe );
01974 glVertex3d( breite*richtung, 2.0*richtung, hoehe );
01975 glVertex3d( breite*richtung, (laenge-2)*richtung, hoehe );
01976 glEnd();
01977
01978
01979 glBegin(GL_QUADS);
01980 if( bremsen )
01981 setMaterialColor3d( *rot );
01982 else
01983 setMaterialColor3d( fahrzeug->gibFarbe() );
01984
01985 glVertex3d( 0.0, 2.0*richtung, hoehe );
01986 glVertex3d( 0.0, 0.0 , hoehe-5 );
01987 glVertex3d( breite*richtung, 0.0 , hoehe-5 );
01988 glVertex3d( breite*richtung, 2.0*richtung, hoehe );
01989 glEnd();
01990
01991
01992 glBegin(GL_QUADS);
01993 setMaterialColor3d( fahrzeug->gibFarbe() );
01994
01995 glVertex3d( 0.0, 0.0, hoehe-5 );
01996 glVertex3d( 0.0, 0.0, 0.0 );
01997 glVertex3d( breite*richtung, 0.0, 0.0 );
01998 glVertex3d( breite*richtung, 0.0, hoehe-5 );
01999 glEnd();
02000
02001
02002 glBegin(GL_POLYGON);
02003 setMaterialColor3d( fahrzeug->gibFarbe() );
02004
02005 glVertex3d( 0.0, 0.0, 0.0 );
02006 glVertex3d( 0.0, 0.0, hoehe-5 );
02007 glVertex3d( 0.0, 2.0*richtung, hoehe );
02008 glVertex3d( 0.0, (laenge-2)*richtung, hoehe );
02009 glVertex3d( 0.0, laenge*richtung, 5.0 );
02010 glVertex3d( 0.0, (laenge-2)*richtung, 0.0 );
02011 glEnd();
02012
02013
02014 glBegin(GL_POLYGON);
02015 setMaterialColor3d( fahrzeug->gibFarbe() );
02016
02017 glVertex3d( breite*richtung, (laenge-2)*richtung, 0.0 );
02018 glVertex3d( breite*richtung, laenge*richtung, 5.0 );
02019 glVertex3d( breite*richtung, (laenge-2)*richtung, hoehe );
02020 glVertex3d( breite*richtung, 2.0*richtung, hoehe );
02021 glVertex3d( breite*richtung, 0.0, hoehe-5 );
02022 glVertex3d( breite*richtung, 0.0, 0.0 );
02023 glEnd();
02024 }
02025 } break;
02026
02027
02028 case BIKE:
02029 { hoehe = 6;
02030 breite = 4;
02031
02032 if( ausrichtung == HOR )
02033 {
02034
02035 glBegin(GL_QUADS);
02036 setMaterialColor3d( *schwarz );
02037
02038 glVertex3d( 0.0, 0.0, 0.0 );
02039 glVertex3d( 0.0, 0.0, 4.0 );
02040 glVertex3d( 0.0, breite*richtung, 4.0 );
02041 glVertex3d( 0.0, breite*richtung, 0.0 );
02042 glEnd();
02043
02044
02045 glBegin(GL_QUADS);
02046 setMaterialColor3d( *schwarz );
02047
02048 glVertex3d( 0.0, breite*richtung, 0.0 );
02049 glVertex3d( 5.0*richtung, breite*richtung, 0.0 );
02050 glVertex3d( 5.0*richtung, 0.0, 0.0 );
02051 glVertex3d( 0.0, 0.0, 0.0 );
02052 glEnd();
02053
02054
02055 glBegin(GL_QUADS);
02056 setMaterialColor3d( *schwarz );
02057
02058 glVertex3d( 5.0*richtung, 0.0, 0.0 );
02059 glVertex3d( 5.0*richtung, breite*richtung, 0.0 );
02060 glVertex3d( 5.0*richtung, breite*richtung, 2.0 );
02061 glVertex3d( 5.0*richtung, 0.0, 2.0 );
02062 glEnd();
02063
02064
02065 glBegin(GL_QUADS);
02066 setMaterialColor3d( fahrzeug->gibFarbe() );
02067
02068 glVertex3d( 5.0*richtung, breite*richtung, 2.0 );
02069 glVertex3d( (laenge-5)*richtung, breite*richtung, 2.0 );
02070 glVertex3d( (laenge-5)*richtung, 0.0, 2.0 );
02071 glVertex3d( 5.0*richtung, 0.0, 2.0 );
02072 glEnd();
02073
02074
02075 glBegin(GL_QUADS);
02076 setMaterialColor3d( *schwarz );
02077
02078 glVertex3d( (laenge-5)*richtung, 0.0, 0.0 );
02079 glVertex3d( (laenge-5)*richtung, 0.0, 2.0 );
02080 glVertex3d( (laenge-5)*richtung, breite*richtung, 2.0 );
02081 glVertex3d( (laenge-5)*richtung, breite*richtung, 0.0 );
02082 glEnd();
02083
02084
02085 glBegin(GL_QUADS);
02086 setMaterialColor3d( *schwarz );
02087
02088 glVertex3d( (laenge-5)*richtung, breite*richtung, 0.0 );
02089 glVertex3d( laenge*richtung, breite*richtung, 0.0 );
02090 glVertex3d( laenge*richtung, 0.0, 0.0 );
02091 glVertex3d( (laenge-5)*richtung, 0.0, 0.0 );
02092 glEnd();
02093
02094
02095 glBegin(GL_QUADS);
02096 setMaterialColor3d( *schwarz );
02097
02098 glVertex3d( laenge*richtung, 0.0, 0.0 );
02099 glVertex3d( laenge*richtung, breite*richtung, 0.0 );
02100 glVertex3d( laenge*richtung, breite*richtung, 4.0 );
02101 glVertex3d( laenge*richtung, 0.0, 4.0 );
02102 glEnd();
02103
02104
02105 glBegin(GL_QUADS);
02106 setMaterialColor3d( fahrzeug->gibFarbe() );
02107
02108 glVertex3d( laenge*richtung, 0.0, 4.0 );
02109 glVertex3d( laenge*richtung, breite*richtung, 4.0 );
02110 glVertex3d( (laenge-3)*richtung, breite*richtung, hoehe );
02111 glVertex3d( (laenge-3)*richtung, 0.0, hoehe );
02112 glEnd();
02113
02114
02115 glBegin(GL_QUADS);
02116 setMaterialColor3d( fahrzeug->gibFarbe() );
02117
02118 glVertex3d( (laenge-3)*richtung, 0.0, hoehe );
02119 glVertex3d( (laenge-3)*richtung, breite*richtung, hoehe );
02120 glVertex3d( 5.0*richtung, breite*richtung, hoehe );
02121 glVertex3d( 5.0*richtung, 0.0, hoehe );
02122 glEnd();
02123
02124
02125 glBegin(GL_QUADS);
02126 if( bremsen )
02127 setMaterialColor3d( *rot );
02128 else
02129 setMaterialColor3d( fahrzeug->gibFarbe() );
02130
02131 glVertex3d( 5.0*richtung, 0.0, hoehe );
02132 glVertex3d( 5.0*richtung, breite*richtung, hoehe );
02133 glVertex3d( 3.0*richtung, breite*richtung, 4.0 );
02134 glVertex3d( 3.0*richtung, 0.0, 4.0 );
02135 glEnd();
02136
02137
02138 glBegin(GL_QUADS);
02139 setMaterialColor3d( *schwarz );
02140
02141 glVertex3d( 0.0, 0.0, 4.0 );
02142 glVertex3d( 3.0*richtung, 0.0, 4.0 );
02143 glVertex3d( 3.0*richtung, breite*richtung, 4.0 );
02144 glVertex3d( 0.0, breite*richtung, 4.0 );
02145 glEnd();
02146
02147
02148 glBegin(GL_POLYGON);
02149 setMaterialColor3d( *schwarz );
02150
02151 glVertex3d( 0.0, 0.0, 0.0 );
02152 glVertex3d( 5.0*richtung, 0.0, 0.0 );
02153 glVertex3d( 5.0*richtung, 0.0, 2.0 );
02154 glVertex3d( 3.0*richtung, 0.0, 4.0 );
02155 glVertex3d( 0.0, 0.0, 4.0 );
02156 glEnd();
02157
02158
02159 glBegin(GL_POLYGON);
02160 setMaterialColor3d( *schwarz );
02161
02162 glVertex3d( 0.0, breite*richtung, 0.0 );
02163 glVertex3d( 0.0, breite*richtung, 4.0 );
02164 glVertex3d( 3.0*richtung, breite*richtung, 4.0 );
02165 glVertex3d( 5.0*richtung, breite*richtung, 2.0 );
02166 glVertex3d( 5.0*richtung, breite*richtung, 0.0 );
02167 glEnd();
02168
02169
02170 glBegin(GL_QUADS);
02171 setMaterialColor3d( *schwarz );
02172
02173 glVertex3d( (laenge-5)*richtung, 0.0, 0.0 );
02174 glVertex3d( laenge*richtung, 0.0, 0.0 );
02175 glVertex3d( laenge*richtung, 0.0, 4.0 );
02176 glVertex3d( (laenge-5)*richtung, 0.0, 2.0 );
02177 glEnd();
02178
02179
02180 glBegin(GL_QUADS);
02181 setMaterialColor3d( *schwarz );
02182
02183 glVertex3d( (laenge-5)*richtung, breite*richtung, 0.0 );
02184 glVertex3d( (laenge-5)*richtung, breite*richtung, 2.0 );
02185 glVertex3d( laenge*richtung, breite*richtung, 4.0 );
02186 glVertex3d( laenge*richtung, breite*richtung, 0.0 );
02187 glEnd();
02188
02189
02190 glBegin(GL_POLYGON);
02191 setMaterialColor3d( fahrzeug->gibFarbe() );
02192
02193 glVertex3d( 3.0*richtung, 0.0, 4.0 );
02194 glVertex3d( 5.0*richtung, 0.0, 2.0 );
02195 glVertex3d( (laenge-5)*richtung, 0.0, 2.0 );
02196 glVertex3d( laenge*richtung, 0.0, 4.0 );
02197 glVertex3d( (laenge-3)*richtung, 0.0, hoehe );
02198 glVertex3d( 5.0*richtung, 0.0, hoehe );
02199 glEnd();
02200
02201
02202 glBegin(GL_POLYGON);
02203 setMaterialColor3d( fahrzeug->gibFarbe() );
02204
02205 glVertex3d( 3.0*richtung, breite*richtung, 4.0 );
02206 glVertex3d( 5.0*richtung, breite*richtung, hoehe );
02207 glVertex3d( (laenge-3)*richtung, breite*richtung, hoehe );
02208 glVertex3d( laenge*richtung, breite*richtung, 4.0 );
02209 glVertex3d( (laenge-5)*richtung, breite*richtung, 2.0 );
02210 glVertex3d( 5.0*richtung, breite*richtung, 2.0 );
02211 glEnd();
02212 }
02213 else
02214
02215 {
02216
02217 glBegin(GL_QUADS);
02218 setMaterialColor3d( *schwarz );
02219
02220 glVertex3d( 0.0, 0.0, 0.0 );
02221 glVertex3d( breite*richtung, 0.0, 0.0 );
02222 glVertex3d( breite*richtung, 0.0, 4.0 );
02223 glVertex3d( 0.0, 0.0, 4.0 );
02224 glEnd();
02225
02226
02227 glBegin(GL_QUADS);
02228 setMaterialColor3d( *schwarz );
02229
02230 glVertex3d( breite*richtung, 0.0, 0.0 );
02231 glVertex3d( 0.0, 0.0, 0.0 );
02232 glVertex3d( 0.0, 5.0*richtung, 0.0 );
02233 glVertex3d( breite*richtung, 5.0*richtung, 0.0 );
02234 glEnd();
02235
02236
02237 glBegin(GL_QUADS);
02238 setMaterialColor3d( *schwarz );
02239
02240 glVertex3d( 0.0, 5.0*richtung, 0.0 );
02241 glVertex3d( 0.0, 5.0*richtung, 2.0 );
02242 glVertex3d( breite*richtung, 5.0*richtung, 2.0 );
02243 glVertex3d( breite*richtung, 5.0*richtung, 0.0 );
02244 glEnd();
02245
02246
02247 glBegin(GL_QUADS);
02248 setMaterialColor3d( fahrzeug->gibFarbe() );
02249
02250 glVertex3d( breite*richtung, 5.0*richtung, 2.0 );
02251 glVertex3d( 0.0, 5.0*richtung, 2.0 );
02252 glVertex3d( 0.0, (laenge-5)*richtung, 2.0 );
02253 glVertex3d( breite*richtung, (laenge-5)*richtung, 2.0 );
02254 glEnd();
02255
02256
02257 glBegin(GL_QUADS);
02258 setMaterialColor3d( *schwarz );
02259
02260 glVertex3d( 0.0, (laenge-5)*richtung, 0.0 );
02261 glVertex3d( breite*richtung, (laenge-5)*richtung, 0.0 );
02262 glVertex3d( breite*richtung, (laenge-5)*richtung, 2.0 );
02263 glVertex3d( 0.0, (laenge-5)*richtung, 2.0 );
02264 glEnd();
02265
02266
02267 glBegin(GL_QUADS);
02268 setMaterialColor3d( *schwarz );
02269
02270 glVertex3d( breite*richtung, (laenge-5)*richtung, 0.0 );
02271 glVertex3d( 0.0, (laenge-5)*richtung, 0.0 );
02272 glVertex3d( 0.0, laenge*richtung, 0.0 );
02273 glVertex3d( breite*richtung, laenge*richtung, 0.0 );
02274 glEnd();
02275
02276
02277 glBegin(GL_QUADS);
02278 setMaterialColor3d( *schwarz );
02279
02280 glVertex3d( 0.0, laenge*richtung, 0.0 );
02281 glVertex3d( 0.0, laenge*richtung, 4.0 );
02282 glVertex3d( breite*richtung, laenge*richtung, 4.0 );
02283 glVertex3d( breite*richtung, laenge*richtung, 0.0 );
02284 glEnd();
02285
02286
02287 glBegin(GL_QUADS);
02288 setMaterialColor3d( fahrzeug->gibFarbe() );
02289
02290 glVertex3d( 0.0, laenge*richtung, 4.0 );
02291 glVertex3d( 0.0, (laenge-3)*richtung, hoehe );
02292 glVertex3d( breite*richtung, (laenge-3)*richtung, hoehe );
02293 glVertex3d( breite*richtung, laenge*richtung, 4.0 );
02294 glEnd();
02295
02296
02297 glBegin(GL_QUADS);
02298 setMaterialColor3d( fahrzeug->gibFarbe() );
02299
02300 glVertex3d( 0.0, (laenge-3)*richtung, hoehe );
02301 glVertex3d( 0.0, 5.0*richtung, hoehe );
02302 glVertex3d( breite*richtung, 5.0*richtung, hoehe );
02303 glVertex3d( breite*richtung, (laenge-3)*richtung, hoehe );
02304 glEnd();
02305
02306
02307 glBegin(GL_QUADS);
02308 if( bremsen )
02309 setMaterialColor3d( *rot );
02310 else
02311 setMaterialColor3d( fahrzeug->gibFarbe() );
02312
02313 glVertex3d( 0.0, 5.0*richtung, hoehe );
02314 glVertex3d( 0.0, 3.0*richtung, 4.0 );
02315 glVertex3d( breite*richtung, 3.0*richtung, 4.0 );
02316 glVertex3d( breite*richtung, 5.0*richtung, hoehe );
02317 glEnd();
02318
02319
02320 glBegin(GL_QUADS);
02321 setMaterialColor3d( *schwarz );
02322
02323 glVertex3d( 0.0, 0.0, 4.0 );
02324 glVertex3d( breite*richtung, 0.0, 4.0 );
02325 glVertex3d( breite*richtung, 3.0*richtung, 4.0 );
02326 glVertex3d( 0.0, 3.0*richtung, 4.0 );
02327 glEnd();
02328
02329
02330 glBegin(GL_POLYGON);
02331 setMaterialColor3d( *schwarz );
02332
02333 glVertex3d( 0.0, 0.0, 0.0 );
02334 glVertex3d( 0.0, 0.0, 4.0 );
02335 glVertex3d( 0.0, 3.0*richtung, 4.0 );
02336 glVertex3d( 0.0, 5.0*richtung, 2.0 );
02337 glVertex3d( 0.0, 5.0*richtung, 0.0 );
02338 glEnd();
02339
02340
02341 glBegin(GL_POLYGON);
02342 setMaterialColor3d( *schwarz );
02343
02344 glVertex3d( breite*richtung, 0.0, 0.0 );
02345 glVertex3d( breite*richtung, 5.0*richtung, 0.0 );
02346 glVertex3d( breite*richtung, 5.0*richtung, 2.0 );
02347 glVertex3d( breite*richtung, 3.0*richtung, 4.0 );
02348 glVertex3d( breite*richtung, 0.0, 4.0 );
02349 glEnd();
02350
02351
02352 glBegin(GL_QUADS);
02353 setMaterialColor3d( *schwarz );
02354
02355 glVertex3d( 0.0, (laenge-5)*richtung, 0.0 );
02356 glVertex3d( 0.0, (laenge-5)*richtung, 2.0 );
02357 glVertex3d( 0.0, laenge*richtung, 4.0 );
02358 glVertex3d( 0.0, laenge*richtung, 0.0 );
02359 glEnd();
02360
02361
02362 glBegin(GL_QUADS);
02363 setMaterialColor3d( *schwarz );
02364
02365 glVertex3d( breite*richtung, (laenge-5)*richtung, 0.0 );
02366 glVertex3d( breite*richtung, laenge*richtung, 0.0 );
02367 glVertex3d( breite*richtung, laenge*richtung, 4.0 );
02368 glVertex3d( breite*richtung, (laenge-5)*richtung, 2.0 );
02369 glEnd();
02370
02371
02372 glBegin(GL_POLYGON);
02373 setMaterialColor3d( fahrzeug->gibFarbe() );
02374
02375 glVertex3d( 0.0, 3.0*richtung, 4.0 );
02376 glVertex3d( 0.0, 5.0*richtung, hoehe );
02377 glVertex3d( 0.0, (laenge-3)*richtung, hoehe );
02378 glVertex3d( 0.0, laenge*richtung, 4.0 );
02379 glVertex3d( 0.0, (laenge-5)*richtung, 2.0 );
02380 glVertex3d( 0.0, 5.0*richtung, 2.0 );
02381 glEnd();
02382
02383
02384 glBegin(GL_POLYGON);
02385 setMaterialColor3d( fahrzeug->gibFarbe() );
02386
02387 glVertex3d( breite*richtung, 3.0*richtung, 4.0 );
02388 glVertex3d( breite*richtung, 5.0*richtung, 2.0 );
02389 glVertex3d( breite*richtung, (laenge-5)*richtung, 2.0 );
02390 glVertex3d( breite*richtung, laenge*richtung, 4.0 );
02391 glVertex3d( breite*richtung, (laenge-3)*richtung, hoehe );
02392 glVertex3d( breite*richtung, 5.0*richtung, hoehe );
02393 glEnd();
02394 }
02395 } break;
02396 }
02397
02398
02399 glTranslated( -1*fahrzeugPosition->x, -1*fahrzeugPosition->y, -1*fahrzeugPosition->z);
02400 }
02401
02402
02403
02404
02405
02414 void GLWireframe::setMaterialColor3d(Koordinaten farbe)
02415 {
02416 glColor3d( farbe.x/255, farbe.y/255, farbe.z/255 );
02417
02418
02419
02420
02421
02422
02423
02424
02425
02426
02427
02428
02429
02430
02431
02432 }
02433
02434
02435
02436
02437
02446 void GLWireframe::setzeFahrzeugliste( Liste *fahrzeugliste )
02447 {
02448 fahrzeugliste_ = fahrzeugliste;
02449 }
02450
02451
02452
02453
02462 void GLWireframe::setzeKreuzungsliste( Liste *kreuzungsliste )
02463 {
02464 kreuzungsliste_ = kreuzungsliste;
02465 }
02466
02467
02468
02469
02479 void GLWireframe::setzeSpurenliste( Spur **spurenliste, long int anzahlSpuren )
02480 {
02481 spurenliste_ = spurenliste;
02482 anzahlSpuren_ = anzahlSpuren;
02483 }
02484