informatica:linux:tour360
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
informatica:linux:tour360 [2024/03/05 12:32] – jose | informatica:linux:tour360 [2024/03/09 16:18] (current) – jose | ||
---|---|---|---|
Line 56: | Line 56: | ||
</ | </ | ||
+ | ====== Modificaciones ====== | ||
+ | ===== Girar escena de un hotspor ===== | ||
+ | Cuando clickamos en un hotspot la escena viene con la orientación por defecto, pero no es lo mismo si venimos por la izquierda que por la derecha o si vamos de adelante hacía atrás. | ||
- | ===== Añadir nuevas fotos sin Marzipano tool ===== | + | Añadimos el siguiente parámetro en el hotspot de una nuestra escena. Giro indica lo que giramos yaw en la escena target: |
+ | < | ||
+ | " | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | ] | ||
+ | </ | ||
+ | |||
+ | En este caso es dentro de la escena Portalon_01 los dos hotspot que tiene. Significa que cuando estemos en la escena " | ||
+ | |||
+ | Para que esto funcione, tenemos que modificar el fichero index.js dentro de la función createLinkHotspotElement el bloque "Add click event handler" | ||
+ | |||
+ | ORIGINAL: | ||
+ | < | ||
+ | // Add click event handler. | ||
+ | wrapper.addEventListener(' | ||
+ | switchScene(findSceneById(hotspot.target)); | ||
+ | }); | ||
+ | </ | ||
+ | MODIFICADO | ||
+ | < | ||
+ | // Add click event handler. | ||
+ | wrapper.addEventListener(' | ||
+ | // Aquí es donde modificas la propiedad ' | ||
+ | var scene = findSceneById(hotspot.target); | ||
+ | if (scene && scene.data.initialViewParameters) { | ||
+ | // Actualiza el ' | ||
+ | scene.data.initialViewParameters.yaw = hotspot.giro; | ||
+ | } | ||
+ | // Luego cambia a la escena con el ' | ||
+ | switchScene(scene); | ||
+ | }); | ||
+ | |||
+ | </ | ||
+ | |||
+ | ===== Añadir mapa con la posición y orientación ===== | ||
+ | Copiamos el fichero mapa.png con capas transparentes en el directorio raiz donde está index.js | ||
+ | |||
+ | En el fichero index.js, entre | ||
+ | // Initialize viewer. | ||
+ | y | ||
+ | // Create scenes, | ||
+ | Añadimos el minimapa | ||
+ | < | ||
+ | // Crear un contenedor para el mini-mapa | ||
+ | var miniMapContainer = document.createElement(' | ||
+ | miniMapContainer.style.position = ' | ||
+ | miniMapContainer.style.right = ' | ||
+ | miniMapContainer.style.bottom = ' | ||
+ | miniMapContainer.style.width = ' | ||
+ | miniMapContainer.style.height = ' | ||
+ | miniMapContainer.style.zIndex = ' | ||
+ | |||
+ | // Añadir el mini-mapa al contenedor | ||
+ | var miniMap = document.createElement(' | ||
+ | miniMap.src = ' | ||
+ | miniMap.style.width = ' | ||
+ | miniMap.style.height = ' | ||
+ | miniMap.style.pointerEvents = ' | ||
+ | |||
+ | // Añadir el marcador al contenedor | ||
+ | var marker = document.createElement(' | ||
+ | marker.style.position = ' | ||
+ | marker.style.width = ' | ||
+ | marker.style.height = ' | ||
+ | marker.style.backgroundColor = ' | ||
+ | marker.style.borderRadius = ' | ||
+ | marker.style.zIndex = ' | ||
+ | // Posicionamiento inicial del marcador dentro del contenedor del mini-mapa | ||
+ | marker.style.transition = 'top 0.5s ease-out, left 0.5s ease-out'; | ||
+ | marker.style.left = ' | ||
+ | marker.style.top = ' | ||
+ | |||
+ | // Añadir el mini-mapa y el marcador al contenedor | ||
+ | miniMapContainer.appendChild(miniMap); | ||
+ | miniMapContainer.appendChild(marker); | ||
+ | |||
+ | // Finalmente, añadir el contenedor del mini-mapa al body o al contenedor principal | ||
+ | document.body.appendChild(miniMapContainer); | ||
+ | </ | ||
+ | |||
+ | Creamos la función actualizarPosicionDelMarcador al final del documento antes de estas líneas: | ||
+ | |||
+ | // Display the initial scene. | ||
+ | switchScene(scenes[0]); | ||
+ | |||
+ | Función actualizarPosicionDelMarcador | ||
+ | < | ||
+ | function actualizarPosicionDelMarcador(nuevaX, | ||
+ | // Suponiendo que ' | ||
+ | // y ' | ||
+ | // ' | ||
+ | // relativas al contenedor del mini-mapa. | ||
+ | |||
+ | marker.style.left = nuevaX + ' | ||
+ | marker.style.top = nuevaY + ' | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | La función la llamamos dentro de la función switchScene: | ||
+ | < | ||
+ | function switchScene(scene) { | ||
+ | stopAutorotate(); | ||
+ | scene.view.setParameters(scene.data.initialViewParameters); | ||
+ | scene.scene.switchTo(); | ||
+ | startAutorotate(); | ||
+ | updateSceneName(scene); | ||
+ | updateSceneList(scene); | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | La ponemos al final del todo después de updateSceneList | ||
+ | < | ||
+ | function switchScene(scene) { | ||
+ | stopAutorotate(); | ||
+ | scene.view.setParameters(scene.data.initialViewParameters); | ||
+ | scene.scene.switchTo(); | ||
+ | startAutorotate(); | ||
+ | updateSceneName(scene); | ||
+ | updateSceneList(scene); | ||
+ | actualizarPosicionDelMarcador(scene.data.initialViewParameters.x, | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Ahora en cada escena tenemos que poner los valores x,y de la posición que están en el mapa en la sección initialViewParameters. El punto 0,0 es la esquina superior izquierda | ||
+ | < | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ====== Añadir nuevas fotos sin Marzipano tool ====== | ||
+ | Hay que hacer 3 pasos: | ||
+ | < | ||
+ | 1. Convertir foto en directorios y copiar en directorio tiles | ||
+ | 2. Modificar data.js | ||
+ | 3. Modificar index.html | ||
+ | </ | ||
Descargamos la foto en formato rectangular. Por ejemplo si la tenemos subida a kuula y la editamos, abajo a la derecha está la opción download | Descargamos la foto en formato rectangular. Por ejemplo si la tenemos subida a kuula y la editamos, abajo a la derecha está la opción download | ||
Para convertir las fotos en formato Marzipano usamos este repositorio nodejs y este repo: | Para convertir las fotos en formato Marzipano usamos este repositorio nodejs y este repo: | ||
https:// | https:// | ||
- | |||
- | 4 node index.js | ||
- | 5 npm install | ||
- | 6 node index.js | ||
Por ejemplo tenemos nuestra foto en la ruta: | Por ejemplo tenemos nuestra foto en la ruta: | ||
Line 80: | Line 236: | ||
Convertimos la foto: | Convertimos la foto: | ||
node index.js | node index.js | ||
+ | Tarda un poco, unos 2 minutos, pone " | ||
+ | |||
< | < | ||
..cubemap created | ..cubemap created | ||
Line 218: | Line 376: | ||
Copiamos el directorio dentro de la instalación de marzipano en el directorio tiles | Copiamos el directorio dentro de la instalación de marzipano en el directorio tiles | ||
+ | Por ejemplo si hemos añadido planta2_01 se suele poner el ID: 3-planta2_01 para tenerlos ordenados. | ||
+ | |||
+ | El directorio tiles nos quedaría mas o menos así | ||
+ | < | ||
+ | └── tiles | ||
+ | ├── 0-portalon_01 | ||
+ | ├── 1-portalon_02 | ||
+ | ├── 2-patio_01 | ||
+ | └── 3-planta2_01 | ||
+ | </ | ||
+ | |||
+ | Modificamos el fichero data.js añadiendo otra entrada al vector json de Scenes. Podemos copiar otro tal cual y después ir cambiando los parámetros, | ||
+ | |||
+ | < | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | ], | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | |||
+ | </ | ||
+ | |||
+ | Y por último tenemos que añadir el DIV en el fichero index.html: | ||
+ | < | ||
+ | <div id=" | ||
+ | <ul class=" | ||
+ | |||
+ | <a href=" | ||
+ | <li class=" | ||
+ | </a> | ||
+ | |||
+ | <a href=" | ||
+ | <li class=" | ||
+ | </a> | ||
+ | <a href=" | ||
+ | <li class=" | ||
+ | </a> | ||
+ | <a href=" | ||
+ | <li class=" | ||
+ | </a> | ||
+ | </ul> | ||
+ | </ | ||
+ | |||
+ | </ | ||
| |
informatica/linux/tour360.1709641929.txt.gz · Last modified: 2024/03/05 12:32 by jose