2013-02-24 51 views
2

我想讓我的窗口(800800)的大小,但是GL命令我的窗口審時度勢,在OpenGL

glutInitWindowSize(800, 500); 

是不是影響我的代碼以任何方式。 Bellow是完整的源代碼。

#include <stdio.h> 
#include <stdlib.h> 
#include <X11/X.h> 
#include <X11/Xlib.h> 
#include <GL/gl.h> 
#include <GL/glx.h> 
#include <GL/glu.h> 
#include <GL/glut.h> 
#include <iostream> 
#include <math.h> 
using namespace std; 

struct point{ 

GLfloat x; 
GLfloat y; 

}; 

float a,b; 

void initGL() { 
    // Set "clearing" or background color 
    glClearColor(0.0f, 0.0f, 0.0f, 1.0f); // Black and opaque 
} 

/* Handler for window-repaint event. Call back when the window first appears and 
    whenever the window needs to be re-painted. */ 
void display() { 
    glClear(GL_COLOR_BUFFER_BIT); // Clear the color buffer with current clearing color 
// glutInitWindowSize(800, 800); 

float i; 
float radians; 
struct point graph[1000]; 
struct point graphC[1000]; 

for(i = 0.0; i < 1000.0; i++) { 
    graph[(int)i].x = i/1000.0; 
    graph[(int)i].y = sqrt(pow(i/100,3) + a*i/100.0 + b)/10.0; 
    graphC[(int)i].x = i/1000; 
    graphC[(int)i].y = -1*sqrt(pow(i/100,3) + a*i/100.0 + b)/10.0; 
} 

glBegin(GL_POINTS); 

for(int j = 0; j < 1000; j ++){ 
    glColor3f(1.0f, 0.0f, 0.0f); 
    glVertex2f(graph[j].x,graph[j].y); 
    glColor3f(1.0f, 0.0f, 0.0f); 
    glVertex2f(graphC[j].x,graphC[j].y); 
} 

glEnd(); 

for(i = 0.0; i > -1000.0; i--) { 
    graph[-1*(int)i].x = i/1000.0; 
    graph[-1*(int)i].y = sqrt(pow(i/100,3) + a*i/100.0 + b)/10.0; 
    graphC[-1*(int)i].x = i/1000; 
    graphC[-1*(int)i].y = -1*sqrt(pow(i/100,3) + a*i/100.0 + b)/10.0; 
} 

glBegin(GL_POINTS); 

for(int j = 0; j < 1000; j ++){ 
    glColor3f(1.0f, 0.0f, 0.0f); 
    glVertex2f(graph[j].x,graph[j].y); 
     glColor3f(1.0f, 0.0f, 0.0f); 
     glVertex2f(graphC[j].x,graphC[j].y); 
    } 

    glEnd(); 

    glFlush(); // Render now 

} 

/* Main function: GLUT runs as a console application starting at main() */ 
int main(int argc, char** argv) { 
cout<<"Please enter in a\n"; 
cin>>a; 
cout<<"Please enter in b\n"; 
cin>>b; 
    glutInit(&argc, argv);   // Initialize GLUT 
    glutCreateWindow("Scientific Plot"); // Create window with the given title 
    glutInitWindowSize(800, 500); // Set the window's initial width & height 
    glutInitWindowPosition(400, 400); // Position the window's initial top-left corner 
    glutDisplayFunc(display);  // Register callback handler for window re-paint event 
    initGL();      // Our own OpenGL initialization 
    glutMainLoop();     // Enter the event-processing loop 
    return 0; 
} 

回答

7

命令狀glutInitWindowSize需要glutCreateWindow之前調用,否則沒有任何效果。您可以在創建後通過調用glutReshapWindow來更改窗口大小。