miércoles, 31 de octubre de 2012

Luces en polígonos no predefinidos.





#include "stdafx.h"
#include<GL\glut.h>
#include<math.h>

void Inicializacion(void);
void Dibuja(void);


int _tmain(int argc, _TCHAR* argv[])
{
glutInitDisplayMode(GLUT_RGB|GLUT_DEPTH|GLUT_DOUBLE);
glutInitWindowSize(600,600);
glutInitWindowPosition(200,200);
glutCreateWindow("Cubo en OpenGL");
Inicializacion();
glutDisplayFunc(Dibuja);
glutMainLoop();

return 0;
}



void Inicializacion(void){
glMatrixMode(GL_PROJECTION); //coordenadas objeto en 3D
glLoadIdentity(); //Matriz identidad
gluPerspective(70,1,0.1,100);
glMatrixMode(GL_MODELVIEW);
/*glTranslated(0,0,-10);
glRotated(-253,0,1,0);
*/glClearColor(1,1,1,0);
glShadeModel(GL_SMOOTH);
glEnable(GL_CULL_FACE); //
glCullFace(GL_BACK); //glCullFace determina qué polígonos deben de descartarse, en este caso los traceros.
glFrontFace(GL_CW); //EL polígono está en el sentido de las manesillas del reloj

}

void Dibuja(void){

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glLoadIdentity();
GLfloat ambientlight[4]  =    {0.5f ,0.5f ,0.5f ,1.0f};
float glfLightPosition[4] = {0.0, 2, 7.0, 1.0};
float glfLightDiffuse[4] = {0.7, 0.7, 0.7, 1.0};
float glfLightSpecular[4] = {0.7, 0.7, 0.7, 1.0};

//glLightfv(GL_LIGHT0,GL_AMBIENT,ambientlight);
glLightfv(GL_LIGHT0, GL_POSITION, glfLightPosition); // Se definen las
glLightfv(GL_LIGHT0, GL_DIFFUSE, glfLightDiffuse); //carácterísticas de la
glLightfv(GL_LIGHT0, GL_SPECULAR, glfLightSpecular);// luces
 glEnable(GL_LIGHT0);
 glEnable(GL_LIGHTING);

//--------------------------------------------------
 


glPushMatrix();
float ambiental[4]={1,0,0,1};
 float especular[4]={0.5,0,0.5,1};
 
glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, ambiental);
glMaterialfv(GL_FRONT, GL_SPECULAR, especular);
glMaterialf(GL_FRONT, GL_SHININESS, 30);

glTranslated(0,0,-10);
glRotated(45,10,10,0);


glBegin(GL_QUADS);
//cara 1

glColor3f(0,0,1);
glNormal3d(-8,0,-8);
glVertex3d(-2,-2,2);
//glNormal3d(0,8,-8); 
glVertex3d(-2,2,2);
//glNormal3d(8,0,-8);
glVertex3d(2,2,2);
//glNormal3d(0,-8,-8);
glVertex3d(2,-2,2);

//cara2
glColor3f(1,0,1);
glNormal3d(0,0,8);
glVertex3d(2,2,-2);
glNormal3d(-8,0,0);
glVertex3d(-2,2,-2);
glVertex3d(-2,-2,-2);
glVertex3d(2,-2,-2);

//cara3
glColor3f(1,0,0);
glNormal3d(8,-8,8);
glVertex3d(-2,2,2);
//glNormal3d(8,-8,0);
glVertex3d(-2,-2,2);
//glNormal3d(8,8,-8);
glVertex3d(-2,-2,-2);
glVertex3d(-2,2,-2);

//cara 4

glColor3f(0,1,0);
glVertex3d(2,-2,2);
glVertex3d(2,2,2);
glVertex3d(2,2,-2);
glVertex3d(2,-2,-2);

//cara 5

glColor3f(1,1,0);
glVertex3d(-2,2,2);
glVertex3d(-2,2,-2);
glVertex3d(2,2,-2);
glVertex3d(2,2,2);

//cara 6

glColor3f(0,1,1);
glVertex3d(-2,-2,2);
glVertex3d(2,-2,2);
glVertex3d(2,-2,-2);
glVertex3d(-2,-2,-2);
glEnd();
glPopMatrix();



glutSwapBuffers();
}

lunes, 29 de octubre de 2012

Exposición de día de Muertos.



Para todos los alumnos(as) que deseen participar, el día 1 de noviembre, en la entrada del edificio E se llevará acabo una exposición de día de muertos para lo cual se les solicita la realización de unas calaveritas literarias, alguna calavera de papel, papel picado, etc.

Pueden entregar el material con la Lic. Dora Ortíz.

De antemano gracias y espero que participen. Saludos.

@rezzaca

miércoles, 24 de octubre de 2012

1er. Concurso de Altar de Muertos 3D 2012(Fase I).


El concurso es de carácter obligatorio para los grupos de graficación del Tecnológico de Lerdo de la carrera de Sistemas Computacionales que actualmente cursan la materia de Graficación.

Requisitos mínimos:


  • Velas: Representan la luz que alumbra el camino del difunto hacia el mas allá.
  • El camino: Debe haber un camino que permita volver al difunto para recibir la ofrenda y este mismo lo devolverá.
  • El perro negro: Este cuida el camino y ahuyenta a los malos espíritus, además de acompañar al difunto para que este no se pierda.
  • Incienso: Este es un elemento de alabanza.
  • El Petate: Este tiene varias funciones que van desde cama para que el anima descanse hasta mesa para colocar los alimentos.
  • Cruz de ceniza: Esta es para que al llegar al altar el espíritu pueda dejar sus últimas culpas.
  • Foto: Esta es para atraer el alma del difunto y que no se confunda, también es una forma de mostrar respeto hacia nuestro ser querido.
Requisitos técnicos:

  • Uso de listas.
  • Interacción.
  • Manejo de Luces y materiales.
Premiación de la primer fase:

1er. Lugar    Calificación: 100
2o. Lugar     Calificación: 95
3er. Lugar    Calificación: 92
4o. Lugar     Calificación: 90

Para todos los demás de 85 para atrás.

Sobre el jurado.

  • Se invitará para evaluar a los 4 primeros lugares a los ingenieros Antonio Mendoza y Ángel Candelas para el veredicto.
  • Previamente se escogerán los 4 mejores para la evaluación del concurso.
  • La persona que no entregue altar, lo deberá presentar en examen de regularización.

jueves, 18 de octubre de 2012

Práctica de luces y materiales.


// Practica5UII.cpp: archivo de proyecto principal.

#include "stdafx.h"
#include <glut.h>

void Inicializa();
void Dibuja();
int i;
void Anima();

float ambiental[4]={0, 0, 0, 1},
 difusa[4]={1, 1, 1, 1},
 especular[4]={1, 1, 1, 1},
 posicion[4]={5, 5, -5, 1};

void main(){
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutInitWindowSize(800, 800);
glutInitWindowPosition(100, 50);
glutCreateWindow("Practica5U2 - Elena");
glutDisplayFunc(Dibuja);
Inicializa();
glutMainLoop();
}

void Inicializa(){
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(90, 1, 0.1, 40);
glMatrixMode(GL_MODELVIEW);
glClearColor(0, 0, 0, 0);
glEnable(GL_DEPTH_TEST);
glShadeModel(GL_SMOOTH);
glLightfv(GL_LIGHT0, GL_AMBIENT, ambiental);
glLightfv(GL_LIGHT0, GL_DIFFUSE, difusa);
glLightfv(GL_LIGHT0, GL_SPECULAR, especular);
glLightfv(GL_LIGHT0, GL_POSITION, posicion);
glEnable(GL_LIGHT0);
glEnable(GL_LIGHTING);
//glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambiental);
glutIdleFunc(Anima);
}

void Anima(){
i++;
glutPostRedisplay();
}

void Dibuja(){
GLUquadricObj *ap;
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
ap = gluNewQuadric();
glLoadIdentity();
glTranslated(0, 0, -10);
glPushMatrix();
glTranslated(-6, 6, 0);
gluQuadricDrawStyle(ap, GLU_FILL);
gluQuadricNormals(ap, GLU_SMOOTH);
gluQuadricOrientation(ap, GLU_OUTSIDE);
//Esfera Verde
ambiental[0]=0.5;
ambiental[1]=1;
especular[0]=1;
especular[1]=1;
glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, ambiental);
glMaterialfv(GL_FRONT, GL_SPECULAR, especular);
glMaterialf(GL_FRONT, GL_SHININESS, 30);
gluSphere(ap, 2, 30, 30);
//Cilindro
glPopMatrix();
glPushMatrix();
glTranslated(-1.5, 7, 0);
glRotated(60, 1, 0, 0);
ambiental[0]=1;
ambiental[2]=1;
especular[0]=0;
especular[1]=0;
glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, ambiental);
glMaterialfv(GL_FRONT, GL_SPECULAR, especular);
glMaterialf(GL_FRONT, GL_SHININESS, 5);
gluCylinder(ap, 1, 1, 3.5, 20, 20);
//Disco
glPopMatrix();
glPushMatrix();
glTranslated(2.5, 6.5, 0);
glRotated(60, 0, 1, 1);
ambiental[2]=0;
glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, ambiental);
gluDisk(ap, 0.5, 2.5, 30, 10);
//Disco Parcial
glPopMatrix();
glPushMatrix();
glTranslated(6.5, 6.5, 0);
glRotated(50, 1, 0, 0);
ambiental[1]=0;
glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, ambiental);
gluPartialDisk(ap, 0.5, 2.5, 30, 10, 40, 180);
gluDeleteQuadric(ap);
//Cono
glPopMatrix();
glPushMatrix();
glTranslated(-6, 0, 0);
ambiental[1]=0.5;
especular[1]=1;
especular[2]=0;
glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, ambiental);
glMaterialfv(GL_FRONT, GL_SPECULAR, especular);
glMaterialf(GL_FRONT, GL_SHININESS, 10);
glutSolidCone(2, 4, 10, 20);
//Cubo
glPopMatrix();
glPushMatrix();
glTranslated(-1.8, 0, 0);
glRotated(30, 1, 1, 0);
ambiental[0]=0;
ambiental[1]=0.5;
especular[1]=0;
glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, ambiental);
glMaterialfv(GL_FRONT, GL_SPECULAR, especular);
glMaterialf(GL_FRONT, GL_SHININESS, 10);
glutSolidCube(3);
//Tetrahedro
glPopMatrix();
glPushMatrix();
glTranslated(2.5, 0, 0);
glRotated(10, 0, 1, 1);
glScaled(2.5, 2.5, 2.5);
ambiental[0]=0.5;
ambiental[1]=0.6;
glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, ambiental);
glMaterialfv(GL_FRONT, GL_SPECULAR, especular);
glMaterialf(GL_FRONT, GL_SHININESS, 1);
glutSolidTetrahedron();
//Octahedro
glPopMatrix();
glPushMatrix();
glTranslated(6.5, 0, 0);
glRotated(50, 1, 1, 1);
glScaled(2.5, 2.5, 2.5);
ambiental[1]=0;
ambiental[2]=1;
especular[1]=1;
especular[2]=1;
glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, ambiental);
glMaterialfv(GL_FRONT, GL_SPECULAR, especular);
glMaterialf(GL_FRONT, GL_SHININESS, 1);
glutSolidOctahedron();
//Dodecahedro
glPopMatrix();
glPushMatrix();
glTranslated(-7, -6, 0);
ambiental[1]=1;
especular[2]=0;
glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, ambiental);
glMaterialfv(GL_FRONT, GL_SPECULAR, especular);
glMaterialf(GL_FRONT, GL_SHININESS, 10);
glutSolidDodecahedron();
//Icosahedro
glPopMatrix();
glPushMatrix();
glTranslated(-3, -5.5, 0);
glScaled(2.2, 2.2, 2.2);
ambiental[1]=0;
especular[2]=0.5;
glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, ambiental);
glMaterialfv(GL_FRONT, GL_SPECULAR, especular);
glMaterialf(GL_FRONT, GL_SHININESS, 10);
glutSolidIcosahedron();
//Toroide
glPopMatrix();
glPushMatrix();
glTranslated(2, -5.5, 0);
ambiental[0]=0.8;
glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, ambiental);
glMaterialfv(GL_FRONT, GL_SPECULAR, especular);
glMaterialf(GL_FRONT, GL_SHININESS, 5);
glutWireTorus(1, 1.5, 10, 10);
//Tetera
glPopMatrix();
glPushMatrix();
glTranslated(7, -5.5, 0);
glRotated(-10, 0, 1, 1);
ambiental[0]=0;
ambiental[2]=1;
especular[1]=1;
especular[2]=1;
glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, ambiental);
glMaterialfv(GL_FRONT, GL_SPECULAR, especular);
glMaterialf(GL_FRONT, GL_SHININESS, 10);
glutWireTeapot(1.5);
glutSwapBuffers();
}

miércoles, 3 de octubre de 2012

AJAX Qué! Detergente para programar!

Así me comentó un cuate cuando le pregunté si sabía programar AJAX. En fin, vamos a describir con un ejemplo cómo utilizar los controles de AJAX del Microsoft Visual Web Developer 2010. Yo tengo la versión Express de este producto.

El problema es: se requiere tener un sistema de usuarios, el cual consulte la tabla de empleados con un login y password como referencia; para poder ingresar a un sistema de reporte de incidencias de una empresa o escuela. Lo que trata el sistema es mandar a la base de datos el reporte por faltar al trabajo.

Aquí un diseño de la forma principal de login.

Observemos la siguiente imagen del diseñador del IDE.


En la parte izquierda tenemos las extensiones de AJAX. Para empezar a utilizarlas primero seleccionamos el ScriptManager y lo agregamos a la forma.

Segundo. Agregamos un control UpdatePanel y dentro de este agregamos una tabla para acomodar todos los labels y controles de la forma a utilizar.

Después de esto, ya podemos programar nuestro botón normalmente como se hace.

Aquí el código completo de el funcionamiento del mismo. Comento partes del mismo.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;//Librería para conectar a la BD
using System.Configuration; //Para utilizar la cadena de conexion

                            //que estará guardada en el archivo
                            //Web.Config

public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{

}

protected void Button1_Click1(object sender, EventArgs e)
{
string login, password, cadena, sql, password2;

  login = txtC1.Text; //Tomamos las variables de la forma
password = txtC2.Text;


//Utilizamos la clase ConfigurationManager para traernos la cadena
//de conexión del archivo Web.Config y se lo pasamos a un string
//previamente declarado.

  cadena = ConfigurationManager.ConnectionStrings["incidenciasConnectionString"].ConnectionString;


//Con SqlConnection hacemos la conexión a la base de datos local
// pasandole la cadena de conexión como parámetro.

SqlConnection con = new SqlConnection(cadena);

//Abrimos la conexión.

con.Open();


//Creamos una cadena sql de selección

sql = "SELECT password FROM empleados WHERE login = '" + login.Trim() + "'";


//Creamos un objeto SqlCommand que luego ejecutará
//la sentencia sql.

SqlCommand cmd = new SqlCommand(sql, con);


//Creamos un objeto SqlDataReader para asignarle luego la ejecución
//del comando sql.

SqlDataReader reader = null;

reader = cmd.ExecuteReader();

//Si se ejecuta la consulta, el reader al leer arroja un TRUE.
//Allí podemos leer el dato de la consulta y comparar.

if (reader.Read())
{

  password2 = reader["password"].ToString();//Guardamos en una variable

  reader.Close(); //Cerramos el reader y la conexión!
con.Close();
//Comparamos el string contra lo que el usuario puso en la forma.

if(String.Compare(password.Trim(), password2.Trim())==0){

lblError.Text = "Login Correcto!";


//En caso de ser correcto lo enviamos a la forma del sistema.

Response.Redirect("incidencia.aspx");

}else{


//De lo contrario le mandamos un mensaje de error.

lblError.Text = "Password Incorrecto!";
}
}
else
{


//Mensaje de error en caso de que el login sea incorrecto.
  lblError.Text = "Error, login incorrecto";
}

}
}


Recuerda darle click a los anuncios! Sígueme en el twitter! @rezzaca