Anzeige:
Ergebnis 1 bis 2 von 2

Thema: OpenGL: Durchscheinende Wände

  1. #1
    Registrierter Benutzer
    Registriert seit
    26.02.2004
    Ort
    Grefrath
    Beiträge
    28

    OpenGL: Durchscheinende Wände

    Schönen guten Tag zusammen!

    Ich versuche mich nun an OpenGL, komme da aber nicht sonderlich weit.
    Ich hab mal mit den Nehe-Tutorials angefangen, hänge aber schon bei Nr. 5.:

    Wie man auf dem 1. Bild schön sehen kann, wird eine Pyramide gezeichnet die sich dreht.
    Sieht ja soweit auch alles ganz korrekt aus.

    Wenn die Pyramide sich aber ca. 180° weiter gedreht hat, dann leuchtet die rote (jetzt Rück-)Wand durch den Rest der Pyramide durch.
    Warum?

    Hab ich ne fehler in meinem Code?
    Code:
    void worker_func(void)
    {
        static int rotation = 0;
        float height;
        GLfloat		rtri;
    
     // Create window for OpenGL output
      if (!SDL_SetVideoMode(640, 480, 32, SDL_OPENGL)) {
        printf ("Failed to create window\n");
        kiosk_vtable.disable_plugin (&kiosk_vtable);
        return;
      }
    
      glViewport(0,0,640,480);
      glMatrixMode(GL_PROJECTION);
      gluPerspective(45, 640/480, 1, 10);
      glMatrixMode(GL_MODELVIEW);
    
      glLoadIdentity();					// Reset The View
      glTranslatef(-0.0f,0.0f,-6.0f);				// Move Left And Into The Screen
    
      while (thread_control == GO) {
    
        // Get the bass amplitude
        SDL_mutexP(mutex);
        height = shared_freq_data[0][0] / 1024.0;
        SDL_mutexV(mutex);
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);	// Clear The Screen And The Depth Buffer
        glRotatef(0.2f,0.0f,1.0f,0.0f);				// Rotate The Pyramid On It's Y Axis
    
        // Draw pyramid
    glBegin(GL_TRIANGLES);		
    		glColor3f(1.0f,0.0f,0.0f);			// Red
    		glVertex3f( 0.0f, 1.0f, 0.0f);			// Top Of Triangle (Front)
    		glColor3f(0.0f,1.0f,0.0f);			// Green
    		glVertex3f(-1.0f,-1.0f, 1.0f);			// Left Of Triangle (Front)
    		glColor3f(0.0f,0.0f,1.0f);			// Blue
    		glVertex3f( 1.0f,-1.0f, 1.0f);			// Right Of Triangle (Front)
    		
    		glColor3f(1.0f,0.0f,0.0f);			// Red
    		glVertex3f( 0.0f, 1.0f, 0.0f);			// Top Of Triangle (Right)
    		glColor3f(0.0f,0.0f,1.0f);			// Blue
    		glVertex3f( 1.0f,-1.0f, 1.0f);			// Left Of Triangle (Right)
    		glColor3f(0.0f,1.0f,0.0f);			// Green
    		glVertex3f( 1.0f,-1.0f, -1.0f);			// Right Of Triangle (Right)
    
    		glColor3f(1.0f,0.0f,0.0f);			// Red
    		glVertex3f( 0.0f, 1.0f, 0.0f);			// Top Of Triangle (Back)
    		glColor3f(0.0f,1.0f,0.0f);			// Green
    		glVertex3f( 1.0f,-1.0f, -1.0f);			// Left Of Triangle (Back)
    		glColor3f(0.0f,0.0f,1.0f);			// Blue
    		glVertex3f(-1.0f,-1.0f, -1.0f);			// Right Of Triangle (Back)
    	
    		glColor3f(1.0f,0.0f,0.0f);			// Red
    		glVertex3f( 0.0f, 1.0f, 0.0f);			// Top Of Triangle (Left)
    //		glColor3f(0.0f,0.0f,1.0f);			// Blue
    		glVertex3f(-1.0f,-1.0f,-1.0f);			// Left Of Triangle (Left)
    //		glColor3f(0.0f,1.0f,0.0f);			// Green
    		glVertex3f(-1.0f,-1.0f, 1.0f);			// Right Of Triangle (Left)
    	glEnd();						// Done Drawing The Pyramid						// Done Drawing The Quad
        glFinish();
    
        SDL_GL_SwapBuffers();
    
        xmms_usleep(1000000 / 70);  
      }
      printf("Worker thread: Exiting\n");
    }
    Wie man vielleicht im Code sieht, ist das ganze Teil eines xmms-plugins, aber das dürfte OpenGL ja nicht stören...

    Bin für jeden Rat dankbar. Programmiere mit OpenGL jetzt seit immerhin 3h

  2. #2
    Registrierter Benutzer Avatar von dra
    Registriert seit
    02.11.2004
    Ort
    Ulm
    Beiträge
    29
    Bring mal glEnable( GL_DEPTH_TEST ); irgendwo in deiner Initialisierung unter, um den Depth-Buffer einzuschalten.

    Oder du änderst das Backface-Culling mit glCullFace() und glCullMode. Redbook/Bluebook/Manpages helfen dir da weiter.

    Gruß,
    dra
    "Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning." -- Rich Cook

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •