2009-04-14 3 views
1

데비안에서 GLFW를 시작하려합니다. 예제 프로그램을 컴파일하고 실행하려했지만 실행을 거부했습니다. 몇 가지 printf 문을 사용하여 프로그램에서 GLFW 창을 열려고 시도 할 때 오류가 발생한 다음 종료됩니다. 그러나 이유는 알 수 없습니다. 어떤 도움이라도 훌륭 할 것입니다.C - GLFW 창이 데비안에서 열리지 않습니다.

#include <stdlib.h> // For malloc() etc. 
#include <stdio.h>  // For printf(), fopen() etc. 
#include <math.h>  // For sin(), cos() etc. 
#include <GL/glfw.h> // For GLFW, OpenGL and GLU 


//---------------------------------------------------------------------- 
// Draw() - Main OpenGL drawing function that is called each frame 
//---------------------------------------------------------------------- 

void Draw(void) 
{ 
    int width, height; // Window dimensions 
    double t;    // Time (in seconds) 
    int k;    // Loop counter 

    // Get current time 
    t = glfwGetTime(); 

    // Get window size 
    glfwGetWindowSize(&width, &height); 

    // Make sure that height is non-zero to avoid division by zero 
    height = height < 1 ? 1 : height; 

    // Set viewport 
    glViewport(0, 0, width, height); 

    // Clear color and depht buffers 
    glClearColor(0.0f, 0.0f, 0.0f, 0.0f); 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

    // Set up projection matrix 
    glMatrixMode(GL_PROJECTION); // Select projection matrix 
    glLoadIdentity();     // Start with an identity matrix 
    gluPerspective(     // Set perspective view 
     65.0,       // Field of view = 65 degrees 
     (double)width/(double)height, // Window aspect (assumes square pixels) 
     1.0,       // Near Z clipping plane 
     100.0       // Far Z clippling plane 
    ); 

    // Set up modelview matrix 
    glMatrixMode(GL_MODELVIEW);  // Select modelview matrix 
    glLoadIdentity();     // Start with an identity matrix 
    gluLookAt(      // Set camera position and orientation 
     0.0, 0.0, 10.0,    // Camera position (x,y,z) 
     0.0, 0.0, 0.0,    // View point (x,y,z) 
     0.0, 1.0, 0.0     // Up-vector (x,y,z) 
    ); 


// **** Draw a circle of points *** 

// Save the current modelview matrix on the stack 
glPushMatrix(); 

// Translate (move) the points to the upper left of the display 
glTranslatef(-4.0f, 3.0f, 0.0f); 

// Rotate the points about the z-axis and the x-axis 
glRotatef(35.0f * (float)t, 0.0f, 0.0f, 1.0f); 
glRotatef(60.0f * (float)t, 1.0f, 0.0f, 0.0f); 

// Now draw the points - we use a for-loop to build a circle 
glColor3f(1.0f, 1.0f, 1.0f); 
glBegin(GL_POINTS); 
for(k = 0; k < 20; k ++) 
{ 
    glVertex3f(2.0f * (float)cos(0.31416 * (double)k), 
       2.0f * (float)sin(0.31416 * (double)k), 
       0.0f); 
} 
glEnd(); 

// Restore modelview matrix 
glPopMatrix(); 


// **** Draw a circle of lines *** 

// Save the current modelview matrix on the stack 
glPushMatrix(); 

// Translate (move) the lines to the upper right of the display 
glTranslatef(4.0f, 3.0f, 0.0f); 

// Rotate the points about the z-axis and the x-axis 
glRotatef(45.0f * (float)t, 0.0f, 0.0f, 1.0f); 
glRotatef(55.0f * (float)t, 1.0f, 0.0f, 0.0f); 

// Now draw the lines - we use a for-loop to build a circle 
glBegin(GL_LINE_LOOP); 
for(k = 0; k < 20; k ++) 
{ 
    glColor3f(1.0f, 0.05f * (float)k, 0.0f); 
    glVertex3f(2.0f * (float)cos(0.31416 * (double)k), 
       2.0f * (float)sin(0.31416 * (double)k), 
       0.0f); 
} 
glEnd(); 

// Restore modelview matrix 
glPopMatrix(); 


// **** Draw a disc using trinagles *** 

// Save the current modelview matrix on the stack 
glPushMatrix(); 

// Translate (move) the triangles to the lower left of the display 
glTranslatef(-4.0f, -3.0f, 0.0f); 

// Rotate the triangles about the z-axis and the x-axis 
glRotatef(25.0f * (float)t, 0.0f, 0.0f, 1.0f); 
glRotatef(75.0f * (float)t, 1.0f, 0.0f, 0.0f); 

// Now draw the triangles - we use a for-loop to build a disc 
// Since we are building a triangle fan, we also specify a first 
// vertex for the centre point of the disc. 
glBegin(GL_TRIANGLE_FAN); 
glColor3f(0.0f, 0.5f, 1.0f); 
glVertex3f(0.0f, 0.0f, 0.0f); 
for(k = 0; k < 21; k ++) 
{ 
    glColor3f(0.0f, 0.05f * (float)k, 1.0f); 
    glVertex3f(2.0f * (float)cos(0.31416 * (double)k), 
       2.0f * (float)sin(0.31416 * (double)k), 
       0.0f); 
} 
glEnd(); 

// Restore modelview matrix 
glPopMatrix(); 


// **** Draw a disc using a polygon *** 

// Save the current modelview matrix on the stack 
glPushMatrix(); 

// Translate (move) the polygon to the lower right of the display 
glTranslatef(4.0f, -3.0f, 0.0f); 

// Rotate the polygon about the z-axis and the x-axis 
glRotatef(65.0f * (float)t, 0.0f, 0.0f, 1.0f); 
glRotatef(-35.0f * (float)t, 1.0f, 0.0f, 0.0f); 

// Now draw the polygon - we use a for-loop to build a disc 
glBegin(GL_POLYGON); 
for(k = 0; k < 20; k ++) 
{ 
    glColor3f(1.0f, 0.0f, 0.05f * (float)k); 
    glVertex3f(2.0f * (float)cos(0.31416 * (double)k), 
       2.0f * (float)sin(0.31416 * (double)k), 
       0.0f); 
} 
glEnd(); 

// Restore modelview matrix 
glPopMatrix(); 


// **** Draw a single quad *** 

// Save the current modelview matrix on the stack 
glPushMatrix(); 

// Rotate the quad about the y-axis 
glRotatef(60.0f * (float)t, 0.0f, 1.0f, 0.0f); 

// Now draw the quad 
glBegin(GL_QUADS); 
glColor3f(1.0f, 0.0f, 0.0f); 
glVertex3f(-1.5f, -1.5f, 0.0f); 
glColor3f(1.0f, 1.0f, 0.0f); 
glVertex3f( 1.5f, -1.5f, 0.0f); 
glColor3f(1.0f, 0.0f, 1.0f); 
glVertex3f( 1.5f, 1.5f, 0.0f); 
glColor3f(0.0f, 0.0f, 1.0f); 
glVertex3f(-1.5f, 1.5f, 0.0f); 
glEnd(); 

// Restore modelview matrix 
glPopMatrix(); 
} 


//---------------------------------------------------------------------- 
// main() - Program entry point 
//---------------------------------------------------------------------- 

int main(int argc, char **argv) 
{ 
int ok;    // Flag telling if the window was opened 
int running;  // Flag telling if the program is running 

// Initialize GLFW 
glfwInit(); 
// Open window 
ok = glfwOpenWindow(
    100, 100,   // Width and height of window 
    8, 8, 8,   // Number of red, green, and blue bits for color buffer 
    8,     // Number of bits for alpha buffer 
    24,    // Number of bits for depth buffer (Z-buffer) 
    0,     // Number of bits for stencil buffer 
    GLFW_WINDOW  // We want a desktop window (could be GLFW_FULLSCREEN) 
); 

     printf("here"); 
// If we could not open a window, exit now 
if(!ok) 
{ 
    glfwTerminate(); 
    return 0; 
} 
printf("not here"); 


// Set window title 
glfwSetWindowTitle("My OpenGL program"); 

// Enable sticky keys 
glfwEnable(GLFW_STICKY_KEYS); 

// Main rendering loop 
do 
{ 
    // Call our rendering function 
    Draw(); 

    // Swap front and back buffers (we use a double buffered display) 
    glfwSwapBuffers(); 

    // Check if the escape key was pressed, or if the window was closed 
    running = !glfwGetKey(GLFW_KEY_ESC) && 
       glfwGetWindowParam(GLFW_OPENED); 
} 
while(running); 

// Terminate GLFW 
glfwTerminate(); 

// Exit program 
return 0; 
} 
+1

자명 한 줄을 주석 처리 할 필요가 없습니다. – mk12

답변

1

glfwOpenWindow가 실패한 것 같습니다. 왜 그렇게 될지 모르겠다. 아마도 z 버퍼에 너무 많은 비트를 사용하고있는 것일까? 그것이 내가 생각할 수있는 유일한 것입니다.

GLFWvidmode dvm; 
glfwGetDesktopMode(&dvm); 
glfwOpenWindow(winWidth, winHeight, dvm.RedBits, dvm.GreenBits, dvm.BlueBits, 0, 0, 0, GLFW_WINDOW); 

을 시도하고 계속 실패하는 경우를 참조하십시오.

+0

GLFW는 요청 된 픽셀 형식을 시스템에서 사용할 수있는 형식과 일치시키고 어떤 채널 비트 깊이와도 정확히 일치하지 않으므로 'glfwOpenWindow'가 실패하지 않습니다. – elmindreda

관련 문제