|
|
|
@ -9,74 +9,72 @@ |
|
|
|
|
#include <GL/glfw3.h> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int main( void ) |
|
|
|
|
int main(void) |
|
|
|
|
{ |
|
|
|
|
int width, height, x; |
|
|
|
|
double t; |
|
|
|
|
GLFWwindow window; |
|
|
|
|
|
|
|
|
|
// Initialise GLFW
|
|
|
|
|
if( !glfwInit() ) |
|
|
|
|
if (!glfwInit()) |
|
|
|
|
{ |
|
|
|
|
fprintf( stderr, "Failed to initialize GLFW\n" ); |
|
|
|
|
exit( EXIT_FAILURE ); |
|
|
|
|
fprintf(stderr, "Failed to initialize GLFW\n"); |
|
|
|
|
exit(EXIT_FAILURE); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Open a window and create its OpenGL context
|
|
|
|
|
window = glfwOpenWindow( 640, 480, GLFW_WINDOWED, "Spinning Triangle", NULL ); |
|
|
|
|
window = glfwOpenWindow(640, 480, GLFW_WINDOWED, "Spinning Triangle", NULL); |
|
|
|
|
if (!window) |
|
|
|
|
{ |
|
|
|
|
fprintf( stderr, "Failed to open GLFW window\n" ); |
|
|
|
|
|
|
|
|
|
glfwTerminate(); |
|
|
|
|
exit( EXIT_FAILURE ); |
|
|
|
|
fprintf(stderr, "Failed to open GLFW window\n"); |
|
|
|
|
exit(EXIT_FAILURE); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Ensure we can capture the escape key being pressed below
|
|
|
|
|
glfwEnable( window, GLFW_STICKY_KEYS ); |
|
|
|
|
glfwEnable(window, GLFW_STICKY_KEYS); |
|
|
|
|
|
|
|
|
|
// Enable vertical sync (on cards that support it)
|
|
|
|
|
glfwSwapInterval( 1 ); |
|
|
|
|
glfwSwapInterval(1); |
|
|
|
|
|
|
|
|
|
do |
|
|
|
|
{ |
|
|
|
|
t = glfwGetTime(); |
|
|
|
|
glfwGetMousePos( window, &x, NULL ); |
|
|
|
|
double t = glfwGetTime(); |
|
|
|
|
glfwGetMousePos(window, &x, NULL); |
|
|
|
|
|
|
|
|
|
// Get window size (may be different than the requested size)
|
|
|
|
|
glfwGetWindowSize( window, &width, &height ); |
|
|
|
|
glfwGetWindowSize(window, &width, &height); |
|
|
|
|
|
|
|
|
|
// Special case: avoid division by zero below
|
|
|
|
|
height = height > 0 ? height : 1; |
|
|
|
|
|
|
|
|
|
glViewport( 0, 0, width, height ); |
|
|
|
|
glViewport(0, 0, width, height); |
|
|
|
|
|
|
|
|
|
// Clear color buffer to black
|
|
|
|
|
glClearColor( 0.0f, 0.0f, 0.0f, 0.0f ); |
|
|
|
|
glClear( GL_COLOR_BUFFER_BIT ); |
|
|
|
|
glClearColor(0.f, 0.f, 0.f, 0.f); |
|
|
|
|
glClear(GL_COLOR_BUFFER_BIT); |
|
|
|
|
|
|
|
|
|
// Select and setup the projection matrix
|
|
|
|
|
glMatrixMode( GL_PROJECTION ); |
|
|
|
|
glMatrixMode(GL_PROJECTION); |
|
|
|
|
glLoadIdentity(); |
|
|
|
|
gluPerspective( 65.0f, (GLfloat)width/(GLfloat)height, 1.0f, 100.0f ); |
|
|
|
|
gluPerspective(65.0f, (GLfloat)width/(GLfloat)height, 1.f, 100.0f); |
|
|
|
|
|
|
|
|
|
// Select and setup the modelview matrix
|
|
|
|
|
glMatrixMode( GL_MODELVIEW ); |
|
|
|
|
glLoadIdentity(); |
|
|
|
|
gluLookAt( 0.0f, 1.0f, 0.0f, // Eye-position
|
|
|
|
|
0.0f, 20.0f, 0.0f, // View-point
|
|
|
|
|
0.0f, 0.0f, 1.0f ); // Up-vector
|
|
|
|
|
gluLookAt(0.f, 1.f, 0.f, // Eye-position
|
|
|
|
|
0.f, 20.f, 0.f, // View-point
|
|
|
|
|
0.f, 0.f, 1.f); // Up-vector
|
|
|
|
|
|
|
|
|
|
// Draw a rotating colorful triangle
|
|
|
|
|
glTranslatef( 0.0f, 14.0f, 0.0f ); |
|
|
|
|
glRotatef( 0.3f*(GLfloat)x + (GLfloat)t*100.0f, 0.0f, 0.0f, 1.0f ); |
|
|
|
|
glBegin( GL_TRIANGLES ); |
|
|
|
|
glColor3f( 1.0f, 0.0f, 0.0f ); |
|
|
|
|
glVertex3f( -5.0f, 0.0f, -4.0f ); |
|
|
|
|
glColor3f( 0.0f, 1.0f, 0.0f ); |
|
|
|
|
glVertex3f( 5.0f, 0.0f, -4.0f ); |
|
|
|
|
glColor3f( 0.0f, 0.0f, 1.0f ); |
|
|
|
|
glVertex3f( 0.0f, 0.0f, 6.0f ); |
|
|
|
|
glTranslatef(0.f, 14.f, 0.f); |
|
|
|
|
glRotatef(0.3f * (GLfloat) x + (GLfloat) t * 100.f, 0.f, 0.f, 1.f); |
|
|
|
|
|
|
|
|
|
glBegin(GL_TRIANGLES); |
|
|
|
|
glColor3f(1.f, 0.f, 0.f); |
|
|
|
|
glVertex3f(-5.f, 0.f, -4.f); |
|
|
|
|
glColor3f(0.f, 1.f, 0.f); |
|
|
|
|
glVertex3f(5.f, 0.f, -4.f); |
|
|
|
|
glColor3f(0.f, 0.f, 1.f); |
|
|
|
|
glVertex3f(0.f, 0.f, 6.f); |
|
|
|
|
glEnd(); |
|
|
|
|
|
|
|
|
|
// Swap buffers
|
|
|
|
@ -84,12 +82,12 @@ int main( void ) |
|
|
|
|
glfwPollEvents(); |
|
|
|
|
|
|
|
|
|
} // Check if the ESC key was pressed or the window was closed
|
|
|
|
|
while( glfwIsWindow(window) && |
|
|
|
|
glfwGetKey( window, GLFW_KEY_ESC ) != GLFW_PRESS ); |
|
|
|
|
while (glfwIsWindow(window) && |
|
|
|
|
glfwGetKey(window, GLFW_KEY_ESC) != GLFW_PRESS); |
|
|
|
|
|
|
|
|
|
// Close OpenGL window and terminate GLFW
|
|
|
|
|
glfwTerminate(); |
|
|
|
|
|
|
|
|
|
exit( EXIT_SUCCESS ); |
|
|
|
|
exit(EXIT_SUCCESS); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|