130 lines
2.8 KiB
C
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;
|
|
}
|