데비안에서 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;
}
자명 한 줄을 주석 처리 할 필요가 없습니다. – mk12