Files
GTSchoolShit/CS4451/oglexamples/3d.c
2025-06-07 01:59:34 -04:00

130 lines
2.8 KiB
C

#ifdef _WIN32
#include <windows.h>
#endif
#include <GL/glut.h> // glut.h already includes GL/gl.h and GL/glu.h
#include <stdlib.h>
#include <stdio.h>
/* you may need to locate glut.h on your computer and change the path accordingly.
* It is most likely in ~/include or ~include/GL.
*/
/* the viewport is 500x500 with the origin at (0,0) */
int Vx_min=0, Vx_max=500, Vy_min=0, Vy_max=500, Vz_min=0, Vz_max=0;
int frame_width, frame_height;
void init(void)
{
glClearColor (0.0, 0.0, 0.0, 0.0);
}
void display(void)
{
glClear (GL_COLOR_BUFFER_BIT);
/* green */
glColor3f(0.0,1.0,0.0); /* params are floats in range [0.0,1.0] */
/* draws one or more lines */
glBegin(GL_LINES);
/* params are floats */
glVertex2f(-150.0, -150.0); /* 2d floats (z=0) */
glVertex2f( 150.0, -150.0);
/* params are integers */
glVertex2i(150, -150);
glVertex2i(150, 150);
/* params are doubles */
glVertex2d(150.0, 150.0);
glVertex2d(-150.0, 150.0);
/* params are floats */
glVertex2f(-150.0, 150.0);
glVertex2f(-150.0, -150.0);
glEnd();
/* blue */
glColor3ub(0,0,255); /* params are unsigned bytes in range [0,255] */
/* draws one polygon */
glBegin(GL_POLYGON);
glVertex2i(-125, -125);
glVertex2i(125, -125);
glVertex2i(125, 125);
glVertex2i(-125, 125);
glEnd();
/* black */
glColor3f(0.0,0.0,0.0); /* params are floats in range [0.0,1.0] */
/* draws one or more triangles */
glBegin(GL_TRIANGLES);
glVertex2i(-100, -100);
glVertex2i(100, -100);
glVertex2i(0, 100);
glEnd();
glColor3f(1.0,0.0,0.0);
glBegin(GL_TRIANGLES);
glVertex2i(-100, -100);
glVertex2i(-100, 100);
glVertex2i(100, 0);
glEnd();
glFlush ();
}
void reshape (int w, int h)
{
frame_width = w;
frame_height = h;
glViewport (0, 0, (GLsizei) w, (GLsizei) h);
glMatrixMode (GL_PROJECTION);
glLoadIdentity ();
// gluOrtho2D(Vx_min, Vx_max, Vy_min, Vy_max); // 2d
glFrustum (-1.0, 1.0, -1.0, 1.0, 1.5, 500.0); // 3d
glMatrixMode (GL_MODELVIEW);
glLoadIdentity(); // 3d
gluLookAt (0.0, 0.0, 375.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); // 3d
}
void mouse(int button, int state, int x, int y)
{
switch (button) {
case GLUT_LEFT_BUTTON:
if (state == GLUT_DOWN) {
printf("left mouse click\n");
glutPostRedisplay();
}
break;
default:
break;
}
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize (Vx_max-Vx_min, Vy_max-Vy_min);
glutInitWindowPosition (100, 100);
glutCreateWindow (argv[0]);
init ();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutMouseFunc(mouse);
glutMainLoop();
return EXIT_SUCCESS;
}