Last active
November 1, 2016 15:11
-
-
Save duanebester/8918426 to your computer and use it in GitHub Desktop.
Making shapes
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
Makefile: | |
CC = g++ | |
CFLAGS = -Wall | |
PROG = basicshapes | |
SRCS = main.cpp | |
ifeq ($(shell uname),Darwin) | |
LIBS = -framework OpenGL -framework GLUT | |
else | |
LIBS = -lglut | |
endif | |
all: $(PROG) | |
$(PROG): $(SRCS) | |
$(CC) $(CFLAGS) -o $(PROG) $(SRCS) $(LIBS) | |
clean: | |
rm -f $(PROG) | |
*/ | |
#include <iostream> | |
#include <stdlib.h> //Needed for "exit" function | |
//Include OpenGL header files, so that we can use OpenGL | |
#ifdef __APPLE__ | |
#include <OpenGL/OpenGL.h> | |
#include <GLUT/glut.h> | |
#else | |
#include <GL/glut.h> | |
#endif | |
using namespace std; | |
//Called when a key is pressed | |
void handleKeypress(unsigned char key, //The key that was pressed | |
int x, int y) { //The current mouse coordinates | |
switch (key) { | |
case 27: //Escape key | |
exit(0); //Exit the program | |
} | |
} | |
//Initializes 3D rendering | |
void initRendering() { | |
//Makes 3D drawing work when something is in front of something else | |
glEnable(GL_DEPTH_TEST); | |
} | |
//Called when the window is resized | |
void handleResize(int w, int h) { | |
//Tell OpenGL how to convert from coordinates to pixel values | |
glViewport(0, 0, w, h); | |
glMatrixMode(GL_PROJECTION); //Switch to setting the camera perspective | |
//Set the camera perspective | |
glLoadIdentity(); //Reset the camera | |
gluPerspective(45.0, //The camera angle | |
(double)w / (double)h, //The width-to-height ratio | |
1.0, //The near z clipping coordinate | |
200.0); //The far z clipping coordinate | |
} | |
//Draws the 3D scene | |
void drawScene() { | |
//Clear information from last draw | |
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); | |
glMatrixMode(GL_MODELVIEW); //Switch to the drawing perspective | |
glLoadIdentity(); //Reset the drawing perspective | |
glBegin(GL_QUADS); //Begin quadrilateral coordinates | |
//Cube | |
glVertex3f(-1.0f, -2.0f, -5.0f); | |
glVertex3f(1.0f, -2.0f, -5.0f); | |
glVertex3f(1.0f, 0.0f, -5.0f); | |
glVertex3f(-1.0f, 0.0f, -5.0f); | |
glEnd(); //End quadrilateral coordinates | |
glBegin(GL_TRIANGLES); //Begin triangle coordinates | |
//Pentagon | |
glVertex3f(0.5f, 0.5f, -5.0f); | |
glVertex3f(1.5f, 0.5f, -5.0f); | |
glVertex3f(0.5f, 1.0f, -5.0f); | |
glVertex3f(0.5f, 1.0f, -5.0f); | |
glVertex3f(1.5f, 0.5f, -5.0f); | |
glVertex3f(1.5f, 1.0f, -5.0f); | |
glVertex3f(0.5f, 1.0f, -5.0f); | |
glVertex3f(1.5f, 1.0f, -5.0f); | |
glVertex3f(1.0f, 1.5f, -5.0f); | |
//Triangle | |
glVertex3f(-0.5f, 0.5f, -5.0f); | |
glVertex3f(-1.0f, 1.5f, -5.0f); | |
glVertex3f(-1.5f, 0.5f, -5.0f); | |
glEnd(); //End triangle coordinates | |
glutSwapBuffers(); //Send the 3D scene to the screen | |
} | |
int main(int argc, char** argv) { | |
//Initialize GLUT | |
glutInit(&argc, argv); | |
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); | |
glutInitWindowSize(400, 400); //Set the window size | |
//Create the window | |
glutCreateWindow("Basic Shapes - videotutorialsrock.com"); | |
initRendering(); //Initialize rendering | |
//Set handler functions for drawing, keypresses, and window resizes | |
glutDisplayFunc(drawScene); | |
glutKeyboardFunc(handleKeypress); | |
glutReshapeFunc(handleResize); | |
glutMainLoop(); //Start the main loop. glutMainLoop doesn't return. | |
return 0; //This line is never reached | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment