// 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; }