Rendern funktioniert nicht



  • Ich bin gerade dabei OpenGL zu lernen.
    Dabei habe ich schon ein paar Programme geschrieben. Ich dachte mir da einfach mal, dass ich alle "Nehe" Tutorialls zu üben.
    Dabei wollte ich ein Objekt rotieren nur irgendwie rendert er meine Funktion nicht dauerhaft ich habe kein Plan voran das liegen könnte.

    #include <stdlib.h>
    #include "glut.h"
    #include <iostream>
    #include <string>
    #include <list>
    #include <vector>
    #include <algorithm>
    
    using namespace std;
    
    GLuint win;
    
    GLfloat rtri; 
    GLfloat rquad;
    
    bool fullscreen = false;
    
    void rendern()
    {
    	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);	
    	glPushMatrix();
    	glLoadIdentity();									
    	glTranslatef(0.3f,0.0f,1.0f); 
    	glRotatef(rtri,0.0f,1.0f,0.0f); 
    	glBegin(GL_TRIANGLES);
    		glColor3f(1.0f,0.0f,0.0f); 
    		glVertex3f( 0.0f, 0.2f, 0.0f);
    		glColor3f(0.0f,1.0f,0.0f); 
    		glVertex3f(-0.2f,-0.2f, 0.0f);
    		glColor3f(0.0f,0.0f,1.0f); 
    		glVertex3f( 0.2f,-0.2f, 0.0f);					
    	glEnd();
    	glPopMatrix();
    	glPushMatrix();
    	glTranslatef(-0.3f,0.0f,0.0f);
    	glRotatef(rquad,1.0f,0.0f,0.0f);
    	glColor3f(0.5f,0.5f,1.0f);
    	glBegin(GL_QUADS);									
    		glVertex3f(-0.2f, 0.2f, 0.0f);					
    		glVertex3f( 0.2f, 0.2f, 0.0f);					
    		glVertex3f( 0.2f,-0.2f, 0.0f);					
    		glVertex3f(-0.2f,-0.2f, 0.0f);					
    	glEnd();
    	glPopMatrix();
    	glutSwapBuffers();
    	glutPostRedisplay();
    	std::cout<<"1\n";
    }
    
    void keyboard(unsigned char key, int, int)	
    { 
    	switch(key)
    	{
        case 'f': case 'F':
        	fullscreen = !fullscreen;
    		if (fullscreen)
    		{
    			glutFullScreen();
    		}
    		else
    		{
    			glutReshapeWindow(800, 600);
    			glutPositionWindow(100, 100);
    		}
    		break;
    	case 'q': case 'Q': case 27:
    		glutDestroyWindow(win);
    		exit(0);
    		break;
    	}
    }
    
    int main(int argc, char** argv)
    {
        glutInit(&argc, argv);
        glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE);
        glutInitWindowSize (800, 600);
        glutInitWindowPosition (100, 100);	
    	win = glutCreateWindow("Projekt 1");
    	glViewport(0,0,800,600);
    	glShadeModel(GL_SMOOTH);							
    	glClearColor(0.0f, 0.0f, 0.0f, 0.5f);			
    	glClearDepth(1.0f);									
    	glEnable(GL_DEPTH_TEST);							
    	glDepthFunc(GL_LEQUAL);								
    	glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
    	glDisable(GL_DEPTH_TEST);
    	glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
    	glMatrixMode(GL_PROJECTION);
        glutDisplayFunc(rendern); 
        glutKeyboardFunc(keyboard);
        glutMainLoop();
    
    	return 0; 
    }
    
    Normalerweise sollte die Schleife ja ständig durchlaufen, aber irgendwie zeichnet er sie einmal und macht dann gar nichts mehr.
    


  • He,

    bin mir nicht sicher ob ich Dir helfen kann, aber guck Dir mal die gluPerspective() http://pyopengl.sourceforge.net/documentation/manual/gluPerspective.3G.xml Methode an - besonders die near und far Werte.
    Du zeichnest Dein Dreieck und Dein Viereck quasi direkt "auf dem Auge des Betrachters"... eventuell reicht es auch aus, die beiden Flächen etwas in den Raum hinein zu zeichnen..

    Soweit von mir, aber wie gesagt, keine Garantie 😉



  • IMO zeichnet GLUT nur, wenn dies nötig ist (Fenstergröße veränder, usw.)

    Für beständiges neuzeichnen gibt's eine on_idle Funktion. Keine Garantie für irgendwelche Namen



  • glutIdleFunc(rendern);
    

    Keine Garantie. Damit kannst du bewirken, dass dein Bild immer wieder
    aufgerufen wird (falss es Veränderungen gibt; hab den Code nicht gelesen).

    Was gluPerspective angeht. Du musst schauen, dass es nicht auf der Ebene
    vom Betrachter ist. In DirectX wird zum Beispiel alles weggeschnitten,
    was nicht zwischen der nahen und der fernen Clipping-Ebene liegt.

    Ich hoffe, ich konnte helfen 😃



  • Ich habe das Probleme gefunden und zwar das ich das ich eine andere Datei immer ausgeführt habe und nicht die richtig xD.
    Zu doof wenn man mehrere Projekte bearbeitet, die alle main heißen^^

    😃 😃


Anmelden zum Antworten