#include <Windows.h>
#include <gl/glew.h>
#include <gl/glut.h>
#include <iostream>
static int wWidth = 800;
static int wHeight = 600;
static float yfov = 45.0f;
static float zNear = 1.0f;
static float zFar = 1600.0f;
static float red[] = {
0.63f,
0.06f,
0.04f,
1.0f
};
static float green[] = {
0.15f,
0.48f,
0.09f,
1.0f
};
static float white[] = {
0.76f,
0.75f,
0.5f,
1.0f
};
using namespace std;
void SetupLights(void);
void ReshapeWindow(int width, int height);
void Render(void);
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glewInit();
glutInitDisplayMode(GLUT_DEPTH | GLUT_RGBA | GLUT_DOUBLE);
glutInitWindowSize(wWidth, wHeight);
glutInitWindowPosition(100, 100);
glutCreateWindow("wtf?");
glutReshapeFunc(ReshapeWindow);
glutDisplayFunc(Render);
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glEnable(GL_CULL_FACE);
glCullFace(GL_BACK);
SetupLights();
glutMainLoop();
}
void SetupLights(void)
{
glEnable(GL_LIGHTING);
float lightPosition[] = {
278.0f,
425.0f,
279.5f,
0.0f
};
float lightIntensity[] = {
0.75f,
0.75f,
0.75f,
1.0f
};
float lightDirection[] = {
0.0f,
-1.0f,
0.0f,
0.0f // i think w component is not needed her but w/e
};
glLightfv(GL_LIGHT0, GL_POSITION, lightPosition);
glLightfv(GL_LIGHT0, GL_AMBIENT_AND_DIFFUSE, lightIntensity);
glLightfv(GL_LIGHT0, GL_SPECULAR, lightIntensity);
glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, lightDirection);
//glLightf(GL_LIGHT0, GL_SPOT_CUTOFF, 170.0f);
//glLightf(GL_LIGHT0, GL_SPOT_EXPONENT, 128.0f);
//glLighti(GL_LIGHT0, GL_CONSTANT_ATTENUATION, 1);
//glLighti(GL_LIGHT0, GL_LINEAR_ATTENUATION, 1);
//glLighti(GL_LIGHT0, GL_QUADRATIC_ATTENUATION, 1);
glEnable(GL_LIGHT0);
}
void ReshapeWindow(int width, int height)
{
float ratio = (float) width / height;
glMatrixMode(GL_PROJECTION);
gluPerspective(yfov, ratio, zNear, zFar);
gluLookAt(278.0f, 273.0f, -800.0f, 278.0f, 273.0f, -799.0f, 0.0f, 1.0f, 0.0f);
glMatrixMode(GL_MODELVIEW);
}
void Render(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glBegin(GL_TRIANGLES);
// CEILING
glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, white);
glMaterialfv(GL_FRONT, GL_SPECULAR, white);
glNormal3f(0.0f, -1.0f, 0.0f);
glVertex3f(556.0f, 548.8f, 0.0f);
glVertex3f(556.0f, 548.0f, 592.2f);
glVertex3f(0.0f, 548.8f, 0.0f);
glVertex3f(556.0f, 548.0f, 592.2f);
glVertex3f(0.0f, 548.8f, 592.2f);
glVertex3f(0.0f, 548.8f, 0.0f);
// FLOOR
glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, white);
glMaterialfv(GL_FRONT, GL_SPECULAR, white);
glNormal3f(0.0f, 1.0f, 0.0f);
glVertex3f(552.8, 0.0f, 0.0f);
glVertex3f(0.0f, 0.0f, 0.0f);
glVertex3f(549.6f, 0.0f, 592.2f);
glVertex3f(0.0f, 0.0f, 0.0f);
glVertex3f(0.0f, 0.0f, 592.2f);
glVertex3f(549.6f, 0.0f, 592.2f);
// BACK WALL
glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, white);
glMaterialfv(GL_FRONT, GL_SPECULAR, white);
glNormal3f(0.0f, 0.0f, -1.0f);
glVertex3f(549.6, 0.0f, 592.2f);
glVertex3f(0.0f, 0.0f, 592.2f);
glVertex3f(556.0f, 548.8f, 592.2f);
glVertex3f(0.0f, 0.0f, 592.2f);
glVertex3f(0.0f, 548.8f, 592.2f);
glVertex3f(556.0f, 548.8f, 592.2f);
// LEFT WALL
glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, red);
glMaterialfv(GL_FRONT, GL_SPECULAR, red);
glNormal3f(-1.0f, 0.0f, 0.0f);
glVertex3f(552.8f, 0.0f, 0.0f);
glVertex3f(549.6f, 0.0f, 592.2f);
glVertex3f(556.0f, 548.8f, 0.0f);
glVertex3f(549.6f, 0.0f, 592.2f);
glVertex3f(556.0f, 548.8f, 592.2f);
glVertex3f(556.0f, 548.8f, 0.0f);
// RIGHT WALL
glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, green);
glMaterialfv(GL_FRONT, GL_SPECULAR, green);
glNormal3f(1.0f, 0.0f, 0.0f);
glVertex3f(0.0f, 0.0f, 592.2f);
glVertex3f(0.0f, 0.0f, 0.0f);
glVertex3f(0.0f, 548.8f, 592.2f);
glVertex3f(0.0f, 0.0f, 0.0f);
glVertex3f(0.0f, 548.8f, 0.0f);
glVertex3f(0.0f, 548.8f, 592.2f);
glEnd();
glutSwapBuffers();
}