Glut und Subwindows



  • Hi

    für eine bessere Darstellung eines Problems sehe ich mich gezwungen mit Glut 2 Fenster zu rendern. Ich würde alles gerne in einem Hauptfenster (2D) mit einem Subwindow (3D) erledigen. Irgendwie funktionierts nicht und ich hab ehrlich gesagt keinen Schimmer woran es liegt.

    #include <stdio.h>
    #include <math.h>
    #include <stdlib.h>
    #include <time.h>
    
    #include <windows.h>
    #include <GL/glut.h>
    
    #define WND_HEIGHT 300
    #define WND_WIDTH 512
    
    int mainWnd, subWnd;
    
    void mainDisp(void)
    {
      glutSetWindow (mainWnd);
      glClearColor (1, 1, 1, 0.0);
      glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
      glLoadIdentity ();
    
    	glBegin(GL_LINES);
    		glColor3f(.8, .4, .4);
    		glVertex3f(0,0,0);
    		glVertex3f(2,0,0);
    
    		glColor3f(.4, .8, .4);
    		glVertex3f(0,0,0);
    		glVertex3f(0,2,0);
       glEnd();
    
      glutSwapBuffers();
    }
    
    void subDisp(void)
    {
      glutSetWindow (subWnd);
      glClearColor (0.25, 0.25, 0.25, 0.0);
      glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
      glLoadIdentity ();
    
    	glBegin(GL_LINES);
    		glColor3f(.8, .4, .4);
    		glVertex3f(0,0,0);
    		glVertex3f(2,0,0);
    
    		glColor3f(.4, .8, .4);
    		glVertex3f(0,0,0);
    		glVertex3f(0,2,0);
       glEnd();
    
      glutSwapBuffers();
    }
    
    void mainReshape(int w, int h)
    {
      if(!h) h = 1;
    
      glViewport (0, 0, w, h);
      glMatrixMode (GL_PROJECTION);
      glLoadIdentity ();
    
      gluOrtho2D (0, WND_WIDTH/2, 0, WND_HEIGHT);
    
      glMatrixMode (GL_MODELVIEW);
      glLoadIdentity ();
    
      glutSetWindow (subWnd);
      glutReshapeWindow (WND_WIDTH / 2, WND_HEIGHT );
      glutPositionWindow (WND_WIDTH/2, 0);
      glutSetWindow (mainWnd);
    }
    
    void subReshape(int w, int h)
    {
    	GLfloat nRange = 10.0f;
    	float ar = (float)h/(float)w;
    
    	if(!h) h = 1;
    	glViewport(0,0,w,h);
    	glMatrixMode(GL_PROJECTION);
    	glLoadIdentity();
    
    	if(w <=h)
    		glOrtho(-nRange, nRange, -nRange*ar, nRange*ar, -nRange, nRange);
    	else
    		glOrtho(-nRange*ar, nRange*ar, -nRange, nRange, -nRange, nRange);
    
    	glMatrixMode(GL_MODELVIEW);
    	glLoadIdentity();
    
    }
    int main(void)
    {
    
      glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);
      glutInitWindowPosition (100, 100);
      glutInitWindowSize (WND_WIDTH, WND_HEIGHT);
    
      mainWnd= glutCreateWindow ("test");
      glutDisplayFunc (mainDisp);
      glutReshapeFunc (mainReshape);
    
      subWnd = glutCreateSubWindow (mainWnd, WND_WIDTH/2, 0, WND_WIDTH / 2, WND_HEIGHT );
      glutDisplayFunc (subDisp);
      glutReshapeFunc (subReshape);
    
      glutMainLoop ();
    
    return 0;
    }
    

Anmelden zum Antworten