Herramientas de usuario

Herramientas del sitio


fw:ogl:xtra

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anterior Revisión previa
Próxima revisión
Revisión previa
fw:ogl:xtra [2012/05/17 11:02]
alfred
fw:ogl:xtra [2020/05/09 09:25] (actual)
Línea 302: Línea 302:
 </​code>​ </​code>​
 Debemos recordar activar la GL_TEXTURE0,​ al acabar de definir las anteriores, que es por la que trabajamos por defecto. Debemos recordar activar la GL_TEXTURE0,​ al acabar de definir las anteriores, que es por la que trabajamos por defecto.
 +
  
 ==== Polygon Tesselation ==== ==== Polygon Tesselation ====
   * [[http://​www.songho.ca/​opengl/​gl_tessellation.html]]   * [[http://​www.songho.ca/​opengl/​gl_tessellation.html]]
   * {{fw:​ogl:​polygon_tesselation_examples.zip|Ejemplos}}   * {{fw:​ogl:​polygon_tesselation_examples.zip|Ejemplos}}
-Para dibujar polígonos concavos (que desde cualquier punto NO se puede trazar una línea a otro punto del polígono sin dejar de pasar por su superficie) es necesario utilizar esta técnica. ​+Para dibujar polígonos concavos (que desde cualquier punto NO se puede trazar una línea a otro punto del polígono sin dejar de pasar por su superficie) es necesario utilizar esta técnica. ​\\  
 +  - Crearemos con ''​gluNewTess''​ (y al final destruiremos con ''​gluDeleteTess''​) un objeto ''​GLUtessellator''​. 
 +  - Indicaremos qué funciones se utilizarán para dibujar con ''​gluTessCallback'',​ estas funciones podrán ser para iniciar la figura con el parámetro ''​GLU_TESS_BEGIN'',​ para dibujar un vértice con ''​GLU_TESS_VERTEX''​... 
 +  - Indicaremos las propiedades de dibujo del polígono con ''​glPolygonMode''​. 
 +  - Iniciaremos el dibujo de un polígono con ''​gluTessBeginPolygon''​ y lo finalizaremos con ''​gluTessEndPolygon''​. 
 +  - Añadiremos porciones del polígono (por ejemplo, puede que tenga agujeros, cada polígono dentro del polígono se representa con estas rutinas) mediante ''​gluTessBeginContour''​ y ''​gluTessEndContour''​. 
 +  - Añadiremos vértices con ''​gluTessVertex''​. 
 +<code cpp> 
 +void tessVertexCB2(const GLvoid *data) { 
 +    const GLdouble *ptr = (const GLdouble*)data;​ 
 +    glTexCoord2dv(ptr+2);​ 
 +    glVertex3dv(ptr);​ 
 +
 +void tessVertexCB(const GLvoid *data) { 
 +    const GLdouble *ptr = (const GLdouble*)data;​ 
 +    glColor3dv(ptr+3);​ 
 +    glVertex2dv(ptr);​ 
 +    cout << " ​ glColor3d("​ << *(ptr+3) << ", " << *(ptr+4) << ", " << *(ptr+5) << "​);​\n";​ 
 +    cout << " ​ glVertex3d("​ << *ptr << ", " << *(ptr+1) << ", " << *(ptr+2) << "​);​\n";​ 
 +
 +void TessCombine(double coords[3],​double* data[4],​float weight[4],​double** result) { 
 +   ​*result = (double*) malloc(3 * sizeof(double));​ 
 +   ​(*result)[0] = coords[0];​ 
 +   ​(*result)[1] = coords[1];​ 
 +   ​(*result)[2] = coords[2];​ 
 +
 +void TessError(GLenum err) { 
 +   ​fprintf(stderr,"​Tessellation Error: %s\n",​gluErrorString(err));​ 
 +   ​exit(1);​ 
 +
 +void display(void) 
 +
 + GLdouble vertices[4][4] = { {-0.5,-0.5, 1.0, 1.0}, {-0.5,0.5, 1, 0}, {0.5,0.5, 0,0}, {0.5,-0.5, 0,1} }; 
 + 
 + glClear(GL_COLOR_BUFFER_BIT);​  
 + glBindTexture(GL_TEXTURE_2D,​ texture); 
 +  
 + GLUtesselator *tess = gluNewTess();​ 
 + glPolygonMode(GL_FRONT_AND_BACK,​GL_FILL);​ 
 + 
 + gluTessCallback(tess,​ GLU_TESS_BEGIN,​ (GLvoid (*) ()) &​glBegin);​ 
 + //​ gluTessCallback(tess,​GLU_TESS_VERTEX ,(GLvoid (*) ()) &​glVertex2dv);​ 
 + gluTessCallback(tess,​GLU_TESS_VERTEX ,(GLvoid (*) ()) &​tessVertexCB2);​ 
 + gluTessCallback(tess,​ GLU_TESS_END,​ (GLvoid (*) ()) &​glEnd);​ 
 + gluTessCallback(tess,​GLU_TESS_COMBINE,​(GLvoid (*) ()) &​TessCombine);​ 
 + gluTessCallback(tess,​GLU_TESS_ERROR ​ ,(GLvoid (*) ()) &​TessError);​ 
 + 
 + gluTessBeginPolygon(tess,​ NULL); 
 + gluTessBeginContour(tess);​ 
 + for (int k=0; k<4; k++) { 
 + gluTessVertex(tess,​ vertices[k],​ vertices[k]);​ 
 +
 + gluTessEndContour(tess);​ 
 + gluTessEndPolygon(tess);​ 
 +  
 + gluDeleteTess(tess);​ 
 + 
 + glFlush();  
 + glutSwapBuffers();​ 
 +
 +</​code>​
  
 ===== Carga de imágenes ===== ===== Carga de imágenes =====
fw/ogl/xtra.1337252521.txt.gz · Última modificación: 2020/05/09 09:24 (editor externo)