2010-10-22 7 views
5

तो मैं glViewport(), "बहुकालिक समय" का उपयोग करने के तरीके सीखने की कोशिश कर रहा हूं। नीचे मेरा कोड है, मैंने दूसरों के उदाहरणों का पालन करने की कोशिश की है, लेकिन वे अन्य चीजों के साथ इतनी गड़बड़ी कर रहे हैं कि मैं जो कर रहा हूं उससे प्रासंगिक नहीं है, मुझे नहीं पता कि वे क्या कर रहे हैं। जिस तरह से मैं अपनी खिड़की प्रणाली को प्रबंधित करने के लिए ग्लूट का उपयोग कर रहा हूं। इसलिए सीखने का सबसे अच्छा तरीका है कि मेरे लिए एक सरल उदाहरण चलाना, फिर वहां से बाहर निकलना। नीचे एक सरल प्रोग्राम के लिए मेरा कोड है जो स्क्रीन को दो में विभाजित करता है और दो समान क्षेत्रों को खींचता है, मुझे पता नहीं लगाया जा सकता है कि दाईं ओर का क्षेत्र क्यों बढ़ रहा है जब gluPerspective() दोनों दृश्य बंदरगाहों के लिए समान है। कृपया, अगर आप मुझे बता सकते हैं कि मैं अपने कोड में क्या गलत कर रहा हूं तो इससे बहुत मदद मिलेगी। बाहरी संसाधन बहुत अच्छे हैं, लेकिन मुझे सरल, सरल उदाहरणों की आवश्यकता है (नाट रॉबिन्सन उदाहरण नहीं)।ओपनजीएल एकाधिक व्यूपोर्ट्स और gluPerspective()

GLfloat width = 800, height = 600, x_0 = 470, y_0 = 0; 
int mainWindow; 


    void resize(int w, int h){ 
     width=w; 
     height=h; 
    } 

    void draw(void){ 
     glEnable(GL_SCISSOR_TEST); 
     glClearDepth(1.0); 
     glClearColor(0.0, 0.0, 0.0, 1.0); 
     glEnable(GL_DEPTH_TEST); 
     glEnable(GL_LIGHT0); 
     glEnable(GL_LIGHTING); 
     GLfloat color[4] = {1.0, 0.0, 0.0, 1.0}; 

     /* 
      * LEFT VIEW PORT 
      */ 
     glMatrixMode(GL_PROJECTION); 
     glLoadIdentity(); 
     glViewport(0, 0, (float)width/2 , height); 
     gluPerspective(45, ((float)width/2)/(float)height, 1, 2000); 
     glMatrixMode(GL_MODELVIEW); 
     glScissor(0, 0, (float)width , height); 
     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
     glLoadIdentity(); 
     gluLookAt(0.0, 0.0, 50.0, 
        0.0, 0.0, 0.0, 
        0.0, 1.0, 0.0); 

     glPushAttrib(GL_LIGHTING_BIT | GL_CURRENT_BIT); 
     glPushMatrix(); 
     glMaterialfv(GL_FRONT, GL_DIFFUSE, color); 
     glutSolidSphere(10.0, 20, 40); 
     glPopMatrix(); 
     glPopAttrib(); 

     /* 
      * THE SECOND VIEW PORT 
      */ 
     glMatrixMode(GL_PROJECTION); 
     glLoadIdentity(); 
     glViewport((float)width/2, 0, width , height); 
     gluPerspective(45, ((float)width)/2/((float)height), 1, 2000); 
     glMatrixMode(GL_MODELVIEW); 
     glScissor(((float)width/2), 0, width , height); 
     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
     glLoadIdentity(); 
     gluLookAt(0.0, 0.0, 50.0, 
        0.0, 0.0, 0.0, 
        0.0, 1.0, 0.0); 
     glPushAttrib(GL_LIGHTING_BIT | GL_CURRENT_BIT); 
     glPushMatrix(); 
     glMaterialfv(GL_FRONT, GL_DIFFUSE, color); 
     glutSolidSphere(10.0, 20, 40); 
     glPopMatrix(); 
     glPopAttrib(); 

     glDisable(GL_SCISSOR_TEST); 
     glFlush(); 
     glutSwapBuffers(); 
    } 

    void glutAppInitialize(void){ 
     GLfloat light_ambient[] = {0.2, 0.2, 0.2, 1.0}; 
     GLfloat light_diffuse[] = {1.0, 1.0, 1.0, 1.0}; 
     GLfloat light_specular[] = {1.0, 1.0, 1.0, 1.0}; 
     GLfloat light_position[] = {1.0, 1.0, 0.0, 0.0}; 
     glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient); 
     glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse); 
     glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular); 
     glLightfv(GL_LIGHT0, GL_POSITION, light_position); 
    } 

    int main(int argc, char* argv[]){ 
     glutInit(&argc, argv); 
     glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA); 
     glutInitWindowPosition(x_0, y_0); 
     glutInitWindowSize(width ,height); 
     glutAppInitialize(); 
     mainWindow = glutCreateWindow("Tori App"); 
     glutDisplayFunc(draw); 
     glutReshapeFunc(resize); 
     glutMainLoop(); 
     return(0); 
    } 

ध्यान दें कि मैं चारों ओर खेल रहा हूँ, जबकि मैं एक प्रतिक्रिया पर इंतज़ार, मैं इसे मैं चाहता था करने के लिए मिल गया है, लेकिन समाधान नहीं के बाद से बनाता है, कोड की लाइनों को देखने के लिए कृपया मूल रूप से मैं ले जाया गया दृश्य बंदरगाहों शुरू आधे की बजाय स्क्रीन के 1/4 की स्थिति और मैं अब ग्लूपरपेक्टिव पर दो से विभाजित नहीं कर रहा हूं।

/* 
* THE SECOND VIEW PORT 
*/ 

    glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
glViewport(width/4, 0, width , height); 
gluPerspective(45, ((float)width)/(((float)height)), 1, 2000); 

उत्तर

5

glViewport पर तर्कों की दूसरी जोड़ी चौड़ाई और ऊंचाई, नहीं समाप्त x/y स्थिति है। आपका दूसरा glViewport glViewport(width/2, 0, width/2, height)

होना चाहिए
संबंधित मुद्दे