Curvas y Superficies Referencia – capítulo 11 del Libro Rojo.

Slides:



Advertisements
Presentaciones similares
Arreglos.
Advertisements

Unidad 15 Características de C++ no relacionadas con el DOO.
Sombras y Reflejos en Tiempo Real
MODELO DE REGRESIÓN LINEAL SIMPLE
TEXTO EN OPENGL INTEGRANTES: ACEVEDO DÍAZ ELOISA
Funciones. Interpolación lineal y cuadrática
22/11/2005 E.T.S de Ingenieros de Telecomunicación - UPNA.1 Clases y Objetos Silvia Larrayoz Leire Urriza.
Ejemplo de Programa C++
El lenguaje C Introducción.
Sistemas de coordenadas de referencia
SISTEMAS DE COORDENADAS
GEOMETRÍA ANALITICA LA RECTA Por los puntos A(12,8),
Programacion de Computadora Prof. Obadiah Oghoerore.
Programación I Teoría III
Estructuras de datos. Programación, Algoritmos y Estructuras de Datos.
Funciones. Programación, Algoritmos y Estructuras de Datos.
Modelo de Superficies Matemáticas
INFORMATICA I Funciones CLASE 13.
Informática II 1 Diego Fernando Serna RestrepoSemestre 2011/2.
Longitud de arco..
Prof. Franklin Cedeño. FUNCIONES EN C++ Cuando tratamos de resolver un problema, resulta muy útil utilizar la filosofía de “divide y vencerás”. Esta estrategia.
Programación Estructurada
Algoritmos y Estructuras de Datos
VECTORES.
Funciones Funciones De biblioteca Definidas por el usuario
La teoría del comportamiento del consumidor
SOBRECARGA DE FUNCIONES
Unidad 3 Punteros.
Acciones y funciones Concepto
Funciones “En C” Semestre de Otoño 2006 Claudio Gutiérrez-Soto.
Tema 7: Polimorfismo Antonio J. Sierra. Índice Introducción. Sobrecarga de métodos. Objetos como parámetros. Paso de argumentos. Devolución de objetos.
GRÁFICAS Y FUNCIONES María José Peña Mártil MATEMÁTICAS
Funciones en lenguaje C
CI TEORIA semana 8 Subprogramas o funciones Definición de funciones.
FUNCIONES.
LENGUAJE “C” Programación.
Esbozo de demostración del Teorema de Green para una región suave.
Con este método podemos dibujar Líneas y rectángulos en un objeto donde se permita utilizar dicho método, como por ejemplo en los Formularios, los controles.
Unidad I Java y C++ : Similitudes y diferencias
Programa “Coordenadas” Ing. Arturo Díaz Vargas Departamento de Sistemas División de Ciencias Básicas e Ingeniería UNIVERSIDAD AUTONOMA METROPOLITANA.
LA RECTA Y SUS ECUACIONES
PRIMITIVAS DE SALIDA Curso de graficación I.
Semana 5 Subprogramas..
Tres Algoritmos Paralelos para Multiplicación Matriz Vector
Introducción a los punteros
Dibujar en 3D: puntos, líneas y polígonos.
Transformaciones en OpenGL
3.1 Declaración de tablas en C
Recursión en programación
APUNTADORES EN C. MENU DEL DIA Repaso clase anterior Apuntadores. Eso pa que? Solución al problema: Funciones. Ventajas de trabajar un programa usando.
Programación III Clase 08 Arreglos.
Aplicado a programas openMP
Elaborado por Fernando Torre - Universidad Simón Bolívar ARREGLOS CI Computación I Universidad Simón Bolívar Dpto. de Computación y Tecnología de.
Ejemplos openMP.
Programación de Memoria Compartida
Visualización Computacional 2
Programación Orientada a Objetos usando CONSTRUCTORES DESTRUCTORES.
Curso de OpenGL Verano de hrs. de adrenalina 3D M.C. Luis A. Zarza López.
Computación II Repaso de java Karina Figueroa Mora.
El lenguaje de programación C - Vectores y matrices -
Introducción a los punteros Prof. Domingo Hernández.
Entrada / Salida Streams Archivos Algoritmos y Estructuras de Datos I Departamento de Computación, Facultad de Ciencias Exactas y Naturales, Universidad.
Entrada / Salida Streams Archivos Algoritmos y Estructuras de Datos I Departamento de Computación, Facultad de Ciencias Exactas y Naturales, Universidad.
1 Algunas ideas básicas de C++ Agustín J. González ELO-329.
Fundamentos de Programación
ARREGLOS (arrays).
Arreglos Ejemplo paso a paso. Planteamiento Como estudiante de ingeniería, quieres usar tus habilidades de programador para llevar un registro de tus.
ARREGLOS. La sintaxis para declarar e inicializar un array será: Tipo_de_variable[ ] Nombre_del_array = new Tipo_de_variable[dimensión]; También podemos.
MEMORIA DINÁMICA.
Puntero #include int main(int argc, char *argv[]) { int myVar = 378; printf("El valor de la variable es: %d\n", myVar); printf("Dirección de memoria de.
Transcripción de la presentación:

Curvas y Superficies Referencia – capítulo 11 del Libro Rojo

Curvas de Bézier La curvas de Bezier son ecuaciones cúbicas definidas por cuatro puntos: (X0,Y0) (X1,Y1) (X2,Y2) y (X3,Y3) (X0,Y0) y (x3,Y3) son los extremos de la curva Mientras que (X1,Y1) y (X2,Y2) son los puntos de control.

Curvas de Bézier Curva de Bézier

Curvas de Bézier Ecuaciones x(t) = a x t 3 + b x t 2 + c x t + x 0 y(t) = a y t 3 + b y t 2 + c y t + y 0 c x = 3 (x 1 - x 0 ) b x = 3 (x 2 - x 1 ) - c x a x = x 3 - x 0 - c x - b x c y = 3 (y 1 - y 0 ) b y = 3 (y 2 - y 1 ) - c y a y = y 3 - y 0 - c y - b y

Lineas directoras La curva sale con la direccion de la linea P0-P1 y llega con la direccion de la linea P2-P3. El largo de cada linea determina la influencia de esa linea directora. La curva queda dentro del quadrangulo formado por los 4 puntos.

Curva en S

Curva con loop

Otras curvas

Función glMap1() Para definir una curva de Bézier usamos la función glMap1() de la forma: void glMap1x(GLenum Modo, xu1, xu2, GLint paso, GLint orden, const x*puntos); x es f(loat) o d(ouble)

Función glMap1() Ej. glMap1f(GL_MAP1_VERTEX_3, 0.0, 1.0, 3, 4,&ctrlpoints[0][0]); El modo produce vertices de 3 coordenadas, evaluadas entre 0 y 1(0 es el inicio y 1 es el fin), usando un paso de 3, cúbica (el orden es N+1), usando los puntos dados por el arreglo ctrlpoints.

Función glEvalCoord1f() Para dibujar la curva de Bézier usamos la función: void glEvalCoord1x( u ) Esta función equivale a usar glVertex(). El parámetro u debe estar entre los valores de u1 y u2 usados en glMap1()

Ejemplo – programa Bezier #include //header para windows #include #include //header para GLUT #pragma comment( linker, "/subsystem:\"windows\ /entry:\"mainCRTStartup\"" ) // Los 4 puntos de la curva de bezier GLfloat ctrlpoints[4][3] = { { -4.0, -4.0, 0.0}, { -2.0, 4.0, 0.0}, {2.0, -4.0, 0.0}, {4.0, 4.0, 0.0}}; static void redraw(void); int main(int argc, char **argv);

Ejemplo – programa Bezier int main(int argc, char **argv) { glutInit(&argc,argv); //inicializa el andamiaje de GLUT glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH); glutInitWindowPosition(100,100); //posicion inicial para la ventana glutInitWindowSize(400,400); //y tamaño glutCreateWindow("Bezier"); //crear la ventana glutDisplayFunc(redraw); //Registrar la funcion de dibujar glClearColor(0.0, 0.0, 0.0, 1.0); // Espcificamos como generar la curva glMap1f(GL_MAP1_VERTEX_3, 0.0, 1.0, 3, 4,&ctrlpoints[0][0]); glEnable(GL_MAP1_VERTEX_3);

Ejemplo – programa Bezier glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(-5.0, 5.0, -5.0, 5.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glutMainLoop(); // Pasamos control al "loop" de GLUT return 0; } // Fin del Programa Principal

Ejemplo – programa Bezier static void redraw(void) { int i; glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glColor3f(1.0, 1.0, 1.0); //Esta parte dibuja la curva glBegin(GL_LINE_STRIP); for (i = 0; i <= 30; i++) glEvalCoord1f((GLfloat) i/30.0); glEnd(); //Esta dibuja los 4 puntos glPointSize(5.0); //Tamaño de los puntos a dibujar glColor3f(1.0, 1.0, 0.0); glBegin(GL_POINTS); for (i = 0; i < 4; i++) glVertex3fv(&ctrlpoints[i][0]); glEnd(); glFlush(); glutSwapBuffers(); }

Superficies – 2D En 2 dimensiones es similar. Se usa glMap2() en lugar de glMap1() y glEvalCoord2x(u,v) en lugar de glEvalCoord1x(u) El resultado sera una superficie Bezier

Ejemplo EL arreglo de puntos es ahora de 4 x 4 x3: GLfloat ctrlpoints[4][4][3] = { {{ -1.5, -1.5, 4.0}, { -0.5, -1.5, 2.0}, {0.5, -1.5, -1.0}, {1.5, -1.5, 2.0}}, {{ -1.5, -0.5, 1.0}, { -0.5, -0.5, 3.0}, {0.5, -0.5, 0.0}, {1.5, -0.5, -1.0}}, {{ -1.5, 0.5, 4.0}, { -0.5, 0.5, 0.0}, {0.5, 0.5, 3.0}, {1.5, 0.5, 4.0}}, {{ -1.5, 1.5, -2.0}, { -0.5, 1.5, -2.0}, {0.5, 1.5, 0.0}, {1.5, 1.5, -1.0}}};

Ejemplo // Tambien cambia al generar la curva glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4, &ctrlpoints[0][0][0]); glEnable(GL_MAP2_VERTEX_3); glEnable(GL_DEPTH_TEST); glShadeModel(GL_FLAT); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(-5.0, 5.0, -5.0, 5.0, -5.0,5.0);

Ejemplo En Redraw: glPushMatrix (); glRotatef(45.0, 1.0, 1.0, 1.0); for (j = 0; j <= 8; j++) { glBegin(GL_LINE_STRIP); for (i = 0; i <= 30; i++) glEvalCoord2f((GLfloat)i/30.0, (GLfloat)j/8.0); glEnd(); glBegin(GL_LINE_STRIP); for (i = 0; i <= 30; i++) glEvalCoord2f((GLfloat)j/8.0, (GLfloat)i/30.0); glEnd(); } glPopMatrix ();