Home

Desarrollo de un visor modelador 3D colaborativo

image

Contents

1. Ww Ww w w w w w w w w Y w v Y v g Y A Q Q Qo s o oO s Q Q e H 2 3 2 2 g Properties v CameraPreset VQ TurnTableCamera PointLight LightPreset g 0700000000090909 y Sun Light VY 1 Material Library banner leaf vase_round Material__ 57 Material 298 Ilustraci n 2 3 Clara io Ejemplo de escena 3D imagen obtenida desde la Wikipedia 6 Sitio web de Clara io https clara io 7 Documentaci n sobre el SDK de Clara io https clara io learn sdk 8 Art culo de Wikipedia sobre Clara io http en wikipedia org wiki Clara io Desarrollo de un visor modelador 3D colaborativo Estado del arte 2 3 Real time DWG file collaboration AutoCAD 360 AUTODESK AUTOCAD 360 Ilustraci n 2 4 Logo de AutoCAD 360 El canal de AutoCAD 360 en Youtube public en Marzo del 2011 un v deo titulado Realtime DWG file collaboration AutoCAD 360 En l se mostraba c mo era posible usar el programa AutoCAD 360 orientado a la creaci n de planos 2D de manera colaborativa por parte de m ltiples usuarios usando diferentes dispositivos AutoCAD 360 i Sheridan_8 dwg Design Blo 3 Send Feedbac tele e Landscaf e a 7 Eome ames 4801680 SY eA Ni AW N ANY ANY PE xA 7 AN a A aasam SHO 5 E A Harriet Homeowner O I m not sure that we should have a stair here This will
2. 6 5 3 2 La carpeta de c digo del servidor src server El c digo del servidor se divide en las siguientes subcarpetas e managers aqu se encuentran los gestores empleados por el servidor gestor de primitivas 66 Desarrollo de un visor modelador 3D colaborativo Diseno la clase Scene etc e sync_data incluye la especificaci n de la clase ResourceSyncData y sus clases derivadas 6 5 3 3 La carpeta de c digo com n al cliente y al servidor src common La carpeta de c digo com n incluye las siguientes subcarpetas principales e commands todos los comandos usados por COMO e ids definiciones de las clases directamente con la identificaci n de usuarios y recursos ResourcelD UserID ResourcelDsGenerator e managers incluye el c digo base de aquellos gestores que se encuentran presentes en el cliente y el servidor c mo el gestor de primitivas o el de texturas e packables contiene la jerarqu a de tipos de datos auxiliares y empaquetables Packable PackableUint32 PackableFile etc e packets definiciones de todas las clases que representan paquetes para su transmisi n a trav s de la red Packet NewUserPacket SceneUpdatePacket etc e utilities clases auxiliares Lockable Log etc 77 La clase Lockable es la clase base de todas las estructuras de datos susceptibles de acceder concurrentemente a sus datos Lockable incluye un cerrojo privado y los mecanismos apropiados para
3. UNIVERSIDAD DE LAS PALMAS DE GRAN CANARIA i fi Escuela de Ingenieria Informatica Desarrollo de un visor modelador 3D colaborativo Proyecto fin de carrera Ingenieria Informatica Moises J Bonilla Caraballo Tutor Agustin Trujillo Pino Las Palmas de Gran Canaria Diciembre de 2014 Indice de contenido Ms MALHOCIUICC IO Manas cust a taanemonec ee aoe wena ane ae 1 1 1 Motivaci n y descripci n del DrOyecto ooccccccccccncncnnnnnnnnnnnnnnnnnoncnnnonononnnnnnnnncnnccncnnnnncncnnnns 1 A U Oi eeur r E E T E E een beeen E trends vel te 3 2e Msg AAA A sea ceaes 3 TN AU O A A A dae tse cdl fee A A PA 4 2 3 Real time DWG file collaboration AutoCAD BBO ooooooocncocnnnnnnnnnnncnnnnnnnnnnnnnononnnnonanonnnnnnnnnnnos 5 24 Real X tend tundra SD Kit 6 JOBJE VOS ES 7 5 LOBOS IES a is 7 BZ ODI BUY OS INICIOS ai SAA bar sinntsauies 7 4 REGUISitOS hardware y SOf WI 9 AIl Regaisitos Hardware aos 9 O aci 9 4 2 REGU SOS OO NWE NN 10 AZ O O OR 10 422 Hemamientas de des aro Ona deis 10 AS IAS DAD wa cso 14 SANAN US fists ansible shen eer ean Eo O EE eto ge asa Bena TE 17 MELO in 17 DZ Glosaro de CONCISA AA 17 5 3 Funcionalidades del programma sssccccccccccccccccccensnnsssssssessesseccececcccccccnnnnasssssececceassceees 18 lO Ware lente iia 18 AS A A 19 5 4 Desaf os de la programaci n distribuida oooocccccnncnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnaninnnnos 20 DA LBO de Te CUISOS AN 20
4. 83 V ase Bloqueo de recursos en el apartado de An lisis 84 Tutorial de Boost Asio http www boost org doc libs 1 54 0 doc html boost asio tutorial html 85 A guide to getting started with boost asio http www gamedev net blog 950 entry 2249317 a guide to getting started with boostasio 86 mat server Ejemplo de codigo en la documentacion de Boost Asio 87 Ve se el apartado Diferentes rdenes de bytes Endianess en la secci n de An lisis 71 Desarrollo de un visor modelador 3D colaborativo Desarrollo En este momento cuento con un servidor con capacidad para multiples clientes donde cada cliente tiene constancia de los dem s Ha llegado el momento de sincronizar la creaci n y manipulaci n de cubos entre los diferentes clientes y el servidor En primer lugar sincronizo la creaci n de cubos y a continuaci n la selecci n y deselecci n de los mismos Finalmente completo el manipulador de cubos online al sincronizar tambi n la transformaci n de selecciones de cubos traslaciones rotaciones y escalados Permito transformaciones libres y fijas con respecto a un eje El siguiente fotograma pertenece a un v deo publicado en Youtube con el estado final de este incremento E UPDATE gent cooperativa Modeller DEAL EME l E Tools menu uy Tools mero Prepection Fi Projection mi Front viera Orto fi ert wie tha t HI App
5. ImportedPrimitiveData trianglesGroups_ vector lt TrianglesGroupWithMaterial gt filePath string Ilustraci n 6 22 Las clases OBJPrimitivesImported PrimitivData y PrimitiveInfo en contexto Como se ha comentado anteriormente el importador de primitivas ir rellenando una estructura ImportedPrimitiveData la cual deriva de PrimitiveData Esta ltima incluye el nombre de la primitiva as como la informaci n de sus materiales y sus tri ngulos de posiciones coordenadas UV y normales Adem s la clase PrimitiveData incluye una estructura MeshOpenGLData con la forma siguiente 71 Las estructuras MeshVertexData MeshNormalData y MeshTextureData contienen cada una un vector de posiciones normales o coordenadas UV respectivamente adem s de un vector de ndices al primero Este ltimo define los tri ngulos de la malla DO Desarrollo de un visor modelador 3D colaborativo Diseno lt lt struct gt gt MeshOpenGLData V boData vector lt GLTloat gt eboData vector lt GLuint gt Ilustraci n 6 23 Estructura MeshOpenGL Data La clase MeshOpenGLData incluye dos buffers vectores con los contenidos que poblar n respectivamente el VBO y el EBO asociados a las mallas que se generen a partir de la primitiva Esta estructura no se lee desde fichero sino que se genera por medio del m todo PrimitiveData generateOGLData a partir de los tri ngulos de posiciones normales y UV que s se obtuv
6. A continuaci n me dispuse a aprender OpenGL en su versi n m s moderna 4 3 intentando huir de los tutoriales que plagan la red usando caracter sticas obsoletas de la API Para ello adquir el libro OpenGL Programming Guide y proced a estudiarme los temas introductorios Habiendo repasado la librer a Qt y la API de OpenGL estudi la integraci n de ambas librer as Gracias a los tutoriales del sitio de Qt no tard en crear una aplicaci n de prueba consistente en una ventana Qt donde se renderizaba un cubo 3D OpenGL COMO se dise para incluir las cuatro vistas t picas que suelen usarse en todo programa de modelado 3D frontal izquierda superior y c mara Por esta raz n se estim oportuno que el siguiente paso consistiera en crear una aplicaci n donde coexistieran cuatro vistas 3D compartiendo el mismo contexto de OpenGL Al principio se dej que las cuatro vistas 3D mostraran lo mismo la escena vista desde el frente no se permit a al usuario cambiar la vista En su lugar se procedi a permitir que el usuario pudiera crear cubos desde un bot n en la interfaz A continuaci n se implement la selecci n y deselecci n de cubos mediante clics del rat n sobre las vistas 3D Finalmente se a adieron las Capacidades de transformar selecciones de cubos traslaciones rotaciones y escalados Todas las 79 SHREINER Dave SELLERS Graham KESSENICH John LICEA KANE Bill OpenGL Programming Guide Eight Edit
7. ae ae PO View Top Proj Ortho Maximize View Camera Proj Perspective Maximize space Sun__O_2 prim Y Import primitive Lights creation Create directional light lt P Next with the cube selected we go to the tools panel and select the tab Texture walls for displaying the texture walls editor At the top of this editor we can select the geometry s face we want to texturize For example select the front face of the cube 92 Desarrollo de un visor modelador 3D colaborativo Anexo A Manual de usuario scene Cooperative Modeller View i 5 Materials Texture walls lt gt View Front Proj Ortho Maximize View Right Proj Ortho Maximize Texture wall Front face Y Texture gt N Select a texture Texture offset X 0 00 Texture offset Y 0 00 Texture scale X View Top Proj Ortho Maximize View Camera Proj Perspective Maximize 1 00 X Texture scale Y 1 00 Once the wall you want to texturize is selected press the button Select a texture for opening a new window called Textures Viewer Here you will see the textures already loaded in COMO as well as a button for loading new ones eee View ene a here Materials Texture walls lt gt View Front Proj Ortho Maximize View Right Proj Ortho Maximize Texture wall Front face Y Textures viewer Texture SN Select a texture Texture offset X J ae 0 00 E XQ A Ad A P p Texture
8. nUnsyncCommands PackableUint32 lt std uint32_t gt commands PackableCommandsList name PackableString 1d_ ppal name_ PackableString scene ame_ PackableString Ilustraci n 6 6 Jerarqu a de clases Packet En COMO existe un total de tres paquetes distintos MNewUserPacket UserAcceptancePacket y SceneUpdate Los dos primeros se transmiten nicamente al principio de una conexi n entre un cliente y el servidor Una vez que la conexi n queda establecida cliente y servidor comienzan a intercambiar nicamente paquetes SceneUpdatePacket 6 2 2 Sincronizaci n 6 2 2 1 Estableciendo la conexi n Cuando un cliente trata de conectarse a una escena se produce la siguiente interacci n cliente servidor 34 Desarrollo de un visor modelador 3D colaborativo Diseno CLIENTE Crea un paquete NewUserPacket con su nombre de usuario escogido Transmite el paquete NewUserPacket anterior al servidor Recibe un paquete UserAcceptancePacket desde el servidor Se conecta a la escena con los datos identificativos recibidos en el paquete anterior Incluye el nombre recibido desde el cliente en el paquete UserAcceptancePacket SERVIDOR Recibe un paquete NewUserPacket desde el cliente Extrae el nombre de usuario del paquete anterior Crea un paquete UserAcceptancePacket vac o Genera un ID de usuario para el nuevo cliente y lo incluye en el paquete UserAcceptancePack
9. o Importar crear una primitiva significa que partiendo de un fichero con la especificaci n de una malla 3D pe Un fichero OBJ se obtiene una especificaci n de primitiva Esta especificaci n es un fichero con extensi n prim que define a la primitiva en un formato propio m s directo de leer para la aplicaci n o Instanciar una primitiva implica crear una malla a partir de de una primitiva La especificaci n de la malla es una copia exacta con sus propios materiales de la especificaci n de la primitiva e Luz malla en modo malla de alambres wireframe que emite luz 41 Materials and Textures Wiki Blender 3D Noob to Pro http en wikibooks org wiki Blender 3D Noob to Pro Materials and Textures 42 Art culo de la Wikipedia sobre el m todo de renderizado wireframe http es wikipedia org wiki Wireframe 17 Desarrollo de un visor modelador 3D colaborativo Analisis Luz direccional luz situada en el infinito cuya luz se emite con todos sus rayos siguiendo la misma direcci n C mara malla en modo malla de alambres wireframe cuya posici n y orientaci n define una vista de la escena 3D Comando orden enviada entre un cliente y el servidor que altera el estado de una escena Un ejemplo de comando ser a Crear cubo Shader programa de dibujado que normalmente se ejecuta directamente en la GPU 5 3 Funcionalidades del programa Habiendo definido los conceptos m s importantes del do
10. Vertex gt vertexTriangles vector lt uint 3 gt sendToShader in openGL OpenGL viewatrix mat4 in projectionMatrix mat4 void drawEdges in openGL OpenGL in view mat4 in projection mat4 in contourColor vec4 null void drawertexNormals in openGL OpenGL in viewMatrix mat4 in projectionMatrix mat4 in color vec4 void TextureWallsManager baits SystemMesh lt lt struct gt gt TrianglesGroupWithTextureWall textureWallID ResourceID Imported Mesh i ae lt lt struct gt gt TrianglesGroupWithMaterial materialIndex unsigned int lt lt struct gt gt TrianglesGroup firstTriangleIndex unsigned int nTriangles unsigned int Ilustraci n 6 13 Jerarqu a de clases Mesh Las mallas se dividen en mallas del sistema SystemMesh y mallas importadas ImportedMesh 6 3 5 1 Mallas del sistema Texture walls Las mallas del sistema son aquellas generadas por el propio software a partir de par metros definidos por el usuario Dos ejemplos de mallas del sistema son los cubos y las esferas En el primer caso el sistema genera un cubo a partir de un tama o de lado definido por el usuario En el segundo caso una esfera es generada a partir del n mero de divisiones que especifica el usuario Las mallas del sistema constan de una serie de paredes o caras superficies continuas y suaves Por ejemplo un cubo contiene 6 caras cada uno de los planos que l
11. translating your entities selection If you press x y or z while translating the translation will be fixed to the X Y or Z axis respectively e Rotate Press r on your keyboard and drag your mouse over the viewport for rotating We Wool Wat your entities selection If you press x y or z while rotating the rotation will be fixed to the X Y or Z axis respectively Wott e Scale Press s on your keyboard and drag your mouse over the viewport for scaling Ws Ww oil Wat your entities selection If you press x y or z while scaling the scale will be fixed to the X Y or Z axis respectively 10 3 4 1 Changing the pivot point mode By default the rotations and scales of selections will be done with the selection s centroid as the pivot point You can change the current pivot point by selecting the Transformation tab on your tools panel and selecting a new pivot point mode from the Select pivot point mode dropdown list 88 Desarrollo de un visor modelador 3D colaborativo Anexo A Manual de usuario scene Cooperative Modeller View Creation Transformation lt u gt R A View Front Proj Ortho Maximize View Right Proj Ortho Maximize Select pivot point mode al Selection s centroid v UO dl View Top Proj Ortho Maximize View Camera Proj Perspective Maximize V z 4 The selectable pivot point modes are listed below Selection s centroid The default mode All
12. 5 4 2 Diferentes rdenes de bytes EMCIANNESS cccccceeeeeeeeeseeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeees 20 5 4 3 Diferentes tama os de los tipos de datoS ccccccccncnnnnnnnnnnnnnnnnnnncnccncnnnnnnnonanocnnnnnanononnnnns 21 A AZ O 21 5 4 5 Salvado y recuperado de CSCOMAG sseesnnsssssssessescssccccccccccccccenensssssssssssseeececnasseceeeeans 21 5 5 An lisis de funcionalidades proporcionadas por t LCeLOS cccccccccccecceceeeeessssseeeeeeececeeeeeeeees 21 5 0 1 OpenGL y su pipeline de renderizado ssssssccccccccccccccccceennssssssessssesecececeeecenaseses 21 5 9 2 Qt y su mecanismo de se ales y SlOIS cccccccccccccssceensnsssssssssseescecccceccccnasececceasssceeeuaes 24 zoo Bos ASIO y la ES asiMcroNa casada 25 RTOS INO ta ao Alo Nilo eco 27 DO LAS PO CTOS generales eender N E E cows cn TN a ate eaten ncn 27 On PAT ULC COU a dE Ted AAA AA AAA 27 AA A a seca yclerd cd acer Adeeb eaten 27 Oi Lcd SMICFOMIZACION csiatsicess5 joscessatonsdeniassiceneioiasens N N 27 O Usuarios recu adas 27 Oslo Blogue de Recurs OS NA S 28 6 2 Comunicacion Cliente SII AAA 30 6 2 1 Packables comandos DAME A id 30 e PASEET ELVA LES I rra 34 SS sesanasanaaa aca ie ead amnneoia te sanesesagancadonaamaneans 36 OS TO PP N a colt Staten N A a tastank a 36 O x2 ROCOSO eee 36 A A emauees 37 6 3 4 La clase auxiliar OpenGL y los shaders de COMO cccsceeeecccceccecceeeeeeeeessceesaeeee
13. By default 7777 port will be used 3 Max uses Limits the amount of users allowed to connect and concurrently work on the scene 4 Load scene from file Allows user to load the scene from a previous saved scene file Leave this field blank for a new empty scene Once the previous fields are filled press the Next button to create a server A new terminal with the server will open 84 Desarrollo de un visor modelador 3D colaborativo Anexo A Manual de usuario Create server Scene name Unnamed scene Port O 655 Server created i Max users 1 The server has been created v 4 e e e o p A gt 00 game DEBUG Primitive creation command created for primitive data scenes Unnamed sc ene _10 temp Textured cube_0 14 12 11 2014 04 53 07 prim DEBUG Primitive registered id 0 14 name Textured cube _0 14 categor y 0 12 file path data scenes Unnamed scene_10 primitives geometry Textured cube_ 0 14 prim DEBUG Server broadcasting DEBUG Adding primitives to scene data local primitives OK DEBUG Category created data scenes Unnamed scene_10 primitives Uncategorized DEBUG Server broadcasting gt DEBUG Initializing an empty scene DEBUG Processing command target RESOURCE DEBUG Light created 0 16 DEBUG Server broadcasting DEBUG Processing command target ENTITY DEBUG Creating camera 0 17 DEBUG Creati
14. Create primitive Cube 81 Al seleccionar centroides individuales y rotar una selecci n de entidades cada entidad gira en torno a su propio centroide 82 Cooperative Modeller First video v deo en Youtube https www youtube com watch v _thvV icsMO amp feature youtu be 70 Desarrollo de un visor modelador 3D colaborativo Desarrollo 7 3 El segundo incremento un manipulador de cubos online Ya se habia conseguido un sencillo manipulador de cubos en local Ahora era el momento de transformarlo en un manipulador de cubos online Mientras dise o este nuevo incremento me decanto por el bloqueo de recursos y establezco que todas las escenas compartidas en COMO sean p blicas cualquier usuario puede conectarse al servidor si sabe su IP Para el salto a la programaci n distribuida opto por usar la librer a Boost Asio Invierto tiempo en aprenderla siguiendo e implementando los ejemplos de dos fuentes la propia documentaci n de Boost Asio y una gu a de introducci n a la misma Tras el estudio comienzo la implementaci n del programa servidor con la creaci n de una clase Server Para ello parto del ejemplo Chat server disponible en la documentaci n de Boost Asio La primera versi n de la clase Server crea una piscina de hilos thread pool para atender la E S de red y posteriormente inicia una espera as ncrona no bloqueante por una conexi n desde el cliente Cuando consigo la conex
15. algunos de estos proyectos 2 1 Verse Ilustraci n 2 1 Logo de Verse 2 0 Verse es un protocolo de red que permite compartir datos 3D en tiempo real Al ser un protocolo permite que los usuarios que trabajan sobre una misma escena puedan usar cada uno su software de preferencia siempre que ste implemente el protocolo Verse Actualmente se est desarrollando un fork con la versi n 2 0 del protocolo Verse cuya librer a a n en un estado muy temprano del desarrollo se encuentra bajo una licencia BSD El protocolo sigue una arquitectura cliente servidor se apoya en UDP y cuenta con un sistema de autenticaci n de usuarios Aunque bastante prometedor el protocolo Verse no parece estar desarroll ndose activamente ahora mismo La secci n de noticias del desarrollador de Verse 1 0 no se actualiza desde Octubre del 2013 y sus ltimas actualizaciones no se refieren al propio proyecto Verse El desarrollo de un plugin de Verse para Blender parece no haberse continuado m s all de la versi n 2 4 del modelador Por su parte el repositorio de Verse 2 0 muestra un estado temprano y no muy activo de su desarrollo P gina web de Verse versi n 1 http www quelsolaar com verse Sitio web de Verse 2 0 http verse github io Secci n de noticias del sitio web de Verse 1 0 http news quelsolaar com home KR W N e ae documentation for Verse integration to Blender 5 Repositorio de Verse 2 0 en
16. be one of three world origin selection s centroid or individual centroids e remove entities from the scene excepting the scene s camera e edit the parameters of the materials associated to the meshes e Color e Ambient reflectivity e Diffuse reflectivity e Specular reflectivity e Specular exponent e load textures and apply them to walls of cubes cones cylinders and spheres For every wall and its texture user can set the texture s offset and scale over the wall e save and load scenes 10 1 3 Initializing COMO When COMO s client program is started the following connection wizard is presented to the user 93 Repositorio de COMO en Github https github com moisesjbc como 94 Wiki de COMO en Glthub https github com moisesjbc como wiki 83 Desarrollo de un visor modelador 3D colaborativo Anexo A Manual de usuario client_debug Introduction Create a server Connect to a server Next gt Cancel 10 1 4 Creating a scene For creating a scene select Create a server on previous screen and then press the Next button COMO will then display the next form for creating a server client_debug Create server Scene name Unnamed scene Port O 65535 PEX Max users 1 16 5 Load scene from file No scene file selected lt Back Next gt Cancel 1 Scene name Name given to the scene 2 Port The port used that upcoming users will have to connect to in order to share the scene
17. de texture walls en contexto texturelID ResourcelD 69 El gestor de texture walls asocia a cada una una malla mediante un mapa que relaciona el ID de una texture wall con el ID de malla a la que pertenece Esto permite restringir que el usuario s lo pueda bloquear las texture walls pertenecientes a mallas presentes en su selecci n actual 92 Desarrollo de un visor modelador 3D colaborativo Diseno 6 3 9 Primitivas En el contexto de COMO una primitiva es una plantilla a partir de la cual pueden generarse multiples mallas id nticas Usando un s mil con la programaci n orientada a objetos una primitiva ser a una clase y una malla ser a la instanciaci n de dicha clase COMO permite importar primitivas a partir de ficheros OBJ A partir del fichero OBJ se genera un fichero monol tico con formato propio y extensi n prim Este fichero contiene la especificaci n completa en modo texto de una primitiva incluyendo sus v rtices sus materiales y sus texturas Los ficheros de primitiva prim generados se sincronizan entre los clientes A partir de ese momento cualquier cliente puede generar mallas a partir de la primitiva Como se observa en la figura siguiente el gestor de primitivas del cliente ClientPrimitivesManager deriva de AbstractPrimitivesManager la cual se usa tanto en el cliente como en el servidor para forzar que ambos sean capaces de crear primitivas Sin movernos de la mis
18. de texturas en contexto ol Desarrollo de un visor modelador 3D colaborativo Diseno 6 3 8 3 3 El gestor de texture walls TextureWallsManager El gestor de texture walls permite al usuario local bloquear para su edici n una nica texture wall de entre aquellas presentes en su selecci n actual Cuando se bloquea una texture wall el usuario local recibe un manejador clase TextureWallHandler para editar el recurso en cuesti n mientras los cambios se sincronizan autom ticamente en el servidor gracias a que el manejador deriva de ServerWriter TexturesManager TextureWallsManager meshesTextureWalls mape ResourcelD std list lt ResourcelD gt gt createlextureWwall in name string in meshID ResourcelD ResourcelD toggleMeshTextureWallsSeletable in meshID ResourcelD in selectable bool void selectTexturewall in textureWalLID ResourceID TextureWallHandler sendlexturewallTloshader in resourcelD ResourcelD void const 1 i o fy l lt lt inherits from ServerWriter gt gt eestruct gt gt Texture WallHandler TextureWall setlexturelD in texturelD ResourcelD void 1 1 name string textureOtfset vec textureScale vec setlexture0ffsetx in newlextureOffseta float void setlexture0ffsetY in newlexture0ffsetY float void setlexturescalex in newWValue float void setlexturescaleY in newWValue float void Ilustraci n 6 20 El gestor
19. desde los 88 Modelador en red prueba de escena compartida https www youtube com watch v CUBIeVKh8ko feature youtu be J2 Desarrollo de un visor modelador 3D colaborativo Desarrollo ficheros obj alojados en su carpeta local en el momento de crearse el servidor La creacion de primitivas desde el cliente no se incluiria hasta mas adelante Ademas como aun no se habia implementando los materiales ni las texturas el importador de OBJ solo leeria los vertices especificados en el fichero fuente Tras completar la importacion de ficheros OBJ en el servidor y su sincronizacion en el cliente se procedi a trabajar en la iluminaci n de la escena El primer paso consisti en asociar una normal a cada v rtice de cada malla En el caso de la primitiva Cubo las normales se generaban en el constructor de la clase Cube En el caso de las primitivas importadas se ampli el importador de OBJ para que leyera las normales desde fichero Con las normales implementadas lo siguiente fue a adir una luz direccional a la escena y permitir cambiar su color Esta luz era fija y nica no se pod a borrar ni se pod a a adir luces adicionales a la escena Finalmente se implementaron los materiales asociando uno por defecto a la primitiva Cubo y ley ndolos desde fichero en el caso de las primitivas importadas Con la inclusi n de un editor de materiales al panel de herramientas del software cliente se dio por zanjado es
20. editor allows you to load images from disk and apply them as textures to the walls of the geometric meshes present in the scene When applying a texture to a wall you can set the offset and the scale of the texture over the wall 91 Desarrollo de un visor modelador 3D colaborativo Anexo A Manual de usuario scene Cooperative Modeller View Maa 2 038 5 Materials Texture walls lt gt View Front Proj Ortho Maximize View Right Proj Ortho Maximize Texture wall Front face Y j Texture D a yo jPg Texture offset X 0 00 Texture offset Y 0 00 Texture scale X View Top Proj Ortho Maximize View Camera Proj Perspective Maximize 2 00 Texture scale Y 2 00 The geometric meshes are the cubes cones cylinders and spheres created using their corresponding buttons in the Geometry creation panel under the Creation tab in tools panel see Working with entities 10 5 2 Applying a texture to a geometry s wall face The process of applying a texture to a geometry s wall fase starts with the creation of a geometric primitive from the Geometry creation panel Creation tab Tools panel In this example we created a cube scene Cooperative Modeller View E Creation Transformation lt dl View Front Proj Ortho Maximize View Right Proj Ortho Maximize Geometry creation Create cube Create cone Create cylinder Create sphere 2
21. el futuro permitiera manipular m ltiples c maras pero que actualmente permitiera una nica c mara Dicha c mara se sincronizar a entre todos los clientes y no podr a ser borrada El sistema de una c mara anterior se comenz a implementar mediante la inclusi n de un gestor de c maras CamerasManager en el cliente Este gestor contar a con dos particulares en primer lugar no dispondr a de m todos para crear c maras localmente s lo procesar a los comandos que le llegaran desde el servidor En segundo lugar las llamadas al m todo de borrado nicamente desbloquear an la c mara El servidor tambi n se modific para que incluyera una lista de ResourceIDs identificando elementos imborrables Cada vez que el servidor recibiera la orden de eliminar un recurso cotejar a su ResourceID con los elementos de la lista anterior optando por eliminar o desbloquear el recurso en cuesti n seg n el caso Hab a llegado el momento de implementar el salvado y carga de escenas En primer lugar estuve analizando los pros y los contras de implementar esta funcionalidad en el lado del cliente o del servidor Si lo hubiera hecho desde el lado del cliente ste ya contaba con toda la informaci n 76 Desarrollo de un visor modelador 3D colaborativo Desarrollo sobre cada recurso de la escena por lo que solo restaba escribirlos o leerlos en fichero Sin embargo qu ocurr a si ese cliente se desconectaba qu suced a si ese client
22. https es libreoffice org 13 Desarrollo de un visor modelador 3D colaborativo Requisitos hardware y software 4 2 3 Librerias 4 2 3 1 Mesa 3D v10 1 3 Ilustraci n 4 10 Logo de Mesa 3D Mesa 3D es una implementaci n de c digo abierto de la especificaci n OpenGL entre otros protocolos de renderizado 3D Brian Paul inici su desarrollo en Agosto de 1993 y actualmente contin a manteniendo el proyecto al cu l contribuyen m ltiples desarrolladores y organizaciones 4 2 3 2 Qt v5 2 1 Ilustraci n 4 11 Logo de Qt Qt es un framework para desarrollar aplicaciones multiplataforma Aunque permite crear aplicaciones de consola se suele usar mayormente para crear software con una interfaz gr fica de usuario GUI nativa al sistema operativo destino Para ello Qt ofrece una extensa colecci n de widgets botones campos de texto etc Las interacciones de los widgets de Qt entre si mismos y con otras clases se pueden modelar mediante un potente sistema de se ales y slots proporcionado por la propia Qt Este tema se tratar m s adelante en el apartado de an lisis Qt lleva siendo desarrollado desde 1991 y actualmente se encuentra en la versi n 5 3 Est siendo desarrollado por Qt Company y The Qt Project y permite su uso bajo una licencia dual propietaria y libre 30 Sitio web de Mesa 3D http www mesa3d org 31 Art culo sobre Mesa 3D en la Wikipedia http en wikipedia org wiki Mesa_ 28
23. las que no Por ltimo tuve que integrar una nueva librer a en el proyecto para poder leer im genes desde fichero SDL2_image y computar su conversi n a una textura de OpenGL El siguiente fotograma se ha extra do de otro v deo publicado en Youtube titulado Modelador 3D cooperativo Jugando con cubos texturizados creati T Properties pt Projection mode Projection mode i Tranesfarmetlan lack mode Tap hey Pe rre Peripecirae el vidual Centroid i Be Es Front vira z 1 Ortha K gt E via z 1 Orta Sore Free trar formation Perspective Perupective F anis x a Pivot point mode Projection mode Projection mode othe Piang yew cho Projection mode Projecthon mode m A Front viss gt MH Ortho Right wera Otho Perspective Perspective CIeath Mash rom pray A a Projecthon made Projection mode Cet D Top vira Eth Frank hr o A Pe rapective Pernective Ilustraci n 7 4 Cuarto incremento del proyecto COMO importando primitivas desde el cliente texturas 90 Modelador 3D cooperativo jugando con cubos texturizados https www youtube com watch v K4EI0jkYTXs 74 Desarrollo de un visor modelador 3D colaborativo Desarrollo 7 6 El quinto incremento m ltiples luces mallas del sistema Para el siguiente incremento me propuse permitir que los clientes conectados a una escena pudieran crear m s de una luz direccional Adem s Agust n me propuso incluir las mall
24. mode Prep Para Projection me Projection mi Front view othe Left view tho App mais Pertpa Peri object mode Edition scope Loxcal A Local Clobal Clobal Tranafarmablos mode Transf ametan mode eh o Fined to E sii Fined to Y sala Projection me Projection ru Figi to A doris Pied Lo Y anti Propection mi Projection mi ah laa Fined to Z axis a ao Frost view Ortho Fined to E ants moves Ortho T ortho Persa Perupe Perra Perum Pivot point mode Piot paint mode Median Point 2 Median Pont al Create primitive i Creste primitive 7 Cube Cube Current calor POO Lor J Comment olor ace Select color Ilustraci n 7 2 Segundo incremento del proyecto COMO Un manipulador de cubos online 7 4 El tercer incremento incluyendo iluminaci n y primitivas Como se ha podido comprobar en las capturas anteriores el software no contaba con iluminaci n mostrando todos los cubos con colores planos El siguiente hito del proyecto consisti por tanto en dotar de una iluminaci n b sica a COMO Adem s tambi n se propuso permitir la creaci n de mallas a partir de primitivas importadas en el servidor En primer lugar se procedi a la creaci n de un modesto importador que leyera ficheros obj y los convirtiera en primitivas para su uso en COMO Este importador en su primera versi n s lo se usar a en el servidor durante su inicializaci n s lo crear a primitivas
25. or not 3 Lights info only if there are lights selected allows you to set the color and the ambient coefficient of your selected lights 90 Desarrollo de un visor modelador 3D colaborativo Anexo A Manual de usuario 10 4 The materials editor The materials editor allows to edit the materials associated with the current user mesh selection This means that if there are two meshes A and B in the scene and the user selected mesh A the materials editor will only edit mesh A materials The user must select mesh B in order to edit its materials The materials editor can be accessed using the Materials tab in the tools panel scene Cooperative Modeller View i 3 Materials Texture walls gt Ex A View Front Proj Ortho Maximize View Right Proj Ortho Maximize Select material Unnamed material v Material name Unnamed material Color gt Ambient reflectivity View Top Proj Ortho Maximize View Camera Proj Perspective Maximize Diffuse reflectivity Specular reflectivity Specular exponent 7 30 00 Only one material may be edited at a time Select the material to edit from the Select material dropdown list at the top of the materials editor The following buttons and controls can be used to edit the properties of the currently selected material color ambient reflectivity etc 10 5 The texture walls editor 10 5 1 Introduction The texture walls
26. parte ResourcesSyncData mantiene la informacion minima necesaria para reproducir cada recurso de la escena desde cero facilitando el salvado y carga de la escena desde fichero lt lt interface gt gt SyncData ResourcesOwnershipManager S i creationCommand_ Command lockResource in resourcelD ResourcelD in newOwner void void getCreationCommand Command const tunlockResourcesselection in currentOwner UserID void generateUpdateCommands list lt Command gt clearResourcesSelection in currentOwner UserID void processCommand in command Command void l ResourcesSynchronizationLibrary ResourceSyncData undeletableResources_ std set lt ResourcelD gt lights std set lt ResourcelD gt L processCommand in command Command void saveToFile inout file ofstream void const loadFromFile inout file ifstream void resourcelD ResourcelD resourceOwner_ UserID resourceName std string childResourceIDs liste ResourcelD gt MaterialSyncData EntitySyncData mMaterial PlainMaterialData centroid vec3 modelMatrix mat4 das LightsyncData light_ LightData Ilustraci n 6 28 Clase ResourcesSynchronizationLibrary y la jerarqu a de objetos SyncData en la que se apoya 6 4 3 1 La clase ResourceSyncData Como se mencion en el apartado anterior cada objeto ResourceSyncData mantiene la informaci n m nima necesaria para reproducir un recurso de la escena desde c
27. permiti reforzar mis conocimientos sobre el control de versiones al hacer un uso extensivo de Git y Github Desarrollo de un visor modelador 3D colaborativo Requisitos hardware y software 4 Requisitos hardware y software En esta secci n se detallan los requisitos de hardware y software que se han necesitado para desarrollar y ejecutar el modelador COMO 4 1 Requisitos Hardware Se requiere un PC con una GPU que soporte la especificaci n OpenGL en su versi n 4 2 Adem s el equipo debe contar con una conexi n a la red donde pretenda ejecutarse el software 4 1 1 OpenGL Ilustraci n 4 1 Logo de OpenGL OpenGL es un API para escribir aplicaciones gr ficas 2D y 3D interactivas y multiplataforma Se trata de un est ndar abierto estable y extensible desarrollado activamente desde 1992 OpenGL define un pipeline de renderizado con una secuencia de etapas que transforman las primitivas 2D o 3D especificadas por el usuario en una imagen 2D final Salvo por unas cuantas etapas prefijadas es responsabilidad del programador definir las etapas m s relevantes del pipeline de renderizado como lo son la etapa de procesamiento de v rtices o la de procesamiento de fragmentos p xeles candidatos a formar parte de la imagen final Para especificar aquellas etapas que se desarrollan directamente en la GPU OpenGL ofrece al programador la especificaci n del OpenGL Shading Language GLSL un lenguaje de progra
28. recurso al mismo tiempo Un ejemplo ser a el gestor de mallas MeshesManager ya que un usuario puede seleccionar m ltiples mallas y transformarlas conjuntamente Todos los gestores de edici n m ltiple derivan directa o indirectamente de la clase ResourcesManager En la siguiente figura se muestra esta clase junto con la jerarqu a de clases e interfaces que la sustenta 45 Desarrollo de un visor modelador 3D colaborativo lt lt interface gt gt ResourcesOwnershipManager lockResource in resourcelD ResourcelD in newOwner void void unLockResourcesSelection in currentOwner UserID void ServerWriter clearResourcesSelection in currentOwner UserID void Diseno A ResourcesOwnershipRequester pendingSelections set lt ResourcelD gt requestResourceLock in resourcelD ResourcelD void requestSelectionUnlock void requestSelectionDeletion void processlockDenialf in resourceIlD ResourcelD void dd ResourceCommandsExecuter executeResourceCommand in command ResourceCommand void executeResourcess5electionCommand in command ResourcesSelectionCommand void ee a ee al a A i ResourceType type 1 Observable ResourcesselectionType type I LocalResourcesSelectionType type TEON AE TA EE EEEE PN Er A TE A fa Fe I ResourcesManager resourcesSelections std map lt UserID ResourcesSelectionlype gt Z 1 nonselectedResources ResourcesselectionType containsRe
29. the entities in the selection will be rotated or scaled around the selection s centroid e Individual centroids Each entity in the selection will be rotated or scaled around its own centroid e World origin Each entity in the selection will be rotated or scaled around the world s origin or 0 0 0 09 Desarrollo de un visor modelador 3D colaborativo Anexo A Manual de usuario 10 3 5 The properties panel If you go to the Properties tab on the tools panel you will see the Properties Panel Here you will see a variable number of panels depending on what types of entities are in your current selection scene Cooperative Modeller View Transformation Properties lt E A View Front Proj Ortho Maximize View Right Proj Ortho Maximize Name Multiple objects SN lt P Type 1 Selection Centroid position 0 433 0 210 0 000 E 2 Meshes panel 2 Display vertex normals i ae ale View Top Proj Ortho Maximize View Camera Proj Perspective Maximize Lights panel 3 Light color A Ambient coefficient 0 30 E E 1 General info displays general read only data about the current selection of entities such as its name its type and its centroid 2 Meshes info only if there are meshes selected allows you to set parameters affecting the meshes in your selection Currently it only allows you to select whether to display the vertex normals of your selected meshes
30. to the scene and COMO s main window will be displayed See the GUI overview page to continue 10 2 GUI overview The following screenshot shows the main COMO window scene Cooperative Modeller View 4 Creation Transformation View Front Proj Ortho Maximize View Right Proj Ortho Maximize Geometry creation Create cube Create cone Create cylinder Create sphere 3 Create mesh from primitive View Top Proj Ortho Maximize View Camera Proj Perspective Maximize y as space Sun__0_2 prim Y Import primitive Lights creation Create directional light 1 Render panel Panel with 4 viewports displaying the current 3D shared scene User can change the view and projection of each viewport Viewport can be also resized or maximized to use the entire render panel 2 Users list All the users connected to the scene are displayed here Next to each user s name is their selection color used when drawing the edges of all the meshes lights and cameras selected by that user 3 Tools panel Panel organized by tabs with controls for creating and editing the resources of the scene meshes lights materials etc 4 View menu Here the user can edit some parameters which affect how the scene is displayed locally it doesn t affect other users sharing the scene For example this menu includes an option for setting whether unselected meshes are drawn with or without edges 86 D
31. tomar y liberar dicho cerrojo 78 La clase Log proporciona m todos para imprimir mensajes de informaci n precauci n warning o error por consola Log deriva de Lockable para permitir su uso seguro en un programa multi hilo 67 Desarrollo de un visor modelador 3D colaborativo Desarrollo 7 Desarrollo 7 1 El origen un plugin para Blender Antes de idear el proyecto COMO este proyecto de final de carrera se orient hacia la creaci n de un plugin para Blender Este plugin permitir a extender Blender para que m ltiples usuarios se conectaran a trav s de la red y pudieran trabajar al unisono sobre una misma escena Debido a la gran complejidad del proyecto Blender y a que supuse mas didactico comenzar un pequeno modelador cooperativo desde cero decidi desechar este proyecto e iniciar el proyecto COMO 7 2 El primer incremento un manipulador de cubos offline Para el primer incremento de COMO opte por ignorar la componente online y centrarme en crear un pequeno modelador en local donde el usuario pudiera crear y transformar cubos Lo primero que hice fue tratar de decidir qu librer a usar a para crear la interfaz gr fica de usuario GUI de la aplicaci n Finalmente opt por usar Qt debido a que se trataba de un proyecto veterano multiplataforma y libre que adem s ofrec a facilidades para su integraci n con OpenGL Adem s yo ya contaba con algo de experiencia usando esta librer a para interfaces gr ficas
32. Color Color void createCamera in cameralD ResourceID in cameraCenter vec3 executeRemoteCommand in command LightCommand void in cameraEye vec3 in cameraUp vec3 void sendLightsToShader in openGL OpenGL in viewMatrix glm mat4 void const Ilustraci n 6 17 El gestor de entidades en contexto En los siguientes apartados se describe someramente cada gestor de entidades especializado 48 Desarrollo de un visor modelador 3D colaborativo Diseno 6 3 8 2 1 El gestor de mallas MeshesManager El gestor de mallas contiene todas las mallas 3D de una escena Por lo general las mallas se crean fuera de esta clase mediante importadores o factor as externas PrimitivesImporter CubesFactory etc y se insertan aqui mediante los m todos oportunos El gestor de mallas incluye m todos para establecer si se desea mostrar o no las normales de los v rtices todas las mallas o las aristas de las mallas s lo mallas no seleccionadas 6 3 8 2 2 El gestor de luces LightsManager COMO s lo permite la creaci n de luces direccionales hasta alcanzar un m ximo definido por el servidor Por esta raz n el gestor de luces a diferencia de otros gestores no crea sus recursos directamente y luego manda la orden al servidor Por el contrario el usuario local debe pedir permiso al servidor para crear la luz mediante una llamada a LightsManager requestDirectionalLightCreation Cuando se reciba una respuesta del servidor el m todo
33. Github https github com verse verse Desarrollo de un visor modelador 3D colaborativo Estado del arte 2 2 Clara io Ilustraci n 2 2 Logo de Clara io Clara io es una aplicaci n de modelado animaci n y renderizado en la nube Una de sus principales bazas es que se trata de una aplicaci n web por lo que permite crear escenas 3D directamente desde el navegador y sin necesidad de instalar software adicional Clara io ofrece tambi n un SDK que permite que se le a adan plugins El n cleo de Clara io hace uso de HTMLS Javascript WebGL y Three js Con Clara io tambi n es posible la edici n simult nea de una escena por parte de m ltiples usuarios A pesar de encontrarse a n en fase Beta provee de grandes funcionalidades como el soporte para alrededor de 30 formatos de archivos 3D o un completo sistema de materiales e iluminaci n fotorrealistas A diferencia de Verse Clara io se encuentra en un estado bastante activo de desarrollo y cuenta con una gran base de usuarios registrados y Editing Crytek Sponza x VE Exocortex C D clara io editor 583fcbf6 1a7 1 45e2 8caa 1aa4d5e84126 sera Crytek Sponza Large Scene VRay File d ols View Model Animation Render Admin Share Learn 4 bhouston A A Y gt 0 Save Image Live Render Polygons 0 Vertices 0 Normals 0 Nodes 4 FPS 1 24 J g o Cast Shadow Shadow Bias o o amp S E Transform w ewe oe w o o l
34. Introduccion 1 Introduccion 1 1 Motivacion y descripcion del proyecto Los graficos 3D inundan nuestra vida diaria ya sea de manera directa o indirecta Ayudar al dise o de los productos que usamos a diario simular experimentos o dar forma a incre bles mundos de fantas a son s lo algunas de las muchas necesidades que nos ayudan a satisfacer Tal como sucede en casi todos los campos del desarrollo humano el trabajo de una sola persona no tarda en resultar insuficiente El aumento en la demanda exige que equipos cada vez mayores de profesionales se coordinen para desarrollar los productos y servicios requeridos por los usuarios All donde el campo de aplicaci n y la tecnolog a lo permiten las redes de computadores se han convertido en aliadas inestimables para coordinar y optimizar la producci n Con la intenci n de aprovechar las redes de computadores en la producci n de gr ficos tridimensionales se presenta en este documento el desarrollo de un visor y modelador 3D colaborativo Se trata de un software que permite que varios usuarios se conecten a trav s de la red y trabajen al un sono sobre la misma escena 3D Esta aplicaci n recibe el nombre de COMO Cooperative Modeller Desarrollo de un visor modelador 3D colaborativo Estado del arte 2 Estado del arte Estudiando el mercado se ha encontrado algunos proyectos que comparten bastantes similitudes con COMO En los siguientes subapartados se describe someramente
35. LightsManager executeRemoteCommand la procesar y crear la luz en caso afirmativo El m todo LightsManager sendLightsToShader se invoca al principio de cada iteraci n de renderizado de la escena Este m todo env a los datos de todas las luces creadas al shader de fragmentos donde se computa la iluminaci n de la escena siguiendo el modelo cl sico o modelo de reflexi n Blinn Phong 6 3 8 2 3 El gestor de c maras CamerasManager En la versi n actual de COMO s lo se permite la creaci n de una nica c mara asociada a la escena cuya creaci n es iniciada desde el servidor Por esta raz n el nico m todo de la clase para crear una c mara es privado y se invoca desde CamerasManager executeRemoteCommand 6 3 8 3 Gestores de edici n individual Los gestores de edici n individual son aquellos en los que cada usuario s lo puede editar un recurso al mismo tiempo Salvo excepciones cuando el usuario selecciona un recurso en un gestor de este tipo se le devuelve un manejador handler derivado de ServerWriter que le permitir modificar el recurso en cuesti n y sincronizar los cambios autom ticamente en el servidor pe MaterialHandler COMO incluye los siguientes gestores de selecci n individual MaterialsManager TexturesManager y Texture WallsManager 68 Blinn Phong shading model Wikipedia the free encyclopedia http en wikipedia org wiki Blinn E2 80 93Phong shading model 49 Desarrol
36. PrimitiveData Este m todo va invocando una serie de m todos auxiliares que ir n completando la estructura SystemPrimitiveData generateVerticesPositionsAndUVs generateWalls generate OGLData etc C mo puede observarse algunos de estos m todos son abstractos en la definici n de la clase SpecializedSystemPrimitivesFactory Cada factor a concreta implementar estos m todos de forma que creen la primitiva requerida 58 Desarrollo de un visor modelador 3D colaborativo Diseno Por ltimo la clase SystemPrimitiveFactory act a de interfaz entre el usuario de las factor as y cada una de las factor as concretas 6 3 11 Interfaz de usuario La interfaz de usuario se describe en el manual de uso de COMO el cu l se encuentra anexo al final de esta memoria 6 4 Dise o del servidor El servidor de COMO es un programa carente de modo gr fico modo consola para el que una escena es una combinaci n de usuarios recursos con sus respectivos due os y comandos 6 4 1 Visi n general A continuaci n se muestra un diagrama con las principales clases del servidor y sus interrelaciones id UserID name_ string l l A ll PublicUser A cae socket_ Socket threads boost thread group nextCommand_ uint32 run void pendingResponseCommands queue lt Command gt disconnect void requestUpdate void broadcast void readSceneUpdatePacket void listen void sendNextS
37. al usuario Cuando un usuario se conectara a la escena el servidor generar a el conjunto de comandos m nimo para reproducir la escena y lo a adir a a la cola de comandos del usuario 9 2 Reciclaje de IDs El uso de IDs autoincrementadas para los usuarios y los recursos podr a conducir al improbable caso en el que un servidor se quede sin IDs libres Debido a la improbabilidad de que esto sucediera a corto plazo se omiti su resoluci n por el momento En futuras versiones se podr a implementar alg n tipo de reciclaje de IDs guardar aquellos IDs pertenecientes a usuarios o recursos que ya no existen para asign rselos a los nuevos 9 3 Feedback al cliente sobre el estado de la sincronizaci n Actualmente el usuario del software cliente no tiene ning n indicativo visual del estado de sincronizaci n de la escena con respecto al servidor m s all de las vistas 3D La manera m s sencilla de corregir esto ser a mostrar en la interfaz el campo nUnsycCommands que viaja con cada paquete SceneUpdatePacket enviado desde el servidor Dicho campo el n mero de comandos por sincronizar con el servidor 9 4 Fragmentaci n de paquetes y comandos En esta versi n de COMO los paquetes y comandos se transmiten enteros a trav s de la red Esto significa que el receptor no comienza a procesar los paquetes hasta que los recibe por completo La divisi n de los paquetes y sus comandos en fragmentos para su transmisi n y procesa
38. as a partir de la misma Clipping etapa donde las primitivas se filtran mediante un test de visibilidad Aquellas primitivas que no se ver n en la imagen final o que se ver n parcialmente son desechadas o recortadas respectivamente Rasterizaci n traduce cada primitiva en un conjunto de p xeles para su despliegue en una pantalla Shader de fragmentos procesa cada fragmento p xel candidato a aparecer en la imagen final Com nmente la iluminaci n de una escena se computa en este shader modulando la intensidad de cada fragmento seg n la influencia de las l mparas en el mundo 3D Operaciones sobre fragmentos conjunto de etapas obligatorias y opcionales que operan a nivel de fragmentos test de profundidad filtrado de fragmentos etc Tal como se observa en el diagrama el programador que hace uso de OpenGL debe definir como m nimo un shader de v rtices y otro de fragmentos El pipeline de renderizado no permanece inmutable durante la ejecuci n del programa El programador puede usar la API de OpenGL para especificar m ltiples programas shader cada uno con una forma diferente de generar la imagen final a partir de las primitivas y cambiar el programa activo en cualquier momento 50 Clipping computer graphics Wikipedia the free encyclopedia http en wikipedia org wiki Clipping ol 92 28computer graphics 29 Los p xeles candidatos o fragmentos pueden desecharse de la imagen final por eje
39. as del sistema aquellas mallas que se generan a partir de par metros definidos por el usuario y que permiten aplicar una textura diferente a cada una de sus paredes El sistema de m ltiples luces hasta un l mite requiri de cambios en el cliente y en el servidor En el primero se deber a pedir permiso al servidor para poder crear la luz en cuesti n En el caso del servidor ste deber a comprobar que no se hab a alcanzado el m ximo n mero de luces permitido y responder al cliente en consonancia Para el caso de las mallas del sistema se requiri la separaci n de una nueva clase SystemMesh que _ derivara de Mesh Tambi n se cre una nueva estructura SystemPrimitiveData y se defini una clase abstracta SpecializedSystemPrimitivesFactory a partir de la cual se derivar a una factor a para cada tipo de malla del sistema CubesFactory ConesFactory CylindersFactory y SpheresFactory Por ltimo se a adi una clase SystemPrimitiveFactory que actuara de interfaz entre las clases anteriores y la interfaz de usuario adem s de encargarse de procesar los nuevos comandos incluidos para sincronizar la creaci n de las nuevas primitivas Con la inclusi n de las mallas de sistema ahora quedaba implementar la texturizaci n individual de cada pared de las mismas El primer paso consisti en crear un gestor de texturas TexturesManager para permitir a Cada cliente importar sus propias texturas incluyendo sincronizaci n El siguient
40. assi PlainType type PlainType type lt lt templates gt T SS lt lt template gt gt 71717777S lt lt template gt gt PackableUint8 PackableUint16 PackableUint32 Ilustraci n 6 3 Jerarqu a de objetos Packable 56 El empaquetamiento de tipos empaquetables packables equivale a la serializaci n de dichos tipos de datos para su transmisi n a trav s de la red uno de los desaf os de la programaci n distribuida planteados en el apartado de An lisis 30 Desarrollo de un visor modelador 3D colaborativo Diseno Tal como se observa en el diagrama anterior a partir de la interfaz Packable se deriva toda una jerarqu a de tipos auxiliares para poder empaquetar desempaquetar enteros n mero en coma flotante ficheros etc En el caso de los tipos enteros las operaciones de empaquetamiento y desempaquetamiento tienen en cuenta el endianness de la m quina local y convierten los datos entre ste y el endianness de la red en caso necesario Especial menci n merece el tipo derivado CompositePackable introducido para implementar el patr n de dise o Composite A grandes rasgos el patr n Composite permite crear un tipo compuesto por tipos elementales donde ambos elementos el todo y las partes implementan una misma interfaz En este caso en particular el tipo compuesto CompositePackable nos permite crear tipos de datos compuestos que pueden enviarse a trav s de la red Debido a que los objetos introdu
41. ataj en el caso de los n meros enteros mediante el uso de los tipos multiplataforma uint8_t uint16_t y uint32_t de la librer a est ndar lt cstdint gt de C 58 V ase Diferentes rdenes de bytes endianness en la secci n de An lisis de este mismo documento 59 Composite pattern Wikipedia the free encyclopedia http en wikipedia org wiki Composite_ pattern 31 Desarrollo de un visor modelador 3D colaborativo Diseno objetivo de un comando es el tipo de elemento al que afecta directamente usuario recurso malla etc Derivando directamente de la clase Command se encuentra la plantilla TypeCommand que se instancia para cada target de comando distinto Esta clase incluye un atributo type_ que sirve para diferenciar entre todos los comandos con un mismo target De esta manera un comando dado queda identificado por su objetivo target y su tipo Por ejemplo un comando UserConnectionCommand queda identificado por los siguientes valores e Command commandTarget_ CommandTarget USER e TypeCommand lt CommandType gt type_ UserCommandType USER_CONNECTION 32 CompositePackable E Eee Command commandTarget PackableCommandTarget userID UserID getTarget CommandTarget const getUserID UserID const getTarget in buffer const void CommandTarget TypeCommand type_ const Packablelint8 lt CommandType gt getType CommandIype const
42. be a planting bed for vegetables A AA KN N e OD my QA ww N ATA Ilustraci n 2 5 AutoCAD 360 AutoCAD 360 cuenta con dos versiones una versi n que al igual que Clara io se ejecuta en el navegador web y otra versi n para dispositivos m viles iOS y Android Adem s se distingue entre una versi n gratuita y dos versiones de pago PRO y PRO Plus Las versiones PRO a aden la funcionalidad de crear nuevos planos desde cero la versi n gratuita s lo permite cargarlos as como mayor capacidad en disco y caracter sticas de edici n avanzadas AutoCAD 360 no es software libre sino que cuenta con una licencia propietaria 9 Canal de AutoCAD 360 en Youtube https www youtube com chanmel UC9UWxTY FLnNvuvcGRapsmg 10 Real time DWG file collaboration AutoCAD 360 V deo en Youtube http www youtube com watch v OTFOfMeRPRM 11 AutoCAD 360 Pro Mobile Plans https www autocad360 com mobileplans Desarrollo de un visor modelador 3D colaborativo Estado del arte 2 4 RealXtend Tundra SDK 0 ELE Teal Xtendwenr Source Platform forthe Internet Ilustraci n 2 6 Cabecera de la p gina http realxtend org i ro x RealXtend Tundra SDK es una plataforma de desarrollo de aplicaciones 3D multiusuario en red Es software libre licencia Apache 2 0 y como tal se apoya en dependencias libres como Ogre3D para la parte gr fica o Qt para la interfaz Tundra sigue una arquitect
43. caso del protocolo IP se opt por usar Big endian como network order a la 43 Art culo de la Wikipedia sobre el endianness http en wikipedia org wiki Endianness 44 Palabra inform tica Wikipedia la enciclopedia libre http es wikipedia org wiki Palabra_ 28inform C3 A 1tica 29 45 Wikipedia la enciclopedia libre http www wikipedia org 20 Desarrollo de un visor modelador 3D colaborativo Analisis hora de transmitir datos por la red Al tratarse de un proyecto puramente distribuido el modelador COMO debe permitir la comunicaci n entre computadores Big endian y Little endian Esto implica que si COMO se esta ejecutando en un sistema Little endian los datos deben traducirse entre Big endian y Little endian antes de transmitirse o despu s de recibirse 5 4 3 Diferentes tama os de los tipos de datos Los tipos int float etc pueden tener diferentes tama os en cada m quina Si esto no se controla puede darse el caso de que un cliente trabaje con valores que queden fuera del rango permitido para otros clientes y que por tanto falle la sincronizaci n de la escena De lo anterior se desprende que el software debe asegurar que todos los clientes conectados a una escena as como el propio servidor manejen los mismos tipos de datos 5 4 4 Serializacion La serializaci n implica traducir una estructura de datos a un formato en el que pueda guardarse en memoria o enviarse a trav s de la re
44. ceneUpdatePacket void processSceneUpdatePacket in userID UserID in sceneUpdate SceneUpdatePacket void l k ll broadcast l 1 CommandsHistoric commands list lt Command gt addCommand in command Command void processCommand in command Command void fillSceneUpdatePacketPacket in packet SceneUpdatePacket saveToFile std string in firstCommand unsigned int loadFromFile in filePath string void in nCommands unsigned int in userID UserID uint32 Ilustraci n 6 26 Visi n general de las clases principales del servidor En los siguientes subapartados se describe someramente cada una de estas clases salvo la clase Scene Esta ltima debido a su mayor complejidad se describe en detalle el siguiente apartado 99 Desarrollo de un visor modelador 3D colaborativo Diseno 6 4 1 1 La clase Server La clase Server representa al servidor de COMO Su responsabilidad principal es la de establecer una conexi n con cada cliente que lo solicite o denegar la petici n si se ha alcanzado el l mite de usuarios conectados La clase Server cuenta con un grupo de hilos boost thread_group que realizan las labores de mantenimiento del servidor Las tareas que realizan se listan a continuaci n e Aceptar las peticiones de conexi n recibidas por parte de los usuarios y establecer la conexi n definitiva con los mismos e Denegar las peticiones de conexi n recibidas por parte de los usua
45. cidos en CompositePackable implementan tambi n la interfaz Packable m todos como CompositePackable pack se implementan de una manera tan sencilla como la siguiente M TODO CompositePackable pack buffer in void PARA CADA packable EN packables_ HACER buffer packable constant pack buffer FIN PARA DEVOLVER buffer FIN M TODO Ilustraci n 6 4 Pseudoc digo del m todo CompositePackable pack Como apunte final la inclusi n del tipo auxiliar PackablePair ver pseudoc digo anterior permite combinar en un mismo CompositePackable objetos Packable constantes y variables 6 2 1 2 Comandos Los comandos representan las rdenes enviadas entre los clientes y el servidor Algunos ejemplos de rdenes son conectar usuario cargar textura trasladar selecci n etc La clase Command es la base de todos los comandos soportados por COMO Al derivar de CompositePackable todos los comandos se transforman en objetos de datos compuestos capaces de empaquetarse y desempaquetarse para su env o a trav s de la red ver apartado anterior Cada objeto Command cuenta con el ID del usuario que lo ejecut as como con un atributo target de tipo PackableCommandTarget que define el objetivo del comando El 57 En el apartado de An lisis se mencion la problem tica de conectar m quinas cuyos tipos de datos tuvieran un tama o diferente entre las diferentes m quinas conectadas Este problema se
46. computer_graphics 29 32 Art culo en la Wikipedia sobre Qt http en wikipedia org wiki Qt_ 28software 29 14 Desarrollo de un visor modelador 3D colaborativo Requisitos hardware y software Se opto por usar Qt para este proyecto porque ademas de ser una libreria ampliamente usada y testeada tambi n ofrece un modulo con multiples facilidades para integrar OpenGL facilmente en la aplicacion a desarrollar 4 2 3 3 Boost v1 55 0 DO Ilustraci n 4 12 Logo de Boost ost BRARTES Boost es un conjunto de librer as escritas en C que ocupa m ltiples dominios de aplicaci n hilos expresiones regulares sistema de ficheros etc Debido a la calidad de las librer as Boost y a su respeto hacia los est ndares es com n que algunas de sus librer as acaben formando parte del est ndar de C Las librer as Boost llevan en desarrollo activo desde 1998 y actualmente se encuentran en su versi n 1 56 Su licencia Boost license permite el uso de Boost en proyectos privativos y libres El proyecto COMO hace uso de un peque o subconjunto de las librer as de Boost en su versi n 1 55 0 Boost Thread para el manejo de hilos e Boost Filesystem para el manejo de ficheros e Boost Asio para la comunicaci n a trav s de la red y E S siguiendo un modelo as ncrono e Boost System como capa virtual para lidiar con los errores originados en el sistema Operativo 33 Sitio web de Boost http www boost
47. con un comando LightColorChangeCommand y otro comando LightAmbientCoefficientChangeCommand con los ultimos valores guardados en la estructura anterior 6 4 3 2 Salvado de escenas Cuando el usuario cierra el servidor ste le pregunta si desea guardar la escena en el directorio data save En caso de que el servidor haya sufrido un error intentara guardar la escena en el fichero data save autosave El salvado de la escena comienza con una llamada a Scene saveToFile El procedimiento que se sigue internamente se resume en el siguiente diagrama de flujo 63 Desarrollo de un visor modelador 3D colaborativo Diseno Salvar escena Solicita nombre del fichero al usuario Crea el fichero de salvado Salva el UserID que se asignar a al siguiente usuario Escribe todos los comandos de creaci n de ResourcesSyncLibrary enel fichero Escribe todos los comandos de actualizaci n de ResourcesSyncLibrary enel fichero Cierra el fichero Ilustraci n 6 29 Procedimiento de salvado de una escena Como se puede observar en el diagrama anterior lo primero que se salva en el fichero de la escena es el ID que se le asignar a al siguiente usuario que se conectara a la escena Esto es as para evitar que se reutilicen IDs de usuarios anteriores al cargar la escena salvada En caso contrario a cada usuario que se conectara a la escena se le tendr a que vetar las ResourceIDs que ya hubieran usado aquellos usuarios que tuvier
48. conjunto de usuarios o clientes conectados a la misma as como por todos los recursos creados por los usuarios mallas materiales luces etc Para poder manipular y sincronizar los usuarios y recursos entre los clientes y el servidor se requiere del uso de identificadores En los siguientes subapartados se resume la estrategia seguida para identificar a ambos elementos de la escena 6 1 4 1 Identificaci n de usuarios Cada cliente cuenta con un entero como ID de usuario nico y autoincrementado tipo UserID El ID es generado y asignado por el servidor en el momento de aceptar al nuevo cliente 6 1 4 2 Identificaci n de recursos La creaci n de cada recurso de la escena mallas luces materiales etc se inicia en el lado del cliente Para evitar la sobrecarga de tener que esperar a que el servidor asigne un ID nico a cada recurso se ha optado por asegurar que cada cliente asigne uno ID nico tipo ResourceID a 55 Transmission Control Protocol Wikipedia the free encyclopedia http en wikipedia org wiki Transmission Control Protocol 27 Desarrollo de un visor modelador 3D colaborativo Diseno los recursos creados por si mismo El tipo ResourceID consiste en un par de enteros creatorID resourceIndex cuyos elementos se describen a continuaci n e creatorID ID del usuario que ha creado el recurso Este ID permite distinguir entre los recursos creados por cada usuario conectado a la escena e resourceInde
49. d En el caso del proyecto COMO se requiere que la aplicaci n sea capaz de serializar deserializar las estructuras de datos susceptibles de ser sincronizadas a trav s de la red mallas usuarios comandos etc para su transmisi n entre clientes 5 4 5 Salvado y recuperado de escenas El trabajo colaborativo sirve de poco si los resultados logrados se pierden completamente al apagarse el servidor Por esta raz n resulta esencial que el software tenga capacidad para salvar y recuperar escenas 5 5 An lisis de funcionalidades proporcionadas por terceros En este apartado se resume una serie de mecanismos o sistemas proporcionados por librer as de terceros cuya complejidad y utilidad merece una aclaraci n previa 5 5 1 OpenGL y su pipeline de renderizado OpenGL define un pipeline de renderizado el cu l define la secuencia de etapas que se sigue para transformar las primitivas gr ficas definidas por el usuario puntos l neas tri ngulos etc en la imagen 2D que se muestra finalmente por pantalla 46 Secci n del art culo sobre Endianness donde se menciona el network order http en wikipedia org wiki Endianness Endianness in networking 47 Por simplicidad se ha decidido omitir otras convenciones menos empleadas como el Mixed endian 48 Art culo en la Wikipedia sobre la serializaci n http en wikipedia org wiki Serialization 49 Rendering Pipeline Overview OpenGL org https www opengl org wiki R
50. d Command signal executeRemoteCommand in command MaterialCommand void getLocalseriD Usario T reserveResourceIDs in nIDs unsigned int ResourcelD 1 EntitiesManager AAA executeRemoteEntityCommand in command EntityCommand void EntitiesSelection gt sendCommandtoServer in command Command void localUserID UserID const reserveResourcelIDs in nIDs unsigned int ResourceID Tlustracion 6 15 Subconjunto con las clases mds relevantes para la sincronizacion de una escena con el servidor La recepci n de comandos desde el servidor y su posterior ejecuci n o sincronizaci n se apoya en el sistema de se ales y slots de Qt de ah que Scene y ServerInterface deriven de QObject Cuando se recibe un comando la clase ServerInterface emite una se al ServerInterface commandReceived Command con el mismo comando La se al anterior esta conectada al slot Scene executeRemoteCommand Command el cual identifica el comando recibido y lo redije al manejador del manager asociado Por ejemplo si se recibe un comando que afecta a una textura se invoca a TexturesManager executeRemoteCommand El env o de comandos se basa en la clase ServerWriter de la que derivan todos los objetos capaces de transmitir comandos al servidor Todo objeto ServerWriter mantiene una referencia a ServerInterface y el m todo ServerWriter sendCommand invoca a ServerInterface sendCommnad sobre dicha referencia 64 La clase ServerInte
51. do Mesh typeName devolveria Mesh Esta string se emplea en la interfaz gr fica de usuario GUI 6 3 3 Entidades Las entidades son recursos clase Resource que pueden visualizarse y transformarse directamente desde la vista 3D de la aplicaci n lt lt interface gt gt Transformable centroid vec3 const franstate in direction vec3 void rotateAroundOrigin in angle float in axis vec3 void rotateAroundCentroid in angle float in axis vec3 void rotateAroundPivot in angle float in axis vec3 in pivot vec3 void lt lt interface gt gt scaleAroundOrigin in scaleFactors vec3 void Drawable scaleAroundCentroid in scaleFactors vec3 void scaleAroundPivot in scaleFactors vec3 in pivot vec3 void setsShadingMode in shadingMode ShadingMode void setMWPMatrix modelMatrix matd4 in viewMatrix mat4 in projectionMatrix mat4 void draw in openGL 0penGL in viewNatrix mat4 applyTransformationMatrix in transformation mat4 void in projectionNatrix mat4 in contourColor vec4 null void setModelMatrix in modelMatrix mat4 void modelMatrix mat4 intersects in ray0rigin vec3 in rayDirection vec3 inout t float out triangle unsigned int void Ilustraci n 6 10 Diagrama de clases de las entidades en COMO 6 3 4 La clase auxiliar OpenGL y los shaders de COMO Al implementar la interfaz Drawable toda entidad clase Entity adquiere acceso a la clase OpenGL Esta ltima es una clase que asiste e
52. e no era de fiar y corromp a el fichero de salvado de la escena Adem s igualmente el cliente deber a sincronizar el fichero de salvado en el servidor Por estas y otras cuestiones decid que lo correcto era implementar la carga y el salvado de escenas en el lado del servidor a n a costa de a adir m s responsabilidades al mismo m s all de la sincronizaci n de comandos entre los clientes Con la decisi n anterior tomada me plante m ltiples alternativas para su implementaci n La alternativa m s directa era escribir el hist rico de comandos directamente en el fichero demasiado ineficiente Una mejora al m todo anterior consist a en eliminar los comandos obsoletos por ejemplo eliminando todos los comandos que modificaban el color de un material salvo el ltimo Ciertamente era m s eficiente que escribir todo el hist rico pero a n no me convenc a Entonces pens en que fuera un cliente el que salvara la escena previa petici n del servidor pero qu suced a si el usuario cliente cerraba la aplicaci n antes de terminar el salvado Evalu alternativas hasta llegar a la que implement finalmente salvar la informaci n m nima y necesaria para generar el conjunto de comandos m nimo que replicara cada recurso de la escena Con el m todo de salvado y carga de escenas decidido comenc su implementaci n Empec por migrar el servidor de un sistema que nicamente asociaba un due o a Cada recurso a un sistema
53. e paso fue incluir la estructura de datos TextureWall con atributos para definir su nombre su desplazamiento y su escala Tambien se a adi el manejador TextureWallHandler para la manipulaci n de la texture wall por parte del cliente as como la sincronizaci n de los cambios realizados con el servidor Por ltimo se integr las nuevas estructuras de datos con las mallas del sistema El siguiente fotograma pertenece a un v deo en Youtube titulado Modelador cooperativo COMO Creando y editando cubos texturizables En l se muestra la creaci n y manipulaci n de un cubo y las texturas aplicadas a cada cara 91 Modelador cooperativo COMO Creando y editando cubos texturizables https www youtube com watch v 41QuDwX VDww amp cfeature youtu be 75 Desarrollo de un visor modelador 3D colaborativo Desarrollo Ilustraci n 7 5 Quinto incremento del proyecto COMO Aplicando y editando texturas en un cubo 7 7 El sexto incremento c mara de la escena y carga y salvado de escenas Para el sexto y ltimo incremento se trabaj en a adir una c mara para la escena 3D Tambi n se implement la carga y salvado de escenas desde fichero En un primer momento se pens en realizar un sistema de c maras m s gen rico donde se permitiera a los clientes crear m ltiples c maras hasta llegar a un l mite Sin embargo esta idea se desech temporalmente optando por crear un sistema extensible que en
54. ecibidos que se aplican a todo recurso sin importar el tipo de recurso que sea Aqu entrar an los comandos de bloqueo desbloqueo y eliminaci n de recursos La clase ResourcesManager contiene una selecci n de recursos clase ResourcesSelection asociada a cada usuario as como una selecci n de recursos sin seleccionar Selecciones de recursos especializados derivar n de ResourcesSelection e implementar n m todos para transformar la selecci n completa pe MeshesSelection y su m todo MeshesSelection translate Como puede observarse en el diagrama anterior ResourcesManager se beneficia del patr n de dise o Observer En este patr n de dise o un objeto de tipo Observable mantiene una lista de observadores Observer Cada vez que se produce un cambio en el objeto de tipo Observable se notifica a sus observadores llamando al m todo Observer update sobre cada uno En este caso en concreto un gestor de recursos ResourcesManager es a la vez observable y observador permitiendo as que los diferentes gestores puedan observarse entre ellos 6 3 8 2 El gestor de entidades El gestor de entidades EntitiesManager es un gestor de edici n m ltiple que gestiona las entidades disponibles en COMO recursos que pueden visualizarse y manipularse directamente desde la vista 3D Como existen m ltiples tipos de entidades mallas luces y c maras el gestor de entidades contiene a su vez un gestor diferente po
55. el programa ficheros de especificaci n de primitivas shaders cliente primitivas a importar servidor etc e project aqu se encuentran los ficheros de proyecto extensiones pro y pri necesarios para construir el cliente y el servidor usando el entorno de desarrollo Qt creator Tales ficheros listan los fuentes del software los par metros del compilador y del enlazador linker etc e src c digo fuente del software 6 5 2 La carpeta de datos bin X data Las carpetas bin server y bin client incluyen una subcarpeta data con una estructura muy similar en ambos casos A continuaci n se dedica un subapartado a la carpeta data del cliente y del servidor 6 5 2 1 La carpeta de datos cliente La carpeta bin client data contiene la siguiente jerarqu a de directorios e scenes contiene una subcarpeta lt scene gt por cada escena que el cliente est sincronizando actualmente o lt scene gt primitives ficheros de especificaci n prim de las primitivas sincronizadas por el cliente Las primitivas se organizan por carpetas seg n su categor a textures texturas cargadas en la escena temp directorio temporal usado durante la transmisi n de primitivas entre cliente 76 Repositorio de COMO en Github https github com moisesjbc como 65 Desarrollo de un visor modelador 3D colaborativo Diseno y servidor e shaders programas shader usados para el renderizado 3D e system prim
56. en detalle en el siguiente apartado Contenido en la clase ResourcesSynchronizationLibrary se encuentra la clase ServerPrimitivesManager Durante la inicializaci n del servidor para escenas vac as el gestor de primitivas recorre el directorio data local primitives y emplea la clase OBJPrimitivesImporter para importar todos los ficheros obj que se encuentren organizados por categor as una categor a un directorio en el mismo Cada fichero obj es procesado y se genera un fichero de especificaci n de primitiva prim que se sincroniza en el hist rico de comandos 6 4 3 La clase ResourcesSynchronizationLibrary La clase ResourcesSynchronizationLibrary se encarga de sincronizar los recursos de la escena en el servidor asoci ndole a cada recurso un objeto de tipo ResourceSyncData La administraci n de la propiedad de cada recurso por parte de los usuarios surge del contrato que adquiere ResourcesSynchronizationLibrary al implementar la interfaz ResourcesOwnershipManager Esta responsabilidad se satisface al incluir en cada objeto ResourceSyncData un campo de tipo UserID indicando el due o actual del recurso El servidor usa este valor para procesar las peticiones de bloqueo y desbloqueo de recursos recibidas desde los clientes 74 V ase el subapartado Importando primitivas El importador de OBJ en el apartado de Dise o del cliente 61 Desarrollo de un visor modelador 3D colaborativo Diseno Por otra
57. en el que se asociaba un objeto ResourceSyncData a cada recurso Continu generando nuevas clases derivadas de la anterior seg n el tipo de recurso y testeando el salvado y carga de la escena con cada cambio hasta llegar a la versi n final OM scene Cooperative Modeller View Creation Transformation aa A View Front Proj Ortho Maximize View Right Proj Ortho Maximize E B Geometry creation EIN Create cube Create cone Create cylinder Create sphere See A poe View Top Proj Ortho Maximize View Camera Proj Perspective Maximize PI space Sun__O_2 prim Import primitive Lights creation Create directional light Ilustraci n 7 6 Sexto incremento de COMO Camara de la escena y carga y salvado de escenas 77 Desarrollo de un visor modelador 3D colaborativo Conclusion 8 Conclusion La creaci n de un visor modelador 3D colaborativo ha sido una experiencia que me ha aportado multiples ventajas en diversos campos del desarrollo software En primer lugar me ha permitido ganar una gran experiencia en la computacion grafica usando una version moderna de la API de OpenGL Conceptos como VAO VBO shader o Sampler me eran desconocidos o al menos extra os antes de iniciar este proyecto Adem s tambi n ha servido para introducirme de lleno en las bondades y los desaf os de la programaci n distribuida conexi n y sincronizaci n de m quinas identificaci n de recursos transmi
58. endering_ Pipeline Overview 21 Desarrollo de un visor modelador 3D colaborativo Analisis T Tessellation Control Shader LA Fragment Shader Tessellation 1 l Evaluation l Shader LA a i ETE Geometry Shader Write to Framebutter Transtorm Feedback Ilustraci n 5 2 Pipeline de renderizado de OpenGL Los bordes continuos indican etapas obligatorias mientras que los discontinuos denotan etapas opcionales En el diagrama anterior los recuadros azules representan etapas shader programables es responsabilidad del programador codificadas mediante un shader e integradas en el pipeline Por su parte los recuadros amarillos indican etapas fijas del pipeline el programador no puede codificarlas directamente pero puede influir en su funcionamiento alterando ciertos par metros Las etapas del pipeline de OpenGL se resumen a continuaci n 22 Desarrollo de un visor modelador 3D colaborativo Analisis Shader de vertices procesa cada uno de los vertices presentes en las primitivas a dibujar Normalmente el shader de v rtices incluye la multiplicaci n de los mismos por una matriz de transformaci n Teselado conjunto de etapas opcionales empleado para generar geometr a adicional a partir de una lista de v rtices de control Shader de geometr a etapa opcional que procesa cada primitiva gr fica punto l nea tri ngulo etc y genera 0 o m s primitiv
59. ero facilitando el salvado y carga de la escena desde fichero Cada objeto ResourceSyncData asocia a su recurso un comando opcional de creaci n y 0 o m s comandos de actualizaci n El comando de creaci n de un recurso es como su nombre indica el comando que se emple para crear el recurso La existencia de este comando de creaci n en la estructura ResourceSyncData es opcional puesto que existen recursos que se crean de manera indirecta Por ejemplo un comando de instanciaci n de primitiva clase PrimitiveInstantiationCommand provoca que se cree una malla de manera directa e indirectamente todos los materiales asociados a dicha malla Por esta raz n s lo el objeto ResourceSyncData asociado a la malla contiene el comando de creaci n anterior incluirlo tambi n en los materiales llevar a a duplicidades y confusi n Por su parte los comandos de actualizaci n asociados a un objeto ResourceSyncData no est n contenidos en este ltimo sino que se generan de manera temporal cuando son requeridos 62 Desarrollo de un visor modelador 3D colaborativo Diseno para salvar la escena Esta generaci n se realiza mediante el metodo SyncData generateUpdateCommands a partir de los datos guardados sobre el recurso en la misma estructura Por ejemplo la clase LightSyncData contiene una estructura de datos con el color y el coeficiente ambiente de la luz Cuando se invoca a LightSyncData generateUpdateCommands se genera una lista
60. ervice la cu l act a de interfaz con los servicios de E S del sistema operativo A esta clase le asociamos objetos de E S como puede ser un socket TCP o un temporizador desde d nde lanzaremos las operaciones asincronas Por ejemplo la conexi n asincrona con un servidor remoto se iniciar a llamando al siguiente m todo socket async_connect lt endpoint gt lt manejador gt donde lt manejador gt es un procedimiento o funci n que se ejecutar cuando la operaci n asincrona se haya completado El m todo async_connect anterior lanzar la petici n de conexi n as ncrona al sistema operativo a trav s de io_service y retornar al llamador La operaci n se ejecutar en segundo plano y una vez finalizada se guardar n los resultados en una cola Por otra parte una llamada a io_service run bloquear al hilo llamador mientras hayan operaciones as ncronas en curso Cada vez que una operaci n asincrona termine su resultado se tomar de la cola mencionada en el p rrafo anterior Este resultado pasar al manejador asociado a la operaci n as ncrona y ste ser ejecutado por el hilo que ha llamado a io_service run En un programa multihilo y tal como ocurren en COMO lo com n es crear un grupo de hilos o thread pool Cada uno de estos hilos llama a io_service run y va ejecutando de manera concurrente los manejadores asociados a las diferentes operaciones de E S a medida que stas terminan Cada vez que un h
61. es of o Mal ON 41 A A on 43 6 3 7 Sincronizando la escena Clases Scene ServerInterface y Server WTIlteT ooooooommmmmmmo o 44 0320 estores de recursos oda 45 A a o y US 93 63 10 Pactorias de mallas del sistemas 58 A A ieee eee 59 oA Diseno CEL STV UA ON coisas sce E E ae sare drag steeds Semana weds maqammeeean tenets 59 Ged VISION SEN 59 AA ba clase Con lla isa 61 6 4 3 La clase ResourcesSynchronizationLibrary cccccccccccccccceccceeeessssssseseseeecccccceeeeeaeeees 61 O Jerarqu a de UICN OSA A OERE 65 MISION oda 65 6532 La carpeta de datos DIN X data herra ara 65 603 ha carpeta de COUISO aa 66 PMS ah VOLE Oe ast sacri aun tsestentes a a N tes 69 7A Bborigen un pugin para DIA DA 69 7 2 El primer incremento un manipulador de cubos oOffliNe occoccccnnnnonononmmssrrmmmssrmoosso 69 7 3 El segundo incremento un manipulador de cubos ONlIN ccccccnnnonnnnnnnononnnnncnonanononnnonos 71 7 4 El tercer incremento incluyendo iluminaci n y priMitiVaS oooocccccnnncnnnnnnnnnnnnanananononnnnnnnnnns 72 7 5 El cuarto incremento importando primitivas desde el cliente texturaS oooonnnncccnoncnnnnnnnns 74 7 6 El quinto incremento m ltiples luces mallas del sistema ooooonmmmmmmss9mr9rmmrrmomomm s s 75 7 7 El sexto incremento camara de la escena y carga y salvado de escenas ooococcccncnnnnnnnnnnss 76 AR A A St coc E E LE EA E TANEET EEE EEA E 79 9 Maba o MO anaa
62. esarrollo de un visor modelador 3D colaborativo Anexo A Manual de usuario 10 3 Working with entities 10 3 1 Defining an entity An entity in COMO is a resource which can be manipulated directly from any of the viewports in the render panel All the Meshes and lights as well as the scene s camera are entities 10 3 2 Adding entities to the scene Entities are added to the scene from the Creation tab of the tools panel right scene Cooperative Modeller View Vr Creation Transformation gt P Ne w View Front Proj Ortho Maximize View Right Proj Ortho Maximize Geometry creation 1 Create cube lt P Create cone Create cylinder Create sphere Create mesh from primitive 2 View Top Proj Ortho Maximize View Camera Proj Perspective Maximize y space Sun__O_2 prim Import primitive Lights creation 3 Create directional light a gt 1 Geometry creation allows user to create geometric shapes such as cubes cones cylinders and spheres and add them to the scene 2 Create mesh from primitive from here user can load primitives mesh specification from OBJ files by pressing the Import mesh button All the imported primitives are added to the dropdown list above the Import mesh button By selecting one of the primitives in this list a mesh copy will be created and added to the scene 3 Lights creation you can request the creation of a directional light in the
63. et No Si Nombre en uso Concatena el ID asignado al nuevo cliente al final de su nombre y lo incluye en el paquete UserAcceptancePacket Genera un color de selecci n nico para el usuario y lo a ade al paquete UserAcceptancePacket A ade el nuevo usuario a la lista de usuarios A ade un comando UserConnectionCommand con los datos del nuevo usuario al hist rico de comandos Transmite el paquete UserAcceptancePacket al cliente Ilustraci n 6 7 Procedimiento de establecimiento de la conexi n entre el cliente y el servidor 30 Desarrollo de un visor modelador 3D colaborativo Diseno 6 2 2 2 Bucle de sincronizacion El servidor mantiene un historico con todos los comandos ejecutados sobre la escena compartida Cada vez que un cliente se conecta al servidor ste ultimo empieza a enviarle todos los comandos del hist rico para que el cliente actualice su escena local Esta sincronizaci n se aplica tambi n a los comandos que se vayan a adiendo al hist rico mientras el cliente permanezca conectado a la escena Al mismo tiempo las acciones realizadas por el cliente sobre la escena se encolan y se van transmitiendo peri dicamente al servidor para su sincronizaci n en este ltimo Este bucle de sincronizaci n bidireccional se ejecuta mientras la conexi n cliente servidor permanezca activa 6 3 Dise o del cliente 6 3 1 Usuarios En el cliente los usuarios de la escena se codif
64. fo AbstractPrimitivesManager name string category ResourcelD scenePrimitivesDir string l 2d categoryNames_ mape ResourcelD std string gt filePath string Hprimitivelnfo mape ResourcelD Primitivelnto gt importFromFitefin filePath string void exportFromFile in TilePath string void ClientPrimitivesManager createPrimitive in filePath string in categoryID ResourceID string E instantiatePrimitive in primitivelD ResourcelD void trianglesGroups_ executeRemoteCommand in command PrimitiveCategoryCommand void executeRemoteCommand in command PrimitiveCommand void vectors TrianglesGroupWithMaterial gt MeshesManager createMesh in primitiveData ImportedPrimitiveData ResourcelD Ilustraci n 6 21 Jerarqu a de clases responsables de la creaci n e instanciaci n de primitivas 54 Desarrollo de un visor modelador 3D colaborativo Diseno 6 3 9 1 1 Importando primitivas El importador de OBJ El importador de OBJ clase OBJPrimitivesImporter lee un fichero en formato OBJ y genera una especificaci n de primitiva en una estructura ImportedPrimitiveData Acto seguido guarda la especificaci n de primitiva en un fichero con formato propio y extensi n prim Como puede observarse en el diagrama la clase OBJPrimitivesImporter y cualquier otro importador que se a ada deber a hacerlo tambi n implementa la interfaz PrimitivesImporter Esta ltima define un nico m todo impor
65. getType in buffer const void CommandType TypeCommand UserCommandType gt TvpeCommand MaterialCommand Type gt UserCommand MaterialCommand materialID PackableResourcelD i MaterialColorChangeCommand MaterialSpecularExponentChangeCommand value_ PackableColor value PackableFloat Ilustraci n 6 5 Jerarqu a de clases Command UserDisconnectionCommand UserConnectionCommand name_ PackableString selectionColor PackableColor 33 Desarrollo de un visor modelador 3D colaborativo Diseno 6 2 1 3 Paquetes Los paquetes son los objetos de datos que se transmiten directamente a trav s de la red La Clase base Packet cuenta con m todos para transmitir los paquetes a trav s de la red de manera sincrona m todos send y recv o asincrona m todos asyncSend y asyncRecv En este ultimo caso se requiere que el usuario del m todo le suministre un PacketHandler un puntero a una funci n encargada de procesar el paquete una vez ha sido enviado o recibido CompositePackable A Packet balls eits acketHeader bodyBuffer_ vector lt char gt send inout socket Socket void const type_ PAE RADA TS PacketType gt recv inout socket Socket void bodySize PackablePacketSize asyncsend inout socket Socket in packetHandler PacketHandler void const asyncRecv inout socket Socket in packetHandler PacketHandler void NewUserPacket UserAcceptancePacket SceneUpdatePacket
66. grama se dedica a renderizar normales a partir de pares v rtice normal y se compone de un shader de v rtices otro de geometr as y un tercero de fragmentos El flujo de control del programa shader normals se presenta a continuaci n SHADER DE VERTICES SHADER DE GEOMETRIAS SHADER DE FRAGMENTOS Obtiene la posicion y la normal del v rtice Multiplica la posici n del v rtice por la matriz MWP Multiplica la normal por la matrix normal Pasa la posici n y la Recibe la posici n P y la normal del v rtice a la normal n del v rtice siguiente etapa desde la etapa anterior Genera una primitiva linea Recibe los v rtices cuyos extremos son PYP n desde la etapa anterior Color final color de entrada Ilustraci n 6 12 Flujo de control del programa shader normals 62 Blinn Phong shading model Wikipedia the free encyclopedia http en wikipedia org wiki Blinn E2 80 93Phong shading model 63 El shader de geometr a es una etapa opcional y programable del pipeline de renderizado de OpenGL Esta etapa recibe como entrada una primitiva gr fica y puede generar O o m s primitivas a partir de sta En el caso del shader geometr as del programa normals se toma una primitiva punto y se genera una primitiva l nea 40 Desarrollo de un visor modelador 3D colaborativo Diseno 6 3 5 Mallas Las mallas son entidades formadas por uno o m s conjunto de tri ngulos v rtice
67. i n cliente servidor me preocupo por permitir m ltiples usuarios conectados a la vez hasta un l mite Tambi n implemento que el servidor borre a un cliente si se pierde la conexi n con ste A continuaci n comienzo a dise ar las estructuras de datos necesarias para dar soporte a los diferentes tipos de paquetes que se enviar n entre los clientes y el servidor En el dise o tengo en cuenta la problem tica de conectar a m quinas con diferentes endianness Despu s de dise ar los diferentes paquetes a intercambiar entre cliente y servidor hago que el cliente se conecte al servidor usando un paquete NewUserPacket Si el servidor lo acepta le responde con un paquete UserAcceptancePacket Hasta este punto del desarrollo la creaci n del servidor y la conexi n a ste desde el cliente se desarrollaba desde consola y con par metros fijos Permito la creaci n del servidor y la conexi n con el mismo a trav s de la interfaz del cliente mediante un asistente connection wizard Ya puedo conectar usuarios al servidor mediante intercambio de paquetes pero ninguno tiene constancia del resto de clientes conectados Codifico el paquete SceneUpdatePacket y los comandos UserConnectionCommand y UserDisconnectionCommand Modifico el servidor para que haga un broadcast de ambos comandos cada vez que un cliente se conecta o desconecta respectivamente Tambi n a ado una lista de usuarios a la interfaz gr fica del sofware cliente
68. i C 2B 2B11 20 Sitio web del proyecto GCC https gcc gnu org 10 Desarrollo de un visor modelador 3D colaborativo Requisitos hardware y software 4 2 2 3 Depurador GDB v7 7 1 Ilustraci n 4 4 Mascota del depurador GDB Para depurar el software se recurri al depurador GDB perteneciente al proyecto GNU 4 2 2 4 Valgrind v3 10 0 Valgrind es un framework para construir herramientas de an lisis din mico Tambi n incluye herramientas para depurar el uso de la memoria y herramientas de profiling Valerind Ilustraci n 4 5 Logo de Valgrind Para asistir en el depurado del proyecto COMO se ha empleado la herramienta de an lisis de memoria de Valgrind 21 Sitio web del depurador GDB http www gnu org software gdb 22 Sitio web de Valgrind http valgrind org 23 Art culo sobre Valgrind en la Wikipedia http en wikipedia org wiki Valgrind 11 Desarrollo de un visor modelador 3D colaborativo Requisitos hardware y software 4 2 2 5 Entorno de desarrollo Qt Creator v3 3 1 Ilustraci n 4 6 Logo de Qt Creator Debido a que el proyecto hace uso de Qt se ha optado por usar el entorno de desarrollo ideado especificamente para trabajar con Qt Qt Creator Este software cuenta con facilidades para desarrollar software multiplataforma con interfaz gr fica Adem s incluye un soporte muy til para depurar el programa usando GDB y Valgrind desde la misma interfaz de usuario 4 2 2 6 C
69. ican a grandes rasgos como tuplas formadas por un identificador de usuario UserID un nombre y un color de selecci n El gestor de usuarios clase UsersManager act a como un contenedor para los usuarios y tambi n se encarga de ejecutar los comandos que recibe desde el servidor y afectan directamente a los usuarios pe UserConnectionCommand o UserDisconnectionCommand id UserID name string ColouredUser ee executeRemoteCommand in userCommand UserCommand void color vecd Ilustraci n 6 8 El gestor de usuarios UsersManager 6 3 2 Recursos Como ya se coment en el glosario de conceptos apartado de An lisis los recursos son todos aquellos objetos que forman parte de la escena y que son creados por los usuarios mallas materiales luces etc A cada recurso se le asocia un identificador de recurso ResourceID y un nombre 60 Los comandos del hist rico que han sido enviados por un cliente son ignorados por el servidor a la hora de transmitirlos al mismo cliente 36 Desarrollo de un visor modelador 3D colaborativo Diseno Resource struct gt gt ResourceHeader aaa header ResourceHeader const id ResourcelD type Name string const name string Ilustraci n 6 9 La clase Resource El m todo abstracto Resource typeName se implementa en cada clase derivada para devolver el tipo de recurso que representa Por ejemplo para la clase Mesh el m to
70. ie tries 81 9 1 Optimizar la sincronizaci n del hist rico de COMANAOG sccccececcceeeeeeeceaeeeeeceeeeeeeceeeas 81 92 Reciclaje de OS AAA AAA 81 9 3 Feedback al cliente sobre el estado de la Sincronizaci nN ccccccccccncnccnnnnnnnnnnnnnnnnnnnnonnnnnnnnnnss 81 9 4 Fragmentaci n de paquetes y COMANAOGS 0ccccceeeesesssssesssssscsscseceseeeeecceeasseeesceenenaees 81 TO Amex OA Manta de USO arar 83 10 L COMO Cooperative Modeller asii 83 OA AD COMO pic sii 83 A ac theta cate AT teen E e lca A teen E eaten ae 83 10 italiano COMO addon 83 LO ACT Gal lin a SC CMC een E 84 101 9 Gomectnotova created SEN 85 Te CO OY A 86 TO Working witi Ende id iia 87 10 31 DEE an OA AAA AA 87 10 3 2 Adding entities to the SCOMEC ccscsenssssssssssssecscccccceccccccceeennsssssssseseeececeassceeeeasesceees 87 10 3 3 Selecting and unselecting ONtities sssescccsccccccccccccccensnsssssssssssececcnsesceccensssceeens 87 10 34 1 FANS COMMS ene ld 88 LO 3 9L NE DLO Peres Panels 90 10 4 The materials MON AN AN ERR 91 100518 textura walls editor ii dra 91 Mod IMPOR E TEE N EEEE OTEO O TIE 91 10 5 2 Applying a texture to a geometry s wall ace ooooococcccncnnnonnnnnnnnnnnononocnnnnnnnnnnos 92 10 6 Closing the server and Saving the SC NE ssssssseeecccccccceeeeeeeaeeeeessssseeescceeeeseeseeeeeeceeaas 95 II II Desarrollo de un visor modelador 3D colaborativo
71. ieron desde el fichero Esto se debe al hecho de que el formato OBJ trabaja con m ltiples ndices a la vez a la hora de definir las caras de la malla mientras que OpenGL solo permite trabajar con un ndice a la vez durante el renderizado Por ejemplo en el formato OBJ para indexar un v rtice perteneciente a una cara se usar a tres ndices e Un indice i que apuntaria a la posici n dentro del vector de posiciones de la malla donde se define la posici n del v rtice actual e Un ndice j que apuntaria a la posici n dentro del vector de coordenadas UV de la malla donde se define las coordenadas UV del v rtice actual e Un indice k que apuntaria a la posici n dentro del vector de normales de la malla donde se define la normal del v rtice actual Por el contrario OpenGL s lo permite trabajar con un ndice a la vez para indexar v rtices para su renderizado En este caso se tendr a un ndice i a la posici n del VBO donde se define la posici n la coordenada UV y la normal del v rtice Lo anterior requiere una transformaci n de un sistema de m ltiples ndices OBJ a un sistema de un nico ndice OpenGL Esta transformaci n se desarrolla en el m todo PrimitiveData generateOGLData y se apoya en un mapa que relaciona cada multi ndice i j K con un indice simple I El modo de proceder del m todo de transformaci n se resume en el siguiente diagrama de flujo 72 El VBO y el EBO son dos objetos de OpenGL que c
72. ilo termina de ejecutar un manejador comienza a ejecutar el siguiente o se mantiene a la espera en caso de que no haya trabajo pendiente en ese momento 54 Thread Pool Pattern Wikipedia the free encyclopedia http en wikipedia org wiki Thread pool pattern 25 Desarrollo de un visor modelador 3D colaborativo Diseno 6 1 ASpectos generales 6 1 1 Arquitectura de red La aplicaci n se apoya en una arquitectura cliente servidor incluso para las escenas locales Para la comunicaci n entre los clientes y el servidor se ha optado por usar TCP como protocolo de transporte ya que es importante que todos los datos intercambiados entre los nodos se transmitan en orden y sin errores 6 1 2 Privacidad S lo existen escenas p blicas lo que significa que cualquier usuario puede conectarse a la escena si conoce la IP del servidor y hay espacio 6 1 3 Sincronizaci n La sincronizaci n de la escena entre los clientes y el servidor se realiza mediante el env o de paquetes con uno o m s comandos Ejemplos de comandos ser an Conectar nuevo usuario Crear cubo A adir entidad a selecci n Trasladar selecci n etc Se ha preferido el uso de este sistema frente al env o de datos en peso mallas completas matrices de transformaci n etc para optimizar el uso de la red mediante el uso de paquetes peque os 6 1 4 Usuarios y recursos Una escena est formada a grandes rasgos por el
73. ion Addison Wesley 80 OpenGL Window Example QtGUI 5 3 Documentation Qt Project http gt project org doc qt 5 gtgui openglwindow example html 69 Desarrollo de un visor modelador 3D colaborativo Desarrollo transformaciones se realizaban con respecto al origen del mundo Despu s de permitir la creaci n y manipulaci n de cubos 3D se ofreci al usuario la opci n cambiar la vista front back left right top bottom y el tipo de proyecci n ortogonal o perspectiva de cada vista 3D Finalmente se a adieron opciones para poder trasladar rotar y escalar las selecciones de cubos con respecto a un eje X Y o Z Adem s se a adi la opci n de especificar tres puntos de pivotaje para las rotaciones y los escalados origen del mundo centroide y centroides individuales La siguiente imagen ha sido extra da de un video publicado en Youtube mostrando el estado actual del proyecto en este punto MainWindow Projection mode Projection mode Perspective Perspective App mode Object mode Edition scope Global Local Transformation mode Free Projection mode Projection mode Fed to X axis Top view is Ortho Front view Ortho Fixed to Y axis Perspective Perspective Fixed to Z axis Ra p Sa Ilustraci n 7 1 Primer incremento del proyecto COMO Un manipulador de cubos offline Pivot polnt mode world origin
74. itives contienen ficheros de especificaci n de primitivas prim para aquellas primitivas usadas internamente por COMO como la primitiva camera o la primitiva directional_light 6 5 2 2 La carpeta de datos servidor e scenes contiene una subcarpeta por cada escena que el servidor est sincronizando actualmente o lt scene gt temp directorio temporal usado cuando se transmiten primitivas al y desde los clientes e local primitives ficheros obj con las primitivas que se desean importar al comienzo del servidor organizadas por categor as e save ficheros de salvado de escena extensi n csf 6 5 3 La carpeta de c digo src Las carpetas src client src common y src server contienen el c digo fuente de la aplicaci n 6 5 3 1 La carpeta de c digo del cliente src client El c digo del cliente se divide en tres carpetas e gui contiene todas las clases y estructuras de datos auxiliares usadas por la interfaz gr fica del cliente Incluye el panel de herramientas clase ToolsPanel y la vista 3D clase Viewport entre otros e managers alberga los objetos de datos que se manejan directamente desde la interfaz Clases como ResourcesManager EntitiesSelection o MaterialHandler se encuentran aqu e model incluye los bloques de construcci n b sicos de la escena aquellos a los que se acceden a trav s de los managers Clases como Mesh Light o Camera est n presentes aqu
75. lo de un visor modelador 3D colaborativo Diseno 6 3 8 3 1 El gestor de materiales MaterialsManager Todo material en COMO se asocia desde su creaci n a una nica malla y se elimina autom ticamente cuando la malla es eliminada Debido a esto cuando una malla es seleccionada todos sus materiales quedan bloqueados a nombre del usuario que seleccion la malla A partir de ese momento el usuario puede seleccionar para su edici n cualquier material asociado a cualquiera de las mallas que tiene seleccionadas actualmente sin esperar confirmaci n por parte del servidor MaterialsManager Materials map lt ResourcelD Material gt MaterialsOwners mape ResourcelD UserID gt meshMaterials mape ResourcelD std vector lt ResourcelD gt gt createMaterials in vector lt Materiallinfo gt materialsIinfo in meshID ResourcelD ResourcelD lockMeshMaterials in meshID ResourcelD in newOwner UserID void selectMaterial in id ResourcelD MaterialHandlerPtr lt lt inherits from ServerWriter gt gt setColor in color Color void MaterialHandler setAmbientReflectivity in ambientReflectivity Color void material Material setDiffuseReflectivity in diffuseReflectivity Color void setSpecularReflectivity in specularReflectivity Color void setSpecularExponent in specularExponent float void color vec4 ambientReflectivity vec3 diffuseReflectivity vec3 specularReflectivity vec3 specularExponen
76. ma figura se observan dos estructuras de datos auxiliares con nombres similares Primitivelnfo y PrimitiveData La primera se usa de manera persistente en el gestor de primitivas donde existe una estructura de tipo PrimitiveInfo por cada primitiva registrada en el sistema La estructura PrimitiveInfo contiene el nombre y la ruta al fichero de especificaci n prim de una primitiva as como el identificador de la categor a asociada a la primitiva Por otra parte la estructura PrimitiveData se usa de manera temporal al crear o instanciar una primitiva Dicha estructura contiene la especificaci n completa de una primitiva le da directamente desde su correspondiente fichero de especificaci n Durante la instanciaci n de una primitiva el m todo ClientPrimitivesManager instantiatePrimitive obtiene la estructura PrimitiveData requerida y se la suministra a MeshesManager createMesh para crear la malla a partir de la primitiva 70 Wavefront obj file Wikipedia the free encyclopedia http en wikipedia org wiki Wavefront obj file 99 PrimitiveData name string vertexData MeshVertexData normalData MeshNormalData uvData MeshTextureData 0glData MeshOpenGLData copy in dstFilePath string Primitivelnfo HregisterCategory in id ResourcelD in name string void materialsInfo_ MaterialsInfoVector move in dstFilePath string void registerPrimitive in id ResourceID in primitive Primitivelnfo void Primitiveln
77. maci n basado en C 15 Sitio web de OpenGL https www opengl org 16 OpenGL overview Sitio web de OpenGL https www opengl org about 17 OpenGL Shading Language Sitio web de OpenGL https www opengl org documentation glsl Desarrollo de un visor modelador 3D colaborativo Requisitos hardware y software 4 2 Requisitos Software 4 2 1 Sistema operativo ta ubuntu Ilustraci n 4 2 Logo de Ubuntu COMO se desarrolla para y desde el sistema operativo Ubuntu una de las distribuciones de GNU Linux m s exitosas entre los usuarios por su facilidad de uso 4 2 2 Herramientas de desarrollo 4 2 2 1 Lenguaje de programaci n C C es un lenguaje de programaci n compilado y de prop sito general Incluye caracter sticas de la programaci n imperativa la programaci n orientada a objetos y la programaci n gen rica El modelador COMO est desarrollado pr cticamente en su totalidad usando C en su versi n C 11 Esta versi n incluye soporte para hilos funciones lambda o tipos enumerados fuertemente tipados entre otros 4 2 2 2 Compilador g v4 8 2 Ilustraci n 4 3 Logo de GCC Debido a su veteran a y a su filosof a libre se opt por usar g un compilador de C basado en Unix y desarrollado como parte del proyecto GCC una colecci n de compiladores libres 18 Sitio web de Ubuntu http www ubuntu com 19 P gina de la Wikipedia dedicada a C 11 http en wikipedia org wik
78. miento individuales podr a aumentar la eficiencia de la aplicaci n especialmente en el caso de la creaci n de primitivas donde el receptor espera a recibir el fichero de especificaci n 92 La generaci n del conjunto m nimo de comandos se realizar a de manera an loga a c mo se realiza cuando se pretende salvar la escena en fichero 81 Desarrollo de un visor modelador 3D colaborativo Trabajo futuro completo antes de procesarlo 82 Desarrollo de un visor modelador 3D colaborativo Anexo A Manual de usuario 10 Anexo A Manual de usuario El manual de usuario de COMO se encuentra alojado Github como una wiki del repositorio de COMO En las siguientes p ginas se muestra una copia del manual online 10 1 COMO Cooperative Modeller 10 1 1 About COMO COMO is a cooperative 3D modeller meaning that multiple users can connect and work on the same scene at the same time 10 1 2 Features COMO allows users to e create a shared scene or connect to a created one e load meshes from files and add them to the scene only OBJ files e create cubes cones cylinders and spheres e create directional lights until the limit defined by the server is reached e select and transform multiple entities meshes lights and cameras e Allowed transformations are translations rotations and scales e Incorporates arbitrary and axis related X Y or Z transformations e The pivot point for rotations and scales can
79. minio de aplicaci n de COMO estamos en disposici n de listar las funcionalidades que ofrece el software Estas funcionalidades se clasifican seg n sean responsabilidad del cliente o del servidor 5 3 1 Software cliente El software cliente proporciona al usuario las siguientes capacidades Crear una escena 3D compartida o conectarse a una ya creada Visualizar la escena a trav s de cuatro ventanas Para cada ventana puede seleccionarse su vista frontal trasera superior inferior izquierda derecha y c mara y su proyecci n ortogonal o proyecci n Cargar mallas y sus materiales asociados desde fichero formato OBJ y a adirlos a la escena Mostrar las normales a los v rtices de las mallas Editar los materiales asociados a las mallas alterando los siguientes atributos o Color O Reflectividad ambiente O Reflectividad difusa O Reflectividad especular o Exponente especular A adir luces direccionales hasta un m ximo definido por el servidor o Editar el color y el coeficiente de luz ambiente de cada luz direccional creada 18 Desarrollo de un visor modelador 3D colaborativo Analisis e Cargar texturas desde fichero e Listar a todos los usuarios conectados a una escena junto con su color asociado Las entidades seleccionadas por cada usuario se muestran resaltadas con su color e Generar formas geom tricas simples cubos conos cilindros y esferas e Asociar una textura diferen
80. mplo mediante tests de profundidad si dos fragmentos A y B tienen la misma posici n aqu l m s lejano al observador se desechar y el otro pasar a formar parte de la imagen final Un programa shader es una combinaci n de etapas shader Todo programa shader debe estar completo para poder usarse es decir debe incluir como m nimo un shader de v rtices y otro de fragmentos 23 Desarrollo de un visor modelador 3D colaborativo Analisis 5 5 2 Qt y su mecanismo de se ales y slots C mo se coment en un apartado anterior Qt es un framework orientado a la creaci n de aplicaciones con interfaz gr fica de usuario GUI para lo cu l ofrece una extensa colecci n de widgets botones listas campos de texto etc Las interacciones de los widgets de Qt entre si mismos y con otras clases se pueden modelar mediante un potente sistema de se ales y slots proporcionado por la propia Qt Toda clase que derive de QObject definida en Qt puede beneficiarse de este sistema definiendo sus propias se ales y slots A nivel de c digo una se al es la declaraci n de un m todo marcada con la palabra reserva de Qt signal Una se al no incluye cuerpo debido a que s lo nos interesa su nombre y los argumentos que la acompa an Una se al puede emitirse a voluntad desde el c digo de la propia clase que la aloja Por ejemplo la clase QPushButton de Qt que implementa un bot n simple est implementada de forma que cuando un u
81. municaci n entre cliente y servidor se produce a trav s de comandos Los comandos se agrupan en paquetes antes de ser empaquetados y enviados a trav s de la red 6 2 1 1 Packables Todo objeto de datos susceptible de enviarse a trav s de la red debe implementar la interfaz Packable Dicha interfaz implementa los m todos necesarios para empaquetar pack los datos desde un buffer o desempaquetar unpack los datos desde un buffer siendo ste ltimo el que se transmitir a trav s de la red El m todo constante y sobrecargado Packable unpack se emplea en aquellos casos en los que conocemos de antemano el valor que estamos a punto de desempaquetar Este m todo desempaqueta el valor desde el buffer y lo compara con el que ya tenemos guardado en nuestro objeto Packable Si los valores no coinciden se lanza una excepci n lt lt interface gt gt Packable lt lt struct gt gt was w PackablePair pack in buffer void void const unpack in buffer const void const void TOPITE AOEMADLS unpack in buffer const void const void const getPacketSize PacketSize const 0 gt ina E PackableWrapper CompositePackable PackableFile PackableWrapper in value PlainType addPackable in p Packable void getValue PlainType const setValue in value PlainType void A ear cee rae PlainType type PackedType type getPacketSize PacketSize const lPlainType cl
82. n la comunicaci n con los shaders ofreciendo por ejemplo m todos para enviar la matriz MVP modelado vista y proyecci n al shader o para establecer el modo de sombreado actual El modo de sombreado define el flujo de control seguido por el programa shader de COMO para el renderizado de la escena Actualmente en COMO se usan hasta cuatro modos de sombreado diferentes 1 SOLID_LIGHTING_AND_TEXTURING renderiza las primitivas incluyendo iluminaci n y texturizado 2 SOLID_LIGHTING dibuja las primitivas computando la iluminaci n en cada p xel y sin 37 Desarrollo de un visor modelador 3D colaborativo Diseno incluir texturas 3 SOLID_PLAIN renderiza las primitivas sin iluminacion ni texturizado 4 NORMALS modo especial empleado para renderizar normales a partir de los vertices proporcionados y sus normales 6 3 4 1 El programa shader basic Los tres primeros modos de sombreado presentados SOLID_ usan el mismo programa shader basic formado por un shader de vertices y otro de fragmentos Cambiar de un modo SOLID a otro nicamente cambia los valores de las variables de control enableLighting y enableTexturing presentes en el shader de fragmentos A continuaci n se muestra el flujo de control del programa shader basic 61 La l nea discontinua que une los shaders de v rtices y de fragmentos recuerda el hecho de que ambos shaders no est n conectados directamente en el pipeline de renderizad
83. ng camera 0 17 O DEBUG Server broadcasting DEBUG 7fdida3d6700 Thread Start DEBUG 7fdidabd7700 Thread Start DEBUG Press any key to exit DEBUG 7fdidibd5700 Thread Start DEBUG Listening on port DEBUG 77777fd1d9bd5700 Thread Start i This new terminal will be displaying a lot of log messages describing what the server is doing This window must not be closed until you want to shutdown the server Also be careful with pressing any button while the focus is on this windows because it will shutdown the server as well Load scene frq Cancel er So the server is already open and running Press OK in the dialog with the message The server has been created to proceed 10 1 5 Connecting to a created scene The connection page of COMO is shown below client_debug Connect to server IP 127 0 0 1 Port O 65535 7777 User name Parenthesis not allowed Awesome user lt Back Finish Cancel 85 Desarrollo de un visor modelador 3D colaborativo Anexo A Manual de usuario 1 IP The IP of the server you want to connect If you created the server in the same machine from where you are trying to connect leave the default 127 0 0 0 value 2 Port Server s port 3 User name Your name nick used to uniquely identify you in the scene Once you have filled the previous fields press on the Finish button If there wans t any error you will be connected
84. nish File name for saving this scene into Press ENTER if you don t want to s scene save file Scene file saved data save save file csf Removing scene primitives dir data scenes Unnamed scene _11 primitives Scene directory removed data scenes Unnamed scene_11 Press any key to exit NOTE In case of abrupt sever closure all unsaved work will be lost D 95
85. o de OpenGL V ase el apartado OpenGL y su pipeline de renderizado en la secci n de An lisis 38 Desarrollo de un visor modelador 3D colaborativo Diseno SHADER DE VERTICES SHADER DE FRAGMENTOS Obtiene la posici n la normal y las coordenadas UV del v rtice Multiplica la posici n del v rtice por la matriz MVP Multiplica la normal por la matrix normal Pasa la posici n la normal Recibe la posici n la normal y las coordenadas UV del y las coordenadas UV del v rtice v rtice a la etapa siguiente desde la etapa anterior gaa No lightingEnabled Color final color del material il lt total luces texturingEnabled Obtiene el color base del pixel desde la textura cargada en memoria Asigna el color del material actual al color base Computa la ilumiancion de la lampara activa sobre el color base Suma el valor anterior al color final Ilustraci n 6 11 Flujo de control del programa shader basic 39 Desarrollo de un visor modelador 3D colaborativo Diseno En el diagrama anterior la actividad Computa la iluminaci n de la l mpara activa sobre el color base se realiza mediante la aplicaci n del modelo de reflexi n Blinn Phong 6 3 4 2 El programa shader normals Si cambiamos el modo de sombreado a NORMALS el programa shader basic anterior se sustituye por un programa shader llamado normals Este pro
86. o encierran una esfera contiene una nica pared envolviendo toda su superficie etc COMO permite a los usuarios aplicar una textura diferente a cada pared de una primitiva del sistema texture wall as como definir el desplazamiento offset y la escala de la textura sobre la pared 42 Desarrollo de un visor modelador 3D colaborativo Diseno 6 3 5 2 Mallas importadas Por su parte las mallas importadas son aquellas cuya especificaci n se ley import desde un fichero de especificaci n de primitiva COMO usa su propio formato de fichero prim en el cu l se incluye todos los v rtices normales coordenadas UV y materiales de una malla 6 3 6 Luces y c maras Las luces y c maras en COMO son mallas con propiedades especiales las luces son mallas que emiten luz mientras que las c maras son mallas capaces de definir una vista de la escena Ambas entidades derivan de ImportedMesh debido a que la especificaci n de sus respectivas mallas se importan desde ficheros de primitiva prim que se distribuyen junto con COMO 0 ImportedMesh lt lt Struct gt gt 1 LightData PA color vec3s ambientCoefficient float Light 1 PA A A transformedEye vec4 transformedUp vecd setLighttolor in color tolor void set dmbienttoefficient in coefficient float void transformedCenter vec4 ES 5etOrientation in eye vec3 in center vec3 in up vec3 void DirectionalLigh
87. offset Y 0 00 gt p View Top Proj Ort Bective Maximize Texture scale X 1 00 Texture scale Y test_texture_11 png 1 00 Apply texture Clear texture Load new texture Clic on the texture you want to use from the textures gallery load it before it you haven t done it yet and press the Apply texture button The texture will be instantly applied to the geometry s face NOTE At any time you can repeat these steps to replace the texture applied to the geometry s face or remove it by clicking on the button Clear texture 93 Desarrollo de un visor modelador 3D colaborativo Anexo A Manual de usuario 000 View Materials Texture walls lt gt Ma View Front Proj Ortho Maximize View Right Proj Ortho Maximize Texture wall Front face Y Texture Select a texture Texture offset X 0 00 Texture offset Y 0 00 i Texture scale X bective Maximize 1 00 Texture scale Y test_texture_11 png 1 00 i Apply texture Clear texture Load new texture A Close the Textures Viewer window to return to the COMO s main window With a texture applied to a geometry s face you can use the Texture Walls Editor for setting the texture s offset and scale over its face scene Cooperative Modeller View 4 Materials Texture walls lt gt View Front Proj Ortho Maximize View Right Proj Ortho Maximize Texture wall Front face Y Textu
88. on el mismo ID de usuario antes que l o ella A continuaci n se escriben todos los comandos de creaci n y de actualizaci n de recursos directamente en el fichero Cada comando es empaquetado m todo Packable pack para su escritura en fichero 6 4 3 3 Carga de escenas La carga de una escena desde fichero se produce en el momento de crear el servidor 75 Recordatorio Esto se produce debido a que cada ResourcelD incluye en su interior el UserID del usuario que cre el recurso 64 Desarrollo de un visor modelador 3D colaborativo Diseno siempre que el usuario haya especifica una ruta al fichero en cuesti n El procedimiento es an logo al de salvado primero se lee el identificador UserID que se dar al siguiente usuario conectado A continuaci n se leen y procesan uno tras otro todos los comandos de creaci n y de actualizaci n escritos en el fichero durante el salvado de la escena 6 5 Jerarqu a de directorios 6 5 1 Visi n general El repositorio de COMO cuenta con tres carpetas principales bin project y src Cada carpeta a su vez divide sus contenidos entre las subcarpetas client server y common seg n se refieran al programa cliente al programa servidor o a la parte com n a ambos respectivamente e bin directorio donde se generan los ejecutables binarios En esta carpeta tambi n se incluyen todos aquellos ficheros de configuraci n y de otra ndole necesarios para la correcta ejecuci n d
89. ontienen respectivamente los datos e ndices de todos los v rtices que conforman la malla 56 Desarrollo de un visor modelador 3D colaborativo Diseno Quedan multi indices i k que procesar Si Tomar siguiente multi ndice i j K Mo Existe i k en el mapa de nices tama o del mapa de indices Inserta posici n i esima en el VBO Inserta las coordenadas Extraer del mapa tal que UV j simas en el VBO i j K gt 1 Inserta normal k sima en el VBO Inserta 1 K gt en el mapa de ndices Inserta len el EBO Ilustraci n 6 24 Procedimiento de transformaci n de multi ndices OBJ a mono ndices OpenGL 57 6 3 10 Factorias de mallas del sistema COMO permite generar hasta cuatro tipos distintos de mallas a partir de parametros definidos por el usuario mallas del sistema cubos conos cilindros y esferas Cada tipo de malla del sistema cuenta con su propia clase factoria como se muestra en el siguiente diagrama CubesFactory width float height_ float depth_ float createCube in width float in height float in depth float ResourceID executeRemoteCommand in command CubeCreationCommand void ee lt A gt gt aa 2 float coneHeight_ SystemPrimitivesFactory coneRadius float coneNBaseVertices uintl6 createCube in width float in height float SpecializedSystemPrimitivesFactory c
90. ontrol de versiones Git v1 9 1 Github Para el control de versiones del proyecto se ha empleado Git Git es un software de control de versiones distribuido gratuito y de c digo abierto d SOCIAL CODING Ilustraci n 4 7 Logo de Git Ilustraci n 4 8 Logo de Github El repositorio con todo el c digo y los archivos propios necesarios para construir y ejecutar COMO se ha alojado en Github Github es un servicio web que permite alojar repositorios Git de manera gratuita siempre que stos sean p blicos Su eslogan social coding hace referencia a las facilidades que ofrece para desarrollar software de manera colaborativa sistema integrado de seguimiento de errores posibilidad de proponer cambios a otros desarrolladores gesti n de colaboradores etc 24 Ver apartado Librer as a continuaci n 25 Wiki sobre el entorno de desarrollo QtCreator https qt project org wiki Category Tools QtCreator 26 Sitio web de Git http git scm com 27 Sitio web de Github https github com 28 Features Sitio web de Github https github com features 12 Desarrollo de un visor modelador 3D colaborativo Requisitos hardware y software 4 2 2 7 LibreOffice v4 2 7 2 Por ltimo la documentaci n del proyecto incluyendo esta memoria se ha redactado empleando la suite ofim tica LibreOffice AD LibreOffice The Document Foundation Ilustraci n 4 9 Logo de LibreOffice 29 Sitio web de LibreOffice
91. org 34 Faq del sitio web de Boost http www boost org users fag html 35 Documentaci n de la librer a Boost Thread http www boost org doc libs 1_55 0 doc html thread html 36 Documentaci n de la librer a Boost Filesystem http www boost org doc libs 1_55 0 libs filesystem doc index htm 37 Documentaci n la librer a Boost Asio http www boost org doc libs 1_55 0 doc html boost asio html 38 Documentaci n de la librer a Boost System http www boost org doc libs 1_55 0 libs system doc index html 15 Desarrollo de un visor modelador 3D colaborativo Requisitos hardware y software 4 2 3 4 GLM v0 9 5 1 Gin Ilustraci n 4 13 Logo de GLM GLM es una librer a matem tica para software gr fico basado en GLSL Lleva desarroll ndose desde el a o 2005 y est licenciada bajo una licencia MIT El proyecto COMO hace uso de GLM para entre otras cosas c lculo vectorial y matricial y para el c mputo de las matrices de vista y de proyecci n 4 2 3 5 SDL2_image v2 0 Ilustraci n 4 14 Logo de las librer as SDL SDL2_image es una librer a auxiliar basada en SDL para cargar im genes en memoria Acepta m ltiples formatos entre los que se incluyen BMP GIF JPEG PNG etc Se trata de una librer a desarrollada por Sam Lantinga y Mattias Engdegard y licenciada bajo la licencia GPL 39 Sitio web de la librer a GLM http glm g truc net 40 Sitio web de la librer a SDL2_image https www libsdl o
92. r cada tipo de entidad distinta MeshesManager LightsManager y CamerasManager 66 Observer pattern Wikipedia the free encyclopedia http en wikipedia org wiki Observer_ pattern 67 Cada gestor de edici n m ltiple contiene una serie de selecciones especializadas derivadas de ResourcesManager LightsManager contiene un LightSelection por cada usuario CamerasManager contiene un CamerasSelection por cada usuario etc V ase el apartado Gestores de edici n m ltiple La clase ResourcesManager anterior 47 AbstractEntitiesManager selectEntityByRayPicking in ray0rigin vec3 in rayDirection vec3 in addToselection bool ResourceType type 1 out t float in MAX _T float ResourceID ResourcesSelectionType type t drawAll in openGL OpenGL in viewMatrix mat4 1 PES 1 in projectionMatrix mat4 void const re tog ir eh Lan IVAS ResourcesManager EntityType type EntitiesSelectionType type I A 1 EntitiesManager MaterialsManager de executeRemoteEntityCommand in command EntityCommand void MeshesManager LightsManager CamerasManager displayVertexNormals in display bool void requestDirectionalLightCreation void activeCamera const Camera const displayEdges in frequency MeshEdgesDisplayFrequency void addDirectionalLight in lightID ResourcelD addMesh in mesh Mesh in meshID ResourceID void executeRemoteCommand in command CameraCommand void in light
93. re yo 10 jpg Texture offset X 7 00 Texture offset Y 10 00 View Top Proj Ortho Maximize View Camera Proj Perspective Maximize Texture scale X 3 00 Texture scale Y 2 00 And that s it You can repeat previous steps for changing the current face s texture or for applying a texture to another face of the geometry 94 Desarrollo de un visor modelador 3D colaborativo Anexo A Manual de usuario scene Cooperative Modeller View ES Materials Texture walls E A View Front Proj Ortho Maximize View Right Proj Ortho Maximize a F A View Top Proj Ortho Maximize View Camera Proj Perspective Maximize y 10 6 Closing the server and saving the scene In this version of COMO the scene isn t saved until the server is closed In order to close the server go to its window and press any key Then follow the instructions displayed on screen to save the scene to a file Terminal Server broadcasting Sending scene update nextCommand 120 SCENE_UPDATE received from A with 1 commands Processing command target PRIMITIVE Server broadcasting Sending scene update nextCommand 121 SCENE_UPDATE received from A with 1 commands Processing command target PRIMITIVE Server broadcasting Sending scene update nextCommand 122 7fa2761fd700 Thread finish 7fa2769fe700 Thread finish 7fa2759Fc700 Thread finish 7fa2771FF700 Thread fi
94. reateCone in height float in radius float l in depth float ResourceID o n erem e onn nBasevertices uinti6 Res merece executeRemoteCommand in command ConeCreationCommand void _ in nBaseVertices uint16 ResourceID generatePrimitiveData SystemPrimitiveData createCylinder in height float in radius float generateVerticesPositionsAndUV in positions vector lt vec3 gt in nRadialVertices uint16 ResourceID in uvCoordinates vector lt vec2 gt void createSphere in radius float in nDivisions uint16 ResourceID generateWalls in primitiveData SystemPrimitiveData void generateOGLData in primitiveData SystemPrimitiveData void cylinderHeight_ float cylinderRadius float CylinderNRadialVertices float Sass oak ese pak pel am cheme detente seed cee createCylinder in height float radius float in uint16 nRadialVertices ResourcelD executeRemoteCommand in command CylinderCreationCommand void MeshesManager MaterialsManager sphereRadius float sphereNDivisions uint16 Tiia createSphere in radius float in nDivisions uint16 ResourceID executeRemoteCommand in command SphereCreationCommand void Ilustraci n 6 25 Factorias de primitivas del sistema Cada metodo de creacion en las clases derivadas createCube createCone etc copia los parametros de construccion pe altura del cono a atributos de la clase y acto seguido invoca al m todo SpecializedSystemPrimitivesFactory generate
95. rface hace uso de las operaciones de E S s ncronas y as ncronas proporcionadas por la librer a Boost Asio V ase el subapartado Boos Asio y la E S as ncrona en el apartado de An lisis 44 Desarrollo de un visor modelador 3D colaborativo Diseno Conviene aclarar que el metodo ServerInterface sendCommand no envia directamente los comandos al servidor En su lugar introduce los comandos suministrados en una cola que actua como bandeja de salida De manera concurrente el servidor usa un temporizador timer para de manera peri dica comprobar si hay comandos pendientes de enviar y enviarlos en caso afirmativo 6 3 8 Gestores de recursos Una escena 3D en COMO contiene un gestor diferente para cada tipo de recurso disponible un gestor de materiales un gestor de mallas etc Cada gestor act a como un contenedor para todos los recursos del mismo tipo que existen en la escena cre ndolos o elimin ndolos bajo demanda Adem s los gestores son los encargados de asociar a cada recurso su due o actual Las rdenes de creaci n bloqueo desbloqueo y eliminaci n de recursos se obtienen por dos v as mediante una llamada directa a un m todo de la clase para el caso del usuario local o mediante la ejecuci n del comando recibido desde el servidor para el caso de usuarios remotos 6 3 8 1 Gestores de edici n m ltiple La clase ResourcesManager Los gestores de edici n m ltiple son aquellos que permiten editar m s de un
96. rg projects SDL_image 16 Desarrollo de un visor modelador 3D colaborativo Analisis 5 1 Metodologia Debido a que se trataba de un proyecto experimental cuyo alcance no podia definirse por completo desde el principio se opto por seguir un proceso de desarrollo evolutivo apoyado en prototipos Cada prototipo desarrollado se presentaba al tutor y se debatian los siguientes objetivos a cumplir 5 2 Glosario de conceptos El analisis y estudio del dominio del problema saca a la superficie algunos conceptos capitales como los siguientes e Recurso un recurso es todo elemento de una escena 3D creado por un usuario mallas materiales luces etc e Entidad recurso que puede manipularse directamente desde la vista 3D de la aplicaci n Las mallas y las luces son recursos que a su vez son entidades mientras que los materiales no cumplen con esta definicion e Malla entidad formada por uno o mas grupos de tri ngulos 3D y que opcionalmente puede llevar asociados uno o m s materiales e Material estructura de datos que define las propiedades pticas del todo o parte de una malla Opcionalmente un material puede llevar aparejado una textura e Textura imagen 2D que puede mapearse directamente sobre el todo o parte de una malla e Primitiva especificaci n de una malla susceptible de instanciarse En el contexto de COMO conviene diferenciar entre importar o crear una primitiva e instanciar una primitiva
97. rios cuando no haya m s espacio en el servidor e Recibir los paquetes de tipo SceneUpdatePacket desde cada cliente y extraer sus comandos para pas rselos a la clase Scene para su ejecuci n e Acceder al hist rico de comandos clase CommandsHistoric y sincronizar sus comandos con cada cliente conectado a la escena 6 4 1 2 El hist rico de comandos clase CommandsHistoric El hist rico de comandos CommandsHistoric act a como el contenedor de todos los comandos recibidos que hayan sido aceptados por el servidor Cada vez que un nuevo comando se a ade al hist rico se invoca a Server broadcast Este ltimo m todo se encarga de invocar a PublicUser requestUpdate sobre cada usuario conectado a la escena para informarle de que existe un nuevo comando por sincronizar Adem s de permitir la inserci n de comandos la clase CommandsHistoric cuenta con un m todo para rellenar los paquetes de actualizaci n SceneUpdatePacket que se enviar n a cada cliente El m todo CommandsHistoric fillSceneUpdatePacket toma un paquete de tipo SceneUpdatePacket y un ndice nextCommand y rellena el primero con comandos del hist rico a partir del indice nextCommand 6 4 1 3 La clase PublicUser A cada cliente conectado al servidor se le asocia un objeto de tipo PublicUser el cual incluye el identificador UserID y el nombre del usuario Este objeto contiene ademas el socket con la conexi n con el cliente adem s de m todo
98. s aristas La clase base Mesh contiene los identificadores de los objetos de OpenGL necesarios para renderizar la malla e VBO Vertex Buffer Object Buffer de memoria donde se guardan los atributos de cada v rtice posici n normal y coordenadas UV asociadas e VAO Vertex Attribute Object Objeto que define la manera en la que se organizan los atributos de cada v rtice dentro del VBO EBO Elements Buffer Object Buffer de memoria que contiene los indices de los v rtices a renderizar Resulta especialmente til cuando los v rtices de un objeto suelen ser compartidos por m ltiples tri ngulos Los objetos anteriores se almacenan directamente en la GPU para un renderizado m s eficiente Sin embargo tambi n se requiere que la CPU pueda acceder a dichos datos para computar cu ndo el usuario hace clic sobre una malla dada Para evitar la sobrecarga de transferir constantemente los tri ngulos de una malla desde la GPU a la CPU los tri ngulos de una malla se duplican en la estructura de datos MeshVertexData Este sacrificio de memoria permite un acceso a los v rtices m s r pido para la CPU y la GPU 41 Desarrollo de un visor modelador 3D colaborativo Diseno vao GLuint vbo GLuint ebo GLuint materialIDs vector lt ResourceID gt lt lt struct gt gt displayEdges in display bool void MeshVertexData MaterialsManager displayVertexNormals in display bool void ez vertices std vector lt
99. s para escuchar los paquetes que provienen desde el cliente o para enviarle paquetes desde el servidor 73 Algunas de estas tareas de mantenimiento incluyen operaciones de E S como la transmisi n y recepci n de datos a trav s de sockets Estas operaciones hacen uso de io_service la interfaz con los servicios de E S proporcionada por la librer a Boost Asio V ase el subapartado Boos Asio y la E S as ncrona en el apartado de An lisis 60 Desarrollo de un visor modelador 3D colaborativo Diseno 6 4 2 La clase Scene La clase Scene es la encargada de actualizar el estado de la escena en el servidor procesando los comandos que recibe desde los clientes Ademas tambien se encarga del salvado y carga de la escena actual processCommand in command Command void savweloFPile std string const loadFromFitle in filePath string woid generateUserID UserID initEmptySscene woid Command sHistoric addCommand A O processCommand in command Command void SaveToFile inout file ofstream void const loadFromFPile inout file ifstream void ServerPrimitivesManager syncPrimitivesDir void Ilustraci n 6 27 Clase Scene y sus colaboraciones La actualizaci n de la escena Scene se apoya en clase ResourcesSynchronizationLibrary la cual se encarga de sincronizar todos los recursos de la escena Esta clase as como el procedimiento de salvado y carga de escenas se describir
100. s y el servidor al minimizar el n mero de condiciones de carrera a nicamente una el momento de seleccionar un recurso e El permitir que dos usuarios modifiquen a la vez un mismo recurso no resulta a mi juicio pr ctico e incluso puede llegar a resultar molesto 28 Desarrollo de un visor modelador 3D colaborativo Diseno 6 1 5 2 Implementacion La seleccion y bloqueo de recursos entre el cliente y el servidor sigue el proceso indicado en el siguiente diagrama de actividad CLIENTE SERVIDOR El usuario selecciona un recurso desde la interfaz Se introduce el ID del recurso seleccionado en un conjunto de selecciones pendientes Se env a un comando Resource Se recibe un comando Resource lock al servidor lock desde el cliente Recurso ya bloqueado A ade el comando de bloqueo recibido al hist rico de comandos Env a un comando Resource lock denial al cliente Recibe un comando Resource Recibe un comando Resource lock denial desde el servidor lock desde el servidor Quita el ID del recurso del conjunto Quita el ID del recurso del conjunto de selecciones pendientes de selecciones pendientes Bloquea el recurso en el lado del cliente Ilustraci n 6 2 Procedimiento para bloquear un recurso 29 Desarrollo de un visor modelador 3D colaborativo Diseno 6 2 Comunicaci n cliente servidor 6 2 1 Packables comandos paquetes Como se ha comentado anteriormente toda la co
101. scene by pressing the Create directional light button The server will process your request and if accepted a directional light will be created in the scene 10 3 3 Selecting and unselecting entities Entities can be selected by clicking mouse s left button on them in any of the viewports present in COMO When selecting an entity this way all your previously selected entities will be unselected If you want to keep your current selection while adding a new entity to it hold the ctrl button while selecting 87 Desarrollo de un visor modelador 3D colaborativo Anexo A Manual de usuario x 2g scene Cooperative Modeller View m Creation Transformation E View Front Proj Ortho Maximize Geometry creation Create mesh from primitive space Sun__O_2 prim Y Lights creation Import primitive Create cube Create cone Create cylinder Create sphere Create directional light For unselecting your current selection simply click on the scene s background IMPORTANT When any user in the scene selects an entity such entity is locked This means that no one else can select that entity until the user who locked it unlocks it or disconnects from server 10 3 4 Transforming entities Right after selecting one or more entities on a viewport you can perform the following transformations e Translate Press t on your keyboard and drag your mouse over the viewport for Wy Wool Wat
102. si n de estructuras de datos complejas etc El desarrollo del proyecto COMO tambi n me ha servido para reforzar mi uso de la ingenier a del software planificaci n uso de modelos UML refactorizaciones etc Por ltimo esta odisea tambi n ha servido para seguir ganando experiencia en el control de versiones con Git o la realizaci n de documentos con LibreOffice entre otros 13 Desarrollo de un visor modelador 3D colaborativo Trabajo futuro 9 Trabajo futuro Como cualquier proyecto software COMO admite bastantes correcciones y mejoras A continuacion se listan algunas mejoras propuestas 9 1 Optimizar la sincronizacion del historico de comandos La sincronizaci n de la escena realizada en el servidor gira en torno al hist rico de comandos una lista enlazada en la que se van insertando todos los comandos ejecutados sobre la escena Esta lista no tarda en crecer y alcanzar los miles de comandos Adem s cada vez que un usuario se conecta a la escena ste comienza a sincronizar el hist rico de comandos entero desde el primer comando Por esta raz n el hist rico de comandos actual es un gran consumidor de memoria y de procesamiento La mejora propuesta para atajar este problema pasa por dividir este hist rico de comandos monol tico en n colas de comandos Cada cola se asociar a a un cliente y contendr a los comandos pendientes de sincronizar por el mismo eliminando cada comando a medida que se transmite
103. sos Como se coment en el apartado de Objetivos directos COMO se dise con una clara orientaci n hacia el modelado de escenas 3D m s que hacia el modelado de objetos individuales Con esto en mente y con vistas a simplificar la sincronizaci n entre los usuarios se requiere que COMO disponga de un mecanismo de bloqueo de recursos de manera que dos usuarios no puedan trabajar sobre el mismo recurso al mismo tiempo 5 4 2 Diferentes rdenes de bytes Endianness El endianness define la convenci n seguida por un computador para organizar e interpretar los bytes de una palabra en memoria Las dos convenciones mayoritarias son Big endian y Little endian En el primer caso big endian el sistema ordena las palabras en memoria desde el byte m s significativo al byte menos significativo mientras que en el segundo caso little endian es justo al rev s Sirva como aclaraci n la siguiente imagen extra da desde la Wikipedia Register Register Memory OAOBOCOD OAOBOCOD Big endian Little endian Ilustraci n 5 1 Comparaci n de las convenciones Big endian y Little endian para organizar palabras en memoria Con el nacimiento de las redes de ordenadores se hizo necesario llegar a un acuerdo sobre qu convenci n se usar a para enviar los datos a trav s de la red De esta manera si dos o m s computadores intercambiaban datos stos sabr an de antemano c mo interpretar los datos recibidos En el
104. source bool const Observer getResourceName string const update void F ResourcesSelection F resources mape ResourceID Resourcelype gt addResource n id ResourcelD in resource Resource void removeResource in id ResourcelD void moveResource in resourcelD ResourcelD inout dstSelection ResourcesSelection void e LocalResourcesSelection I Ilustraci n 6 16 Jerarqu a de clases que sustentan a ResourcesManager Como se observa en la figura anterior ResourcesManager deriva de una jerarqu a de clases e interfaces que le confieren todas sus funcionalidades A continuaci n se presenta un resumen de cada clase e interfaz de la mencionada jerarqu a La interfaz ResourcesOwnershipManager especifica los m todos necesarios para bloquear recursos individualmente as como para desbloquear y eliminar la selecci n de recursos de un usuario dado Esta clase es com n al cliente y al servidor por cuanto ambos necesitan manejar recursos y sus due os 65 Salvo la clase ServerWriter la cu l ya se ha descrito en un apartado anterior 46 Desarrollo de un visor modelador 3D colaborativo Diseno e La clase ResourcesOwnershipRequester permite enviar peticiones de bloqueo desbloqueo y eliminaci n de recursos al servidor Tambi n se encarga de procesar las denegaciones de bloqueo recibidas desde el servidor e La clase ResourcesCommandsExecuter se encarga de procesar los comandos r
105. suario pulsa el bot n se emite la se al QPushButton pressed Por otra parte un slot es un m todo o funci n marcado con la palabra reservada de Qt slot A modo de ejemplo la clase QApplication de Qt incluye el m todo QApplication quit para cerrar la aplicaci n actual Cualquier slot puede conectarse a una se al siempre que la declaraci n de ambos se al y slot coincidan Esta conexi n provocar que cada vez que se emita la se al se ejecute el slot Por ejemplo podemos conectar la se al QPushButton pressed y el slot QApplication quit para hacer que cada vez que un usuario pulse el bot n anterior la aplicaci n se cierre El proyecto COMO usa extensivamente el mecanismo de se ales y slots anterior para manejar las comunicaciones entre los diferentes elementos de su interfaz gr fica as como en algunas clases m s internas 53 Signals amp slots Documentation Qt Project http gt project org doc qt 4 8 signalsandslots html 24 Desarrollo de un visor modelador 3D colaborativo Analisis 5 5 3 Boost Asio y la E S asincrona Boost Asio es una libreria de red y de E S a bajo nivel que sigue un modelo asincrono Esto significa que podemos lanzar operaciones de E S en segundo plano y asociarles a cada una un manejador que se ejecutar cuando la operaci n termine Todas las operaciones de E S asincrona incluyendo la comunicaci n a trav s de la red pasan a trav s de un objeto de la clase io_s
106. t getViewMatrix glm mat4 const lightVector_ vec3 halfVector vec3 Ilustraci n 6 14 Las clases Light y Camera en contexto 43 Desarrollo de un visor modelador 3D colaborativo Diseno 6 3 7 Sincronizando la escena Clases Scene Serverlnterface y ServerWriter La sincronizaci n de una escena remota en el cliente se produce mayormente en las clases Scene ServerInterface y ServerWriter La clase Scene mantiene un gestor de recursos manager por cada tipo de recurso disponible en la escena Existe un gestor de entidades un gestor de materiales un gestor de texturas etc Por su parte la clase ServerInterface es la interfaz a trav s de la cu l se realizan todas las comunicaciones con el servidor Esta clase se apoya en un conjunto de hilos que son los que mantienen la conexi n con el servidor realizando los env os y escuchando las recepciones A m a Serverinterface socket Socket executeRemoteCommand in command Command slot 5 i 3 j sceneCommandsToServer_ queue lt Command gt draw in viewMatrix mat4 in projectionMatrix mat4 void const resourcelDsGenerator ResourceIDsGeneratorPtr 1 workerThreads boost thread group connect in host const char in port const char in userName const char out userAcceptancePacket UserAcceptancePacket void run void a sendCommand in command Command void MaterialsManager commandReceived out comman
107. tPrimitive en el que se especifica el fichero de origen a partir del cual se generar la primitiva y el fichero destino aquel en el que se guardar la primitiva generada En el caso de OBJPrimitivesImporter su implementaci n del m todo importPrimitive anterior llamar a processMeshFile para procesar l nea a l nea el fichero obj con la especificaci n de la malla Cuando encuentre una referencia a un fichero de material mtl invocar a processMaterialFile sobre el mismo Si el fichero de material contiene referencias a ficheros de texturas el importador las cargar llamando a processTextureFile lt lt interface gt gt Primitivesimporter importPrimitive in srcFilePath string in dstDirectory string in nameSuffix string PrimitiveInfo lt lt struct gt gt PrimitiveData name string vertexData MeshVertexData normalData MeshNormalData uvData MeshTextureData processMeshFile in filePath string inout primitivelInfo Primitivelnfo oglData MeshOpenGLData inout primitiveData ImportedPrimitiveData void materialsInfo_ MaterialsInfoVector processMaterialFile in filePath string importFromFile in filePath string void out includesTextures bool exportToFile in filePath string void const out materials MaterialsInfoVector void generate0GLData void processTextureFile in filePath string out textureInfo TextureInfo void Primitivelnfo name string category ResourceID
108. t_ float 8 1 Texture Ilustraci n 6 18 El gestor de materiales en contexto Cuando el usuario local selecciona un material en la clase Materials Manager se le devuelve un manejador MaterialHandler a trav s del cu l modificar el material MaterialHandler deriva de ServerWriter y env a autom ticamente al servidor todas las acciones del usuario sobre el material en forma de comandos 50 Desarrollo de un visor modelador 3D colaborativo Diseno 6 3 8 3 2 El gestor de texturas TexturesManager El gestor de texturas act a nicamente como contenedor para las texturas cargadas desde fichero para su uso en mallas del sistema cubos conos cilindros y esferas Las texturas cargadas como parte de una malla importada desde fichero se guardan en el gestor de materiales por lo que se eliminan junto con su malla asociada Debido a que COMO no permite editar texturas TexturesManager no cuenta con m todos de bloqueo y desbloqueo TexturesManager loadlexture in imagePath string ResourcelD executeRemoteCommand in command TextureCommand void sendlextureloshader in resourcelD ResourcelD textureO0ffset vec2 in textureScale vec void const A 1 oglName uint sendloshader void const sendloSshader in textureOffset vec2 in textureScale vec void const 1 lt lt struct gt gt TextureData id ResourcelD name string pixels vector lt byte gt Ilustraci n 6 19 El gestor
109. te a cada pared de las formas geom tricas simples mencionadas en el punto anterior e Seleccionar entidades y a adirlas a la selecci n del usuario e Aplicar y concatenar transformaciones simples sobre la selecci n de entidades local translaciones rotaciones y escalados o Las transformaciones pueden realizarse de manera libre con respecto a la vista actual o con respecto a un eje X Y o Z o Las rotaciones y escalados pueden realizarse con respecto a un punto de pivotaje a seleccionar entre el origen del mundo el centroide de la selecci n o los centroides individuales En este ltimo caso cada entidad de la selecci n se transforma con respecto a su propio centroide 5 3 2 Software servidor El software servidor proporciona al usuario las siguientes capacidades e Mantener un hist rico con todos los comandos ejecutados sobre la escena e Sincronizar los comandos del hist rico anterior con todos los clientes conectados a la escena e Gestionar la propiedad de los recursos asociando un due o a cada uno y respondiendo a las peticiones de bloqueo y desbloqueo recibidas desde los distintos clientes e Salvar y cargar la escena 19 Desarrollo de un visor modelador 3D colaborativo Analisis 5 4 Desafios de la programacion distribuida La naturaleza distribuida del software COMO plantea una serie de desafios inherentes a la interconexi n de m ltiples m quinas a trav s de la red 5 4 1 Bloqueo de recur
110. te incremento Materials fair DirectionalLight material Unnamed material E 1 0 unnamed material 1 1 SE4E4E4 Projectic Material panel Top ve Bo ee material 3 z Ilustraci n 7 3 Tercer incremento del proyecto COMO Primitivas iluminaci n La imagen anterior es un fotograma de un v deo publicado en Youtube Modelador 3D cooperativo Prueba de materiales 89 Modelador 3D cooperativo Prueba de materiales https www youtube com watch v NVI6PgY8MrQ 73 Desarrollo de un visor modelador 3D colaborativo Desarrollo 7 5 El cuarto incremento importando primitivas desde el cliente texturas Para el cuarto incremento planteo que cualquier cliente pueda crear primitivas y que stas sean sincronizadas en el resto de los clientes Ademas trabajo en la inclusion de texturas Permitir que los clientes pudieran importar primitivas como lo hacia el servidor fue relativamente sencillo y sin grandes complicaciones La inclusion de texturas sin embargo fue mas compleja En primer lugar mi inexperiencia con las texturas en OpenGL hizo necesaria una formaci n previa A continuaci n tuve que ampliar el importador de OBJ para que leyera coordenadas UV Tambi n tuve que incluir estructuras de control y procesamiento adicionales en el c digo de la aplicaci n y del shader para distinguir las mallas susceptibles de incluir texturas aquellas que inclu an coordenadas UV en su especificaci n de
111. ura cliente servidor donde cliente y servidor parten del mismo c digo base pero usan diferentes configuraciones Adem s es extensible permitiendo a adir plugins como indica la siguiente imagen Tundra SDK tional modules atar ita h Ya A agane A Op pl 4 Ilustraci n 2 7 Estructura del SDK Tundra Al igual que en el caso de Verse el desarrollo del SDK Tundra no parece gozar de buena salud de cara al p blico La rama principal del repositorio en Github no se actualiza desde Abril de este a o y el ltimo video de su canal en Youtube se subi hace tres a os 12 About Sitio web de realXtend http realxtend org about 13 Repositorio de Tundra en Github https github com realXtend tundra 14 Canal de RealXTend en Youtube https www youtube com user realxtendvideo Desarrollo de un visor modelador 3D colaborativo Objetivos 3 Objetivos 3 1 Objetivos directos El objetivo principal del proyecto consiste en desarrollar un visor modelador 3D colaborativo Dicho software deber permitir que m ltiples usuarios se conecten a trav s de la red y trabajen en tiempo real sobre una misma escena 3D Conviene recalcar desde este momento que este software de nombre COMO est orientado a la composici n de escenas 3D m s que a la creaci n de modelos individuales La idea es que por ejemplo los usuarios importen objetos silla o mesa y los sit en para crear una oficina 3D Dos
112. usuarios no podr n trabajar sobre un mismo objeto por ejemplo una misma mesa ni editar sus v rtices Este visor modelador 3D colaborativo de nombre COMO se desarrolla directamente para Ubuntu pero con vistas a facilitar su portado a otras plataformas en el futuro Windows GNU Linux y OS X Para ello se hace uso de librer as y herramientas multiplataforma las cuales se listar n en el apartado requisitos hardware y software siguiente Por ltimo y no por ello menos importante el software debe ser licenciado como software libre 3 2 Objetivos indirectos El proyecto COMO se plante como la excusa perfecta para practicar dos ramas de la programaci n que son de mi inter s la programaci n gr fica y la programaci n distribuida Aprovechando la naturaleza acad mica del proyecto decid optar por usar OpenGL directamente sin apoyarme en motores gr ficos de terceros De esta manera pude reforzar y aplicar directamente conceptos gr ficos como iluminaci n shaders comunicaci n con la GPU etc Adem s deb a usarse una versi n moderna de OpenGL evitando el uso en todo momento de funcionalidades obsoletas o desaconsejadas En cuanto a la programaci n distribuida decid sacrificar nuevamente facilidad de uso por did ctica Por esta raz n en lugar de usar un protocolo ya existente decid crear un modesto protocolo de sincronizaci n de escenas 3D Adem s de los objetivos anteriores este proyecto tambi n me
113. x Indice autoincrementado para distinguir los recursos creados por un mismo usuario La generaci n de IDs de recursos ResourceIDs en cliente y servidor corre a cargo de una clase auxiliar llamada ResourceIDsGenerator ResourcelDsGenerator ResourcelD nextResourcelD ResourcelD creatorID_ UserID ResourcelDsGenerator in userIlD UserlD resourceIlndex Resourcelndex generateResourcelDs in nIlDs unsigned int ResourcelD Ilustraci n 6 1 Clases implicadas en la generaci n de IDs de recurso ResourcelD La clase ResourcelDsGenerator requiere un ID de usuario UserID para la inicializaci n de su atributo nextResourceID_ el cual se usar para generar los IDs de recurso ResourceID asociados a dicho usuario A partir de ese momento el usuario de la clase puede generar cualquier n mero de IDs de recurso ResourcelD nicos cada vez que invoca a ResourceI DsGenerator generateResourceIDs Debido a que los IDs se generan de manera consecutiva el m todo anterior s lo necesita devolver el primer ID del rango 6 1 5 Bloqueo de Recursos Cada vez que un usuario U selecciona un recurso R este ltimo queda bloqueado locked a nombre de U A partir de ese momento s lo el usuario U podr trabajar sobre el recurso R hasta que decida deseleccionarlo desbloquearlo 6 1 5 1 Motivaci n Las principales razones que motivan el bloqueo de recursos son las siguientes e Simplifica la sincronizaci n entre los diferentes cliente

Download Pdf Manuals

image

Related Search

Related Contents

Guide n° 3 : Règlement cosmétique La gestion des effets  Mode d`emploi rapide Accès Clients 1-Je prépare  Kenmore 790-9663 Range User Manual    Manual de Instruções de Uso  Activités d`AFRISTAT dans le cadre des recensements de la  1 - mediacongo.net  User`s Manual  User Guide    

Copyright © All rights reserved.
Failed to retrieve file