Ich komm nicht weiter mit meinen Quelltext, einfache versuche mit class scheitern, brauche HILFE!!!



  • hi, ich moechte fuer meine jahresarbeit ein kleines programm schreiben welches einen punkt im raum darstellt und dieser punkt kann sich wort frei bewegen.... ich habe nun also ne opengl anwendung und nen header wo ich den raum und punkt in klassen erstelle, doch irgendwie shcleift... vieleicht koenntet ihr euch meinen text mal anschauen:

    der header:

    #ifndef ROOM_H
    #define ROOM_H
    
    #include <windows.h>
    #include <ctime>
    #include <conio.h>
    #include <GL\gl.h>
    #include <GL\glu.h>
    
    class room {
    
        public:
    
            room();
    
            void room_measure( float _x_extent, float _y_extent, float _z_extent );
    
            float _room_x;
            float _room_y;
            float _room_z;
    };
    
        room::room() {
    
            _room_x = 0.0f;
            _room_y = 0.0f;
            _room_z = 0.0f;
        }
    
        void room::room_measure( float _x_extent, float _y_extent, float _z_extent ) {
    
            _room_x = _x_extent;
            _room_y = _y_extent;
            _room_z = _z_extent;
    
            glTranslatef(  0.0f,  0.0f, -10.0f );
            glColor3ub( 255, 255, 255 );
    
            glBegin( GL_LINES );
    
                // bottom
                glVertex3f( -_x_extent, -_y_extent, -_z_extent );
                glVertex3f(  _x_extent, -_y_extent, -_z_extent );
                glVertex3f(  _x_extent, -_y_extent, -_z_extent );
                glVertex3f(  _x_extent, -_y_extent,  _z_extent );
                glVertex3f(  _x_extent, -_y_extent,  _z_extent );
                glVertex3f( -_x_extent, -_y_extent,  _z_extent );
                glVertex3f( -_x_extent, -_y_extent,  _z_extent );
                glVertex3f( -_x_extent, -_y_extent, -_z_extent );
    
                // top
                glVertex3f( -_x_extent,  _y_extent, -_z_extent );
                glVertex3f(  _x_extent,  _y_extent, -_z_extent );
                glVertex3f(  _x_extent,  _y_extent, -_z_extent );
                glVertex3f(  _x_extent,  _y_extent,  _z_extent );
                glVertex3f(  _x_extent,  _y_extent,  _z_extent );
                glVertex3f( -_x_extent,  _y_extent,  _z_extent );
                glVertex3f( -_x_extent,  _y_extent,  _z_extent );
                glVertex3f( -_x_extent,  _y_extent, -_z_extent );
    
                // back
                glVertex3f( -_x_extent, -_y_extent, -_z_extent );
                glVertex3f(  _x_extent, -_y_extent, -_z_extent );
                glVertex3f(  _x_extent, -_y_extent, -_z_extent );
                glVertex3f(  _x_extent,  _y_extent, -_z_extent );
                glVertex3f(  _x_extent,  _y_extent, -_z_extent );
                glVertex3f( -_x_extent,  _y_extent, -_z_extent );
                glVertex3f( -_x_extent,  _y_extent, -_z_extent );
                glVertex3f( -_x_extent, -_y_extent, -_z_extent );
    
                // face
                glVertex3f( -_x_extent, -_y_extent,  _z_extent );
                glVertex3f(  _x_extent, -_y_extent,  _z_extent );
                glVertex3f(  _x_extent, -_y_extent,  _z_extent );
                glVertex3f(  _x_extent,  _y_extent,  _z_extent );
                glVertex3f(  _x_extent,  _y_extent,  _z_extent );
                glVertex3f( -_x_extent,  _y_extent,  _z_extent );
                glVertex3f( -_x_extent,  _y_extent,  _z_extent );
                glVertex3f( -_x_extent, -_y_extent,  _z_extent );
    
                // left
                glVertex3f(  _x_extent, -_y_extent, -_z_extent );
                glVertex3f(  _x_extent, -_y_extent,  _z_extent );
                glVertex3f(  _x_extent, -_y_extent,  _z_extent );
                glVertex3f(  _x_extent,  _y_extent,  _z_extent );
                glVertex3f(  _x_extent,  _y_extent,  _z_extent );
                glVertex3f(  _x_extent,  _y_extent, -_z_extent );
                glVertex3f(  _x_extent,  _y_extent, -_z_extent );
                glVertex3f(  _x_extent, -_y_extent, -_z_extent );
    
                // right
                glVertex3f( -_x_extent, -_y_extent, -_z_extent );
                glVertex3f( -_x_extent, -_y_extent,  _z_extent );
                glVertex3f( -_x_extent, -_y_extent,  _z_extent );
                glVertex3f( -_x_extent,  _y_extent,  _z_extent );
                glVertex3f( -_x_extent,  _y_extent,  _z_extent );
                glVertex3f( -_x_extent,  _y_extent, -_z_extent );
                glVertex3f( -_x_extent,  _y_extent, -_z_extent );
                glVertex3f( -_x_extent, -_y_extent, -_z_extent );
        }
    
    class object : public room {
    
        public:
    
            object();
    
            int kollision();
            void object_pos();
    
        private:
    
            float _x_obj_pos;
            float _y_obj_pos;
            float _z_obj_pos;
    
            int xT;
            int yT;
            int zT;
    
            GLUquadricObj *sphere;
    };
    
        object::object() {
    
       //     srand( time( 0 ) );
       //     _x_obj_pos = rand() % (int)_room_x;
       //     _y_obj_pos = rand() % (int)_room_y;
       //     _z_obj_pos = rand() % (int)_room_z;
    
            _x_obj_pos =  1.0f;
            _y_obj_pos =  1.0f;
            _z_obj_pos =  1.0f;
    
            xT = 1;
            yT = 1;
            zT = 1;
    
            sphere = gluNewQuadric();
            gluQuadricNormals( sphere, GL_SMOOTH );
            gluQuadricDrawStyle( sphere, GL_FILL );
        }
    
        int object::kollision() {
    
            if( ( _x_obj_pos <=  _room_x ) && ( xT == 1 ) ) {
    
                _x_obj_pos += 0.01f;
            }
            else {
    
                return xT = -1;
            }
    
            return 0;
        }
    
        void object::object_pos() {
    
            kollision();
    
            glTranslatef( _x_obj_pos, _y_obj_pos, _z_obj_pos );
            glColor3ub( 255, 255, 0 );
    
            gluSphere( sphere, 0.1f, 50.0f, 50.0f );
        }
    
    #endif
    

    und in der main:

    int DrawGL() {
    
        glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
        glLoadIdentity();
    
        room _cube_1;
        _cube_1.room_measure( 2.0f, 2.0f, 2.0f );
    
        object _obj_1;
        _obj_1.object_pos();
    
        glLoadIdentity();
    
        return 0;
    }
    

    ich moechte also das der gelbe punkt sich erst mal bewegt, soweit der sourcecode reicht muesste er sich ja erst mal na rechts bewegen, macht er aber net... wieso?
    eine weitere frage ist, ich moechte den punkt irgned wo rein zufaellig in diesem raum erscheinen lassen also den start wert in dem konstruktor per zufall generiéren, klappt nicht, wieso?
    und vieleicht nur noch mal so ne frage zu klassen, kann es sein das ich keine referenzen und static variablen in einer klasse inkrementieren kann?
    und ist es vieleicht moeglich bei vererbung von der neuen klasse auf die in der basisklasse privaten variablen zuzugreifen???

    ich weiss sind ne menge fragen, waer aber coll wenn ihr mir sie beantwortet, DANKESCHÖN 😃



  • T0bi schrieb:

    ich moechte also das der gelbe punkt sich erst mal bewegt, soweit der sourcecode reicht muesste er sich ja erst mal na rechts bewegen, macht er aber net... wieso?

    Weil du immer wieder einen neuen "Punkt" an derselben Position erstellst und immer um dieselbe Strecke verschiebst. Das Ergebnis sieht daher immer gleich aus.

    eine weitere frage ist, ich moechte den punkt irgned wo rein zufaellig in diesem raum erscheinen lassen also den start wert in dem konstruktor per zufall generiéren, klappt nicht, wieso?

    Weil der Zufallscode auskommentiert ist. Du solltest noch bedenken, dass dir dieser Code nur ganzzahlige Ergebnisse liefern kann. Ist vielleicht nicht, was du an dieser Stelle willst. Außerdem solltest du srand nur einmal aufrufen.

    und vieleicht nur noch mal so ne frage zu klassen, kann es sein das ich keine referenzen und static variablen in einer klasse inkrementieren kann?

    Dass du das nicht kannst, ist durchaus möglich. Allgemein geht es aber schon. Gibt es ein konkretes Problem?

    und ist es vieleicht moeglich bei vererbung von der neuen klasse auf die in der basisklasse privaten variablen zuzugreifen???

    Nein, ist nicht möglich. Mit private sagst du ausdrücklich, dass dieser Zugriff nicht möglich sein soll.

    Und nebenbei: IMHO ist es Schwachsinn, object von room abzuleiten.



  • hmmm.... ob es nen problem gibt mit den referenzen... durch aus... setze ich ein static vor float _x_obj_pos und die aNDEREN so kommt folgender fehler

    [Linker Error] Unresolved external 'object::_x_obj_pos' referenced from C:\PROGRAMME\BORLAND\CBUILDER6\PROJECTS\KOORDINATEN_PKT.OBJ
    

    und wieso sollte es schwachsinn sein objecte von room abzuleiten... ich brauche doch fuer den zufallswert zur erstellung des startpunkts fuer den punkt... die variable _x_room usw. um den rand() wert per % _x_room zubeschraenken oder geht des anders... und noch was habe ich die funktion srand() nicht nur einmal aufgerufen?



  • T0bi schrieb:

    hmmm.... ob es nen problem gibt mit den referenzen... durch aus... setze ich ein static vor float _x_obj_pos und die aNDEREN so kommt folgender fehler

    [Linker Error] Unresolved external 'object::_x_obj_pos' referenced from C:\PROGRAMME\BORLAND\CBUILDER6\PROJECTS\KOORDINATEN_PKT.OBJ
    

    Dann fehlt wohl die Definitionen der statischen Membervariablen.

    und wieso sollte es schwachsinn sein objecte von room abzuleiten... ich brauche doch fuer den zufallswert zur erstellung des startpunkts fuer den punkt... die variable _x_room usw. um den rand() wert per % _x_room zubeschraenken oder geht des anders...

    Sicher geht das anders. Eine Klasse von einer anderen abzuleiten, nur weil man mal eben irgendwelche Werte braucht, ist jedenfalls keine Vorgehensweise, die du dir angewöhnen solltest.

    und noch was habe ich die funktion srand() nicht nur einmal aufgerufen?

    Der Aufruf steht im Konstruktor von object. object-Instanzen erzeugst du in DrawGL. Und diese Funktion wird wohl häufiger aufgerufen.



  • T0bi schrieb:

    und wieso sollte es schwachsinn sein objecte von room abzuleiten...

    Durch Ableiten drückt man normalerweise eine "ist-ein"-Beziehung aus.
    Ist ein Objekt ein Raum? Doch wohl eher umgekehrt.



  • hmm, kann mir dann jemand mal den code richtig rücken? bzw díe fehler mackieren, wäre nett. danke

    wenn ich des so angehen bewegt sich der punkt immer noch net

    ...
    class object : public room {
    
        public:
    
            object();
    
            int kollision();
            void object_pos();
    
        private:
    
            static float _x_obj_pos;
            static float _y_obj_pos;
            static float _z_obj_pos;
    
            static int xT;
            static int yT;
            static int zT;
    
            GLUquadricObj *sphere;
    };
    
        int object::xT = 1;
        int object::yT = 1;
        int object::zT = 1;
    
        float object::_x_obj_pos = rand() % 2;
        float object::_y_obj_pos = rand() % 2;
        float object::_z_obj_pos = rand() % 2;
    
        object::object() {
    
            sphere = gluNewQuadric();
            gluQuadricNormals( sphere, GL_SMOOTH );
            gluQuadricDrawStyle( sphere, GL_FILL );
        }
    
        int object::kollision() {
    
            if( ( _x_obj_pos <=  _room_x ) && ( xT == 1 ) ) {
    
                _x_obj_pos += 0.01f;
            }
            else {
    
                return xT = -1;
            }
    
            return 0;
        }
    
        void object::object_pos() {
    
            kollision();
    
            glTranslatef( _x_obj_pos, _y_obj_pos, _z_obj_pos );
            glColor3ub( 255, 255, 0 );
    
            gluSphere( sphere, 0.1f, 50.0f, 50.0f );
    
        }
    

    hmmm was muss noch geaendert werden?



  • mach dich bitte erstmal mit den grundlagen objektorientierter programmierung vertraut.

    als anhaltspunkt:

    Raum raum;   // members: zentrum, ausdehnung
    Punkt punkt; // members: aktuelle position, bewegungsrichtung
    
    while (!abbruch)
    {
      glClear();
      // + viewport/matrizen aufsetzen
    
      punkt.kollision(raum); // richtung aendern wenn an wand oder sowas
      raum.draw();
      punkt.draw();
    
      glSwapBuffers();
    }
    

Anmelden zum Antworten