Muestra las diferencias entre dos versiones de la página.
| Ambos lados, revisión anterior Revisión previa Próxima revisión | Revisión previa | ||
|
fw:lib3ds [2008/07/09 09:38] alfred |
fw:lib3ds [2020/05/09 09:25] (actual) |
||
|---|---|---|---|
| Línea 33: | Línea 33: | ||
| </code> | </code> | ||
| ''lib3ds_file_free'' libera de memoria el ''Lib3dsFile'' pasado por parámetro. | ''lib3ds_file_free'' libera de memoria el ''Lib3dsFile'' pasado por parámetro. | ||
| + | |||
| Línea 54: | Línea 55: | ||
| glEnd(); | glEnd(); | ||
| </code> | </code> | ||
| + | |||
| + | ==== Cálculo de normales ==== | ||
| + | Lib3ds dispone de una función llamada ''lib3ds_mesh_calculate_normals'' que calcula las normales para una mesh, se le pasa la mesh de la cual queremos calcular las normales y tantos arrays de 3 floats como normales tenga esta mesh (número de caras multiplicado por 3, que son los vértices). Para más comodidad podemos utilizar la estructura ''Lib3dsVector''. | ||
| + | <code c> | ||
| + | Lib3dsVector* normals = new Lib3dsVector[mesh->faces * 3]; | ||
| + | lib3ds_mesh_calculate_normals(mesh, normals); | ||
| + | </code> | ||
| + | Ahora dentro del vector de normales tendremos las normales por cada vértice. | ||
| + | |||
| + | |||
| + | |||
| + | ==== Cargar las coordenadas de textura ==== | ||
| + | Las coordenadas de textura las tratamos desde la instancia a ''Lib3dsMesh''. Esta contiene dos variables: | ||
| + | * //texels// que contiene el número de coordenadas almacenadas. | ||
| + | * //texelL// que contiene las coordenadas en un array de arrays de dos números (x e y) de la coordenada. Para saber que coordenada que le toca a cada vértice iremos a la cara con la que estemos trabajando y en su variable //points// encontraremos los tres indices del array de vértices correspondientes a sus tres vértices, ese índice también coincide con el vértice para las coordenadas de textura. | ||
| + | <code c> | ||
| + | for (int i=0; i<mesh->faces; i++) { | ||
| + | Lib3dsFace face = mesh->faceL[i]; | ||
| + | for (int i=0; i<3; i++) { | ||
| + | glTexCoord2f (mesh->texelL[face.points[i]][0], mesh->texelL[face.points[i]][1]); | ||
| + | ... | ||
| + | </code> | ||
| + | Para saber qué textura tiene aplicada una cara accederemos a su variable //material//, esta contiene un string con el identificador. | ||