|
|
|
@ -1,3 +1,92 @@
|
|
|
|
|
---
|
|
|
|
|
title: "P3D: Exportar e importar mallas OBJ"
|
|
|
|
|
title: "P3D: Exportar mallas OBJ"
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
Es posible exportar nuestras mallas / objetos 3D desde Processing, a un archivo con un formato común llamado .OBJ
|
|
|
|
|
|
|
|
|
|
Normalmente estos archivos pueden importarse en software de modelado 3D, render o incluso de impresión 3D.
|
|
|
|
|
|
|
|
|
|
# Configuración
|
|
|
|
|
|
|
|
|
|
Instala la biblioteca *OBJExport*:
|
|
|
|
|
|
|
|
|
|
*Sketch -> Importar biblioteca -> Añadir biblioteca*. Ahí busca: *OBJExport* y presiona en *Instalar*
|
|
|
|
|
|
|
|
|
|
[Enlace original de la biblioteca](https://n-e-r-v-o-u-s.com/tools/obj/)
|
|
|
|
|
|
|
|
|
|
# Ejemplo de uso
|
|
|
|
|
|
|
|
|
|
## Polígonos triangulares y cuadrangulares
|
|
|
|
|
|
|
|
|
|
Este ejemplo guarda los objetos dibujados entre la función `beginRecord( )` y `endRecord()`, al iniciar el programa
|
|
|
|
|
|
|
|
|
|
```java
|
|
|
|
|
import peasy.*;
|
|
|
|
|
PeasyCam cam;
|
|
|
|
|
|
|
|
|
|
// importa biblioteca objexport
|
|
|
|
|
import nervoussystem.obj.*;
|
|
|
|
|
boolean record = true; // cambia a false para no guardar
|
|
|
|
|
|
|
|
|
|
void setup() {
|
|
|
|
|
size(400, 400,P3D);
|
|
|
|
|
|
|
|
|
|
// cámara a 50 unidades de 0,0,0
|
|
|
|
|
cam = new PeasyCam(this, 50);
|
|
|
|
|
|
|
|
|
|
// ajusta perspectiva: ve en un rango entre 1 y 500 unidades
|
|
|
|
|
perspective(PI/3, 1.0*width/height, 1, 500);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void draw() {
|
|
|
|
|
background(255);
|
|
|
|
|
// Establece "luces" por defecto
|
|
|
|
|
lights();
|
|
|
|
|
|
|
|
|
|
// guía de ejes coordenados con largo de 10
|
|
|
|
|
dibujaEjes(10);
|
|
|
|
|
|
|
|
|
|
// inicia grabación de archivo
|
|
|
|
|
if (record) {
|
|
|
|
|
beginRecord("nervoussystem.obj.OBJExport", "nombredearchivo.obj");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// dibuja aquí:
|
|
|
|
|
box(10);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// termina de grabar el archivo
|
|
|
|
|
if (record) {
|
|
|
|
|
endRecord();
|
|
|
|
|
record = false;
|
|
|
|
|
}
|
|
|
|
|
} // cierra draw()
|
|
|
|
|
|
|
|
|
|
void dibujaEjes(float d) {
|
|
|
|
|
// esta función dibuja los ejes coordenados X, Y, Z
|
|
|
|
|
// de colores R, G, B respectivamente
|
|
|
|
|
// d: longitud de las líneas
|
|
|
|
|
|
|
|
|
|
// eje X: rojo
|
|
|
|
|
stroke(255, 0, 0);
|
|
|
|
|
line(0, 0, 0, d, 0, 0);
|
|
|
|
|
|
|
|
|
|
// eje Y: verde
|
|
|
|
|
stroke(0, 255, 0);
|
|
|
|
|
line(0, 0, 0, 0, d, 0);
|
|
|
|
|
|
|
|
|
|
// eje Z: azul
|
|
|
|
|
stroke(0, 0, 255);
|
|
|
|
|
line(0, 0, 0, 0, 0, d);
|
|
|
|
|
|
|
|
|
|
// regresa al color negro de línea
|
|
|
|
|
stroke(0, 0, 0);
|
|
|
|
|
} // cierra función dibujaEjes( )
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## Polígonos de más de 4 aristas
|
|
|
|
|
|
|
|
|
|
Si estás creando mallas con polígonos que no son triángulos ni cuadriláteros (por ejemplo, al crear caras sin modo de dibujo especificado, y/o con `bezierVertex( )`), usa la función `beginRaw( )` en lugar de `beginRecord( )` para que tu archivo consista en la malla teselada (convertida a triángulos) por Processing.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|