// grua.cpp : Defines the entry point for the console application

Anuncio
// grua.cpp : Defines the entry point for the console application.
//
//#include "stdafx.h"
#include "gl/openglut.h"
//Definición del modelo de
GLfloat light_Ambient [4]
GLfloat light_Diffuse [4]
GLfloat light_Position [4]
una luz
= { 0.4, 0.4, 0.4, 1.0};
= { 0.7, 0.7, 0.7, 1.0};
= {20.0, 15.0, 10.0, 1.0};
//Definición de las caracteristicas opticas del material: coeficientes de
reflexión
GLfloat material
[4] = {1.0, 0.2, 0.2, 1.0 };
GLfloat RedMaterial
[4] = {1.0, 0.0, 0.0, 1.0 };
GLfloat GreenMaterial [4] = {0.0, 1.0, 0.0, 1.0 };
GLfloat BlueMaterial [4] = {0.0, 0.0, 1.0, 1.0 };
GLfloat WhiteMaterial [4] = {1.0, 1.0, 1.0, 1.0 };
GLfloat BlackMaterial [4] = {0.0, 0.0, 0.0, 0.0 };
GLfloat YellowMaterial [4] = {1.0, 1.0, 0.0, 0.0 };
GLfloat GrisMaterial [4] = {0.5, 0.5, 0.5, 0.5 };
//Cuadric
GLUquadricObj *quadobj;
void inicializacion()
{
glutInitWindowSize(800,600);
glutInitWindowPosition(100,100);
glutCreateWindow("utilizando Quadrics con OpenGL");
}
void luces(void)
{
//Cargando las ecuaciones de luz
glEnable (GL_LIGHTING);
glEnable (GL_LIGHT0);
glLightfv(GL_LIGHT0, GL_AMBIENT, light_Ambient );
glLightfv(GL_LIGHT0, GL_DIFFUSE, light_Diffuse );
glLightfv(GL_LIGHT0, GL_POSITION, light_Position );
glLightf(GL_LIGHT0, GL_CONSTANT_ATTENUATION, 0.9 );
glLightf(GL_LIGHT0, GL_LINEAR_ATTENUATION, 0.0 );
glLightf(GL_LIGHT0, GL_QUADRATIC_ATTENUATION, 0.0 );
}
void materiales()
{
glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, material );
glPolygonMode (GL_FRONT_AND_BACK, GL_FILL);
glShadeModel (GL_FLAT);
}
void EjesReferencia()
{
glBegin (GL_LINES);
glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, RedMaterial );
glVertex3f ( 0.0, 0.0, 0.0);
glVertex3f (100.0, 0.0, 0.0);//eje x
glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, GreenMaterial );
glVertex3f ( 0.0, 0.0, 0.0);
glVertex3f ( 0.0,100.0, 0.0);//eje y
glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, WhiteMaterial );
glVertex3f ( 0.0, 0.0, 0.0);
glVertex3f ( 0.0, 0.0,100.0);//eje z: profundidad
glEnd();
}
void dibujogrua()
{
quadobj = gluNewQuadric();
gluQuadricDrawStyle( quadobj,
GLU_FILL);
//drawStyle
//
GLU FILL,
//
GLU LINE,
//
GLU POINT,
//
GLU SILHOUETTE
gluQuadricNormals( quadobj,
GLU_SMOOTH);
//
//
GLenum drawStyle: );
GLenum
normals );
//normals
// GLU NONE
// GLU FLAT
// GLU SMOOTH
glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, RedMaterial );
//base cuadrada
glutSolidCube(1.5);
//Base esférica
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glTranslatef(0.0f, 0.75f, 0.0f);
gluSphere(quadobj, 1.05, 30, 30);
glPopMatrix();
//Mástil vertical
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glRotatef(-90, 1.0f, 0.0f, 0.0f);
glTranslatef(-2.0f, 2.0f, 0.0f);
glutSolidCylinder(0.175, 2, 50, 50);
//gluCylinder(quadobj, 0.175, 0.175, 2, 50, 50);//lo usamos para observar
mejor la iluminación
glPopMatrix();
//Mástil horizontal
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glRotatef(-180, 0.0f, 1.0f, 0.0f);
glTranslatef(0.0f, 3.9f, 0.0f);
//glTranslatef(0.0f, 4.0f, 0.0f); //lo usamos para observar un poco más la
iluminación
gluCylinder(quadobj, 0.175, 0.175, 2.5, 50, 50);
glPopMatrix();
//brazo
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glRotatef(-90, 1.0f, 0.0f, 0.0f);
glTranslatef(-5.0f, 7.5f, -3.0f);
gluCylinder(quadobj, 0.175, 0.175, 2, 50, 50);
glPopMatrix();
//Pinza derecha1
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glRotatef(-135, 1.0f, 0.0f, 0.0f);
glTranslatef(-5.2f, 7.5f, 2.5f);
gluCylinder(quadobj, 0.05, 0.05, 0.75, 50, 50);
glPopMatrix();
// punta derecha1
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glRotatef(-67.5f, 1.0f, 0.0f, 0.0f);
glTranslatef(-5.2f, 5.2f, -6.7f);
gluCylinder(quadobj, 0.05, 0.05, 0.75, 50, 50);
glPopMatrix();
//Pinza derecha2
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glRotatef(67.5f, 1.0f, 0.0f, 0.0f);
glTranslatef(0.0f, -1.5f, -2.8f);
gluCylinder(quadobj, 0.05, 0.05, 0.75, 50, 50);
glPopMatrix();
// punta derecha2
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glRotatef(112.5f, 1.0f, 0.0f, 0.0f);
glTranslatef(-0.1f, -2.55f, -0.25f);
gluCylinder(quadobj, 0.05, 0.05, 0.6, 50, 50);
glPopMatrix();
//Pinza izquierda1
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glRotatef(-67.5, 1.0f, 0.0f, 0.0f);
glTranslatef(-0.1f, 3.275f, -0.15f);
gluCylinder(quadobj, 0.05, 0.05, 0.75, 50, 50);
glPopMatrix();
// punta izquierda1
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glRotatef(67.5f, 1.0f, 0.0f, 0.0f);
glTranslatef(-0.1f, -2.45f, -2.2f);
gluCylinder(quadobj, 0.05, 0.05, 0.6, 50, 50);
glPopMatrix();
//Pinza izquierda2
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glRotatef(-112.5f, 1.0f, 1.0f, 0.0f);
glTranslatef(-5.0f, 1.25f, 2.6f);
gluCylinder(quadobj, 0.05, 0.05, 0.75, 50, 50);
glPopMatrix();
// punta izquierda2
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glRotatef(67.5f, 1.0f, 0.0f, 0.0f);
glTranslatef(-0.1f, -2.25f, -1.9f);
gluCylinder(quadobj, 0.05, 0.05, 0.375, 50, 50);
glPopMatrix();
gluDeleteQuadric(quadobj);
}
void RenderScene(void)
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
luces();
EjesReferencia();
materiales();
glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, material );
glPolygonMode (GL_FRONT_AND_BACK, GL_FILL);
glShadeModel (GL_FLAT);
//glShadeModel (GL_SMOOTH);
dibujogrua();
glFlush();
}
void camara()
{
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-5,5,-5,5,-10,10); //esta es proyeccion plana
//gluPerspective(35,800/600,0,1000);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0,0,0, 15,15,15, 0,1,0);
}
int main(void)
{
inicializacion();
glutDisplayFunc(RenderScene);
glClearColor(0.0f, 0.0f, 1.0f, 1.0f);
glEnable(GL_DEPTH_TEST);
camara();
glutMainLoop();
return 0;
}
Descargar