Open Game Engine Exchange ( OpenGEX ) es un formato que facilita la transferencia de datos de escenas complejas entre aplicaciones de gráficos 3D, incluidos motores de juegos y aplicaciones de modelado 3D, sin importar la aplicación. Utiliza el lenguaje de descripción de datos abiertos para el almacenamiento de datos, un método para el almacenamiento de datos arbitrarios que mantiene la legibilidad humana. El formato de archivo OpenGEX está registrado en la Autoridad de Números Asignados de Internet (IANA) como model/vnd.opengex
tipo de medio. [1]
El formato OpenGEX está definido por la Especificación Open Game Engine Exchange , [2] que está disponible en el sitio web oficial opengex.org.
Los complementos de exportación que escriben el formato OpenGEX están disponibles para Autodesk Maya y 3D Studio Max , con un complemento no oficial disponible para Blender .
En el nivel más básico, un archivo OpenGEX consta de una jerarquía de nodos, un conjunto de objetos, un conjunto de materiales y algo de información adicional sobre las unidades globales y la orientación de los ejes. Las distintas estructuras de nodos, objetos y materiales contienen todos los detalles, como datos geométricos y pistas de animación, dentro de una jerarquía de tipos adicionales de estructuras definidas por OpenGEX. Los siguientes tipos de datos pueden aparecer en un archivo OpenGEX:
En la lista que aparece a continuación se muestra un ejemplo muy simple de un archivo OpenGEX completo que describe un cubo verde. Comienza con un grupo de Metric
estructuras que definen las unidades de medida y la dirección ascendente global. A continuación, aparece una única GeometryNode
estructura que proporciona el nombre y la transformación del cubo. Los datos geométricos del cubo se almacenan en la GeometryObject
estructura a la que hace referencia el nodo de geometría. La estructura del objeto de geometría contiene una única malla de primitivas de triángulos que incluye posiciones por vértice, normales y coordenadas de textura . Por último, la Material
estructura al final del archivo contiene el color de reflexión difusa verde.
Métrica (clave = "distancia") {float {0.01}}Métrica (clave = "arriba") {cadena {"z"}}Nodo de geometría $node1{ Nombre {string {"Cubo"}} ObjetoRef {ref {$geometry1}} MaterialRef {ref {$material1}} Transformar { flotar[12] { {1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 50.0, 50.0, 0.0} } }}GeometryObject $geometry1 // Cubo{ Malla (primitiva = "triángulos") { VertexArray (atributo = "posición") { flotar[3] // 24 { {-50,0, -50,0, 0,0}, {-50,0, 50,0, 0,0}, {50,0, 50,0, 0,0}, {50,0, -50,0, 0,0}, {-50,0, -50,0, 100,0}, {50,0, -50,0, 100,0}, {50,0, 50,0, 100,0}, {-50,0, 50,0, 100,0}, {-50,0, -50,0, 0,0}, {50,0, -50,0, 0,0}, {50,0, -50,0, 100,0}, {-50,0, -50,0, 100,0}, {50,0, -50,0, 0,0}, {50,0, 50,0, 0,0}, {50,0, 50,0, 100,0}, {50,0, -50,0, 100,0}, {50,0, 50,0, 0,0}, {-50,0, 50,0, 0,0}, {-50,0, 50,0, 100,0}, {50,0, 50,0, 100,0}, {-50,0, 50,0, 0,0}, {-50,0, -50,0, 0,0}, {-50,0, -50,0, 100,0}, {-50,0, 50,0, 100,0} } } VertexArray (atributo = "normal") { flotar[3] // 24 { {0,0, 0,0, -1,0}, {0,0, 0,0, -1,0}, {0,0, 0,0, -1,0}, {0,0, 0,0, -1,0}, {0,0, 0,0, 1,0}, {0,0, 0,0, 1,0}, {0,0, 0,0, 1,0}, {0,0, 0,0, 1,0}, {0,0, -1,0, 0,0}, {0,0, -1,0, 0,0}, {0,0, -1,0, 0,0}, {0,0, -1,0, 0,0}, {1,0, 0,0, 0,0}, {1,0, 0,0, 0,0}, {1,0, 0,0, 0,0}, {1,0, 0,0, 0,0}, {0,0, 1,0, 0,0}, {0,0, 1,0, 0,0}, {0,0, 1,0, 0,0}, {0,0, 1,0, 0,0}, {-1,0, 0,0, 0,0}, {-1,0, 0,0, 0,0}, {-1,0, 0,0, 0,0}, {-1,0, 0,0, 0,0} } } VertexArray (atributo = "texcoord") { flotar[2] // 24 { {1,0, 0,0}, {1,0, 1,0}, {0,0, 1,0}, {0,0, 0,0}, {0,0, 0,0}, {1,0, 0,0}, {1,0, 1,0}, {0,0, 1,0}, {0,0, 0,0}, {1,0, 0,0}, {1,0, 1,0}, {0,0, 1,0}, {0,0, 0,0}, {1,0, 0,0}, {1,0, 1,0}, {0,0, 1,0}, {0,0, 0,0}, {1,0, 0,0}, {1,0, 1,0}, {0,0, 1,0}, {0,0, 0,0}, {1,0, 0,0}, {1,0, 1,0}, {0,0, 1,0} } } Matriz de índice { uint32[3] // 12 { {0, 1, 2}, {2, 3, 0}, {4, 5, 6}, {6, 7, 4}, {8, 9, 10}, {10, 11, 8}, {12, 13, 14}, {14, 15, 12}, {16, 17, 18}, {18, 19, 16}, {20, 21, 22}, {22, 23, 20} } } }}Material $material1{ Nombre {string {"Verde"}} Color (atributo = "difuso") {float[3] {{0, 1, 0}}}}
El desarrollo del formato OpenGEX fue financiado por una campaña de colaboración colectiva [3] que finalizó el 8 de mayo de 2013. Mientras se diseñaba el formato, también se creó el lenguaje de descripción de datos abiertos como lenguaje base genérico sobre el que se construyó OpenGEX. La compatibilidad con el formato OpenGEX se implementó originalmente en la versión 3.5 de C4 Engine .