hello ,
I’m trying to build a building by using opengl but i have no idea on how to put the lighting on my building. I hope somebody here can help me .
#include <windows.h> // for MS Windows
#include <glut.h> // GLUT, include glu.h and gl.h
#include <gl\GL.h>
#include <gl\GLU.h>
#include <iostream>
/*Global variable*/
char title[]="2nd assignment";
void initGL()
{
glClearColor(0.0f, 0.0f ,0.0f , 1.0f);
glClearDepth(1.0f);
glEnable(GL_DEPTH_TEST); // Enable depth testing for z-culling
glDepthFunc(GL_LEQUAL); // Set the type of depth-test
glShadeModel(GL_SMOOTH); // Enable smooth shading
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); // Nice perspective corrections
glClearColor(0.0, 0.0, 0.0, 0.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-10.0, 10.0, -20.0, 10.0, -17.0, 10.0);
}
/* Handler for window-repaint event. Called back when the window first appears and
whenever the window needs to be re-painted. */
void display() {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clear color and depth buffers
glMatrixMode(GL_MODELVIEW); // To operate on model-view matrix
// Render a color-cube consisting of 6 quads with different colors
glLoadIdentity(); // Reset the model-view matrix
gluLookAt(-20.0, 15.0, 30.0,
-5.0, 3.0, 2.0,
0.0, 1.0, 0.0);
glTranslatef(1.5f, 0.0f, -7.0f); // Move right and into the screen
glBegin(GL_QUADS); // Begin drawing the color cube with 6 quads
// Top face (y = 1.0f)
// Define vertices in counter-clockwise (CCW) order with normal pointing out
glColor3f(1.0f, 0.5f, 0.0f); // Green
glVertex3f( 5.0f, 4.0f, -1.0f);
glVertex3f(-5.0f, 4.0f, -1.0f);
glVertex3f(-5.0f, 4.0f, 1.0f);
glVertex3f( 5.0f, 4.0f, 1.0f);
glColor3f(0.0f, 1.0f, 0.0f); // Green
glVertex3f( 5.0f, 4.5f, -1.0f);
glVertex3f(-5.0f, 4.5f, -1.0f);
glVertex3f(-5.0f, 4.5f, 1.0f);
glVertex3f( 5.0f, 4.5f, 1.0f);
// Bottom face (y = -1.0f)
glColor3f(1.0f, 0.5f, 0.0f); // Orange
glVertex3f( 9.0f, 0.0f, 2.0f);
glVertex3f(-9.0f, 0.0f, 2.0f);
glVertex3f(-9.0f, 0.0f, -1.0f);
glVertex3f( 9.0f, 0.0f, -1.0f);
glColor3f(1.0f, 0.5f, 0.0f); // Orange
glVertex3f( 5.0f, 4.0f, -1.5f);
glVertex3f(-5.0f, 4.0f, -1.5f);
glVertex3f(-5.0f, 4.0f, -1.0f);
glVertex3f( 5.0f, 4.0f, -1.0f);
// Front face (z = 1.0f)
glColor3f(1.0f, 0.0f, 0.0f); // Red
glVertex3f( -0.5f, 4.0f, 1.0f);
glVertex3f(-5.0f, 4.0f, 1.0f);
glVertex3f(-5.0f, 0.0f, 1.0f);
glVertex3f( -0.5f, 0.0f, 1.0f);
glColor3f(1.0f, 0.0f, 0.0f); // Red
glVertex3f( 0.5f, 4.0f, 1.0f);
glVertex3f(-0.5f, 4.0f, 1.0f);
glVertex3f(-0.5f, 2.5f, 1.0f);
glVertex3f( 0.5f, 2.5f, 1.0f);
glColor3f(1.0f, 0.0f, 0.0f); // Red
glVertex3f( 5.0f, 4.0f, 1.0f);
glVertex3f(0.5f, 4.0f, 1.0f);
glVertex3f(0.5f, 0.0f, 1.0f);
glVertex3f( 5.0f, 0.0f, 1.0f);
// Back face (z = -1.0f)
glColor3f(1.0f, 1.0f, 0.0f); // Red
glVertex3f( -0.5f, 4.0f, -1.0f);
glVertex3f(-5.0f, 4.0f, -1.0f);
glVertex3f(-5.0f, 0.0f, -1.0f);
glVertex3f( -0.5f, 0.0f, -1.0f);
glColor3f(1.0f, 1.0f, 0.0f); // Red
glVertex3f( 0.5f, 4.0f, -1.0f);
glVertex3f(-0.5f, 4.0f, -1.0f);
glVertex3f(-0.5f, 2.5f, -1.0f);
glVertex3f( 0.5f, 2.5f, -1.0f);
glColor3f(1.0f, 1.0f, 0.0f); // Red
glVertex3f( 5.0f, 4.0f, -1.0f);
glVertex3f(0.5f, 4.0f, -1.0f);
glVertex3f(0.5f, 0.0f, -1.0f);
glVertex3f( 5.0f, 0.0f, -1.0f);
glColor3f(1.0f, 0.0f, 1.0f); // Red
glVertex3f( 5.0f, 4.5f, -1.0f);
glVertex3f(-5.0f, 4.5f, -1.0f);
glVertex3f(-5.0f, 4.0f, -1.5f);
glVertex3f( 5.0f, 4.0f, -1.5f);
// Left face (x = -1.0f)
glColor3f(0.0f, 0.0f, 1.0f); // Blue
glVertex3f(-5.0f, 4.0f, 1.0f);
glVertex3f(-5.0f, 4.0f, -1.0f);
glVertex3f(-5.0f, 0.0f, -1.0f);
glVertex3f(-5.0f, 0.0f, 1.0f);
// Right face (x = 1.0f)
glColor3f(1.0f, 0.0f, 1.0f); // Magenta
glVertex3f(5.0f, 4.0f, -1.0f);
glVertex3f(5.0f, 4.0f, 1.0f);
glVertex3f(5.0f, 0.0f, 1.0f);
glVertex3f(5.0f, 0.0f, -1.0f);
//part dalam
glColor3f(1.0f, 0.0f, 1.0f); // Magenta
glVertex3f(-0.5f, 3.0f, 0.5f);
glVertex3f(-0.5f, 3.0f, 1.0f);
glVertex3f(-0.5f, 0.0f, 1.0f);
glVertex3f(-0.5f, 0.0f, 0.5f);
glColor3f(1.0f, 0.0f, 1.0f); // Magenta
glVertex3f(0.5f, 3.0f, 0.5f);
glVertex3f(0.5f, 3.0f, 1.0f);
glVertex3f(0.5f, 0.0f, 1.0f);
glVertex3f(0.5f, 0.0f, 0.5f);
glColor3f(0.0f, 0.0f, 1.0f);
glVertex3f( -0.25f, 3.0f, 0.5f);
glVertex3f(-0.5f, 3.0f, 0.5f);
glVertex3f(-0.5f, 0.0f, 0.5f);
glVertex3f( -0.25f, 0.0f, 0.5f);
glColor3f(0.0f, 0.0f, 1.0f);
glVertex3f( 0.5f, 3.0f, 0.5f);
glVertex3f(-0.25f, 3.0f, 0.5f);
glVertex3f(-0.25f, 1.5f, 0.5f);
glVertex3f( 0.5f, 1.5f, 0.5f);
glColor3f(0.0f, 0.0f, 1.0f);
glVertex3f( 0.5f, 3.0f, 0.5f);
glVertex3f(0.25f, 3.0f, 0.5f);
glVertex3f(0.25f, 0.0f, 0.5f);
glVertex3f( 0.5f, 0.0f, 0.5f);
//bumbung atas
glColor3f(1.0f, 0.0f, 0.0f); // Red
glVertex3f( 5.0f, 5.0f, 1.0f);
glVertex3f(-5.0f, 5.0f, 1.0f);
glVertex3f(-5.0f, 4.5f, 1.0f);
glVertex3f( 5.0f, 4.5f, 1.0f);
glColor3f(1.0f, 0.0f, 0.0f); // Red
glVertex3f( 5.0f, 5.0f, -1.0f);
glVertex3f(-5.0f, 5.0f, -1.0f);
glVertex3f(-5.0f, 4.5f, -1.0f);
glVertex3f( 5.0f, 4.5f, -1.0f);
// Left face (x = -1.0f)
glColor3f(0.0f, 0.0f, 1.0f); // Blue
glVertex3f(-5.0f, 5.0f, 1.0f);
glVertex3f(-5.0f, 5.0f, -1.0f);
glVertex3f(-5.0f, 4.5f, -1.0f);
glVertex3f(-5.0f, 4.5f, 1.0f);
// Right face (x = 1.0f)
glColor3f(1.0f, 0.0f, 1.0f); // Magenta
glVertex3f(5.0f, 5.0f, -1.0f);
glVertex3f(5.0f, 5.0f, 1.0f);
glVertex3f(5.0f, 4.5f, 1.0f);
glVertex3f(5.0f, 4.5f, -1.0f);
glColor3f( 0.196078f, 0.6f, 0.8f); // sky Blue
glVertex3f( 6.5f, 4.5f, 1.0f);
glVertex3f(-10.5f, 4.5f, 1.0f);
glVertex3f(-10.5f, 4.0f, 2.5f);
glVertex3f( 6.5f, 4.0f, 2.5f);
glColor3f(1.0f, 0.5f, 0.0f); // Orange
glVertex3f( 5.0f, 4.0f, 2.5f);
glVertex3f(-7.0f, 4.0f, 2.5f);
glVertex3f(-7.0f, 4.0f, 1.0f);
glVertex3f( 5.0f, 4.0f, 1.0f);
glColor3f( 0.196078f, 0.6f, 0.8f); // sky Blue
glVertex3f( 5.0f, 6.0f, 0.0f);
glVertex3f(-5.0f, 6.0f, 0.0f);
glVertex3f(-5.0f, 5.0f, 1.5f);
glVertex3f( 5.0f, 5.0f, 1.5f);
glColor3f( 0.196078f, 0.6f, 0.8f); //sky Blue
glVertex3f( 5.0f, 6.0f, 0.0f);
glVertex3f(-5.0f, 6.0f, 0.0f);
glVertex3f(-5.0f, 5.0f, -1.5f);
glVertex3f( 5.0f, 5.0f, -1.5f);
//2nd building
//front
glColor3f(1.0f, 0.0f, 0.0f); // Red
glVertex3f( -6.0f, 4.0f, 1.0f);
glVertex3f(-9.0f, 4.0f, 1.0f);
glVertex3f(-9.0f, 0.0f, 1.0f);
glVertex3f( -6.0f, 0.0f, 1.0f);
glColor3f(1.0f, 0.0f, 0.0f); // Red
glVertex3f( -6.0f, 4.0f, 1.0f);
glVertex3f(-5.0f, 4.0f, 1.0f);
glVertex3f(-5.0f, 1.5f, 1.0f);
glVertex3f( -6.0f, 1.5f, 1.0f);
glColor3f(1.0f, 0.0f, 0.0f); // Red
glVertex3f( -5.0f, 4.0f, 1.0f);
glVertex3f(-5.5, 4.0f, 1.0f);
glVertex3f(-5.5f, 0.0f, 1.0f);
glVertex3f( -5.0f, 0.0f, 1.0f);
// Right face (x = 1.0f)
glColor3f(1.0f, 0.0f, 1.0f); // Magenta
glVertex3f(-7.0f, 4.5f, -12.0f);
glVertex3f(-7.0f, 4.5f, 1.0f);
glVertex3f(-7.0f, 0.0f, 1.0f);
glVertex3f(-7.0f, 0.0f, -12.0f);
//left
// Left face (x = -1.0f)
glColor3f(0.0f, 0.0f, 1.0f); // Blue
glVertex3f(-9.0f, 4.5f, 1.0f);
glVertex3f(-9.0f, 4.5f, -15.0f);
glVertex3f(-9.0f, 0.0f, -15.0f);
glVertex3f(-9.0f, 0.0f, 1.0f);
//back
glColor3f(0.137255f, 0.556863f, 0.419608f); // sea green
glVertex3f( -7.0f, 4.0f, -12.0f);
glVertex3f(-9.0f, 4.0f, -12.0f);
glVertex3f(-9.0f, 0.0f, -12.0f);
glVertex3f( -7.0f, 0.0f, -12.0f);
//top
glColor3f( 0.196078f, 0.6f, 0.8f);
glVertex3f( -7.0f, 4.5f, -12.0f);
glVertex3f(-9.0f, 4.5f, -12.0f);
glVertex3f(-9.0f, 4.5f, 1.0f);
glVertex3f( -7.0f, 4.5f, 1.0f);
glColor3f( 0.196078f, 0.6f, 0.8f); //sky Blue
glVertex3f( -9.0f, 4.5f, 1.0f);
glVertex3f(-9.0f, 4.5f, -12.0f);
glVertex3f(-10.5f, 4.0f, -12.0f);
glVertex3f( -10.5f, 4.0f, -1.0f);
glColor3f( 0.196078f, 0.6f, 0.8f); //sky Blue
glVertex3f( -7.0f, 4.5f, -12.0f);
glVertex3f(-7.0f, 4.5f, 2.5f);
glVertex3f(-6.5f, 4.0f, 2.5f);
glVertex3f( -6.5f, 4.0f, -12.0f);
//3rd building
glColor3f(1.0f, 0.0f, 0.0f); // Red
glVertex3f( 5.0f, 4.5f, 1.0f);
glVertex3f(6.0f, 4.5f, 1.0f);
glVertex3f(6.0f, 0.0f, 1.0f);
glVertex3f( 5.0f, 0.0f, 1.0f);
glColor3f(1.0f, 0.0f, 0.0f); // Red
glVertex3f( 6.0f, 4.5f, 1.0f);
glVertex3f( 6.5f, 4.5f, 1.0f);
glVertex3f( 6.5f, 1.5f, 1.0f);
glVertex3f( 6.0f, 1.5f, 1.0f);
glColor3f(1.0f, 0.0f, 0.0f); // Red
glVertex3f( 9.0f, 4.5f, 2.0f);
glVertex3f( 6.5, 4.5f, 2.0f);
glVertex3f(6.5f, 0.0f, 2.0f);
glVertex3f( 9.0f, 0.0f, 2.0f);
// Right face (x = 1.0f)
glColor3f(1.0f, 0.0f, 1.0f); // Magenta
glVertex3f(9.0f, 4.5f, -15.0f);
glVertex3f(9.0f, 4.5f, 2.0f);
glVertex3f(9.0f, 0.0f, 2.0f);
glVertex3f(9.0f, 0.0f, -15.0f);
// Left face (x = -1.0f)
glColor3f(0.0f, 0.0f, 1.0f); // Blue
glVertex3f(6.50f, 4.5f, 2.0f);
glVertex3f(6.50f, 4.5f, 1.0f);
glVertex3f(6.50f, 0.0f, 1.0f);
glVertex3f(6.50f, 0.0f, 2.0f);
glColor3f(0.74902f, 0.847059f, 0.847059f); //sky blue
glVertex3f(7.0f, 4.5f, 2.0f);
glVertex3f(7.0f, 4.5f, -12.0f);
glVertex3f(7.0f, 0.0f, -12.0f);
glVertex3f(7.0f, 0.0f, 2.0f);
//back
glColor3f(0.137255f, 0.556863f, 0.419608f); // sea green
glVertex3f( 9.0f, 4.5f, -12.0f);
glVertex3f(7.0f, 4.5f, -12.0f);
glVertex3f(7.0f, 0.0f, -12.0f);
glVertex3f( 9.0f, 0.0f, -12.0f);
//top
glColor3f( 0.196078f, 0.6f, 0.8f);
glVertex3f( 6.0f, 4.5f, -15.0f);
glVertex3f(9.0f, 4.5f, -15.0f);
glVertex3f(9.0f, 4.5f, 2.0f);
glVertex3f( 6.0f, 4.5f, 2.0f);
glColor3f( 0.196078f, 0.6f, 0.8f); //sky Blue
glVertex3f( 9.0f, 4.5f, 2.5f);
glVertex3f(9.0f, 4.5f, -15.0f);
glVertex3f(9.5f, 4.0f, -15.0f);
glVertex3f( 9.5f, 4.0f, 2.5f);
glColor3f( 0.196078f, 0.6f, 0.8f); //sky Blue
glVertex3f( 9.0f, 4.5f, 2.0f);
glVertex3f(6.0f, 4.5f, 2.0f);
glVertex3f(6.0f, 4.0f, 2.5f);
glVertex3f( 9.5f, 4.0f, 2.5f);
//4th building
glColor3f(1.0f, 1.0f, 0.0f); // yellow
glVertex3f( 9.0f, 4.5f, -15.0f);
glVertex3f(-9.0f, 4.5f, -15.0f);
glVertex3f(-9.0f, 0.0f, -15.0f);
glVertex3f( 9.0f, 0.0f, -15.0f);
// Left face (x = -1.0f)
glColor3f(0.0f, 0.0f, 1.0f); // Blue
glVertex3f(-7.0f, 4.5f, -13.0f);
glVertex3f(-7.0f, 4.5f, -15.0f);
glVertex3f(-7.0f, 0.0f, -15.0f);
glVertex3f(-7.0f, 0.0f, -13.0f);
// Right face (x = 1.0f)
glColor3f(1.0f, 0.0f, 1.0f); // Magenta
glVertex3f(7.0f, 4.5f, -15.0f);
glVertex3f(7.0f, 4.5f, -13.0f);
glVertex3f(7.0f, 0.0f, -13.0f);
glVertex3f(7.0f, 0.0f, -15.0f);
// Front face (z = 1.0f)
glColor3f(1.0f, 0.0f, 0.0f); // Red
glVertex3f( 7.0f, 4.5f, -13.0f);
glVertex3f(-7.0f, 4.5f, -13.0f);
glVertex3f(-7.0f, 0.0f, -13.0f);
glVertex3f( 7.0f, 0.0f, -13.0f);
//top
glColor3f( 0.196078f, 0.6f, 0.8f); // sky Blue
glVertex3f( -9.0f, 4.5f, -15.0f);
glVertex3f(7.0f, 4.5f, -15.0f);
glVertex3f(7.0f, 4.5f, -13.0f);
glVertex3f( -9.0f, 4.5f, -13.0f);
glColor3f( 0.196078f, 0.6f, 0.8f); // sky Blue
glVertex3f( -7.0f, 4.5f, -13.0f);
glVertex3f(7.0f, 4.5f, -13.0f);
glVertex3f(7.0f, 4.0f, -12.5f);
glVertex3f( -7.0f, 4.0f, -12.5f);
glEnd(); // End of drawing color-cube
glutSwapBuffers(); // Swap the front and back frame buffers (double buffering)
}
/* Handler for window re-size event. Called back when the window first appears and
whenever the window is re-sized with its new width and height */
void reshape(GLsizei width, GLsizei height) { // GLsizei for non-negative integer
// Compute aspect ratio of the new window
if (height == 0) height = 1; // To prevent divide by 0
GLfloat aspect = (GLfloat)width / (GLfloat)height;
// Set the viewport to cover the new window
glViewport(0, 0, width, height);
// Set the aspect ratio of the clipping volume to match the viewport
glMatrixMode(GL_PROJECTION); // To operate on the Projection matrix
glLoadIdentity(); // Reset
// Enable perspective projection with fovy, aspect, zNear and zFar
gluPerspective(35.0f, 1.0f, 1.0f, 70.0f);
}
/* Main function: GLUT runs as a console application starting at main() */
int main(int argc, char** argv) {
glutInit(&argc, argv); // Initialize GLUT
glutInitDisplayMode(GLUT_DOUBLE); // Enable double buffered mode
glutInitWindowSize(640, 480); // Set the window's initial width & height
glutInitWindowPosition(50, 50); // Position the window's initial top-left corner
glutCreateWindow(title); // Create window with the given title
glutPostRedisplay();
glutDisplayFunc(display); // Register callback handler for window re-paint event
glutReshapeFunc(reshape); // Register callback handler for window re-size event
initGL(); // Our own OpenGL initialization
glutMainLoop(); // Enter the infinite event-processing loop
return 0;
}