Hola, soy nueva en esto de usar Unity y necesito mediante una esfera invertir sus normales para crear un panorama y ponerle una textura que ya tengo de una imagen panoramica tomada a 360 grados y luego ponerle dentro una camara para poder visualizar el panorama creado, por favor toda ayuda q me puedan dar se lo agradezco.
Si no recuerdo mal (además de poder hacer eso en cualquier software3D, como 3dsmax, Blender,etc), creo que bastaba con escalar negativamente un GameObject para invertirlo, por ejemplo -3,-3,-3 debería escalar al triple el tamaño de una esfera, pero invirtiéndola, de cara a dentro.
no se si es obligatorio lo de hacer la esfera pero tienes una forma muy sencilla de hacer algo similar,si estas trabajando con unity 5 lo que tienes que hacer con esa imagen 360 es pasarla a unity en el inspector convertirla en cubemap,en mapping pones latitude-longitude layout,luego creas un material y eliges el shader skybox/cubemap despues vas a window/lighting y donde pone skybox pones el material creado ahora ya tendrias una vista 360º de tu fotografia.
Pues vale me sirvio lo que me dijiste Kik195, aunque tambien pude probar que creando una esfera y agragandole la imagen panoramica a 360 grados y poniendole el scripts
<http://wiki.unity3d.com/index.php/ReverseNormals>. pues me funciona igual, invierte las normales de la esfera y con una camara situada en su centro (0,0,0) pues ya tengo lo que busco, ahora el problema es que esa camara necesito rotarla y acercar el lente o alejarlo, sin moverla de su posicion, he probado rotarla pero la parte del zoom sin que se traslade la camara pues no lo he logrado, si pudieran ayudarme pues estoy comenzando a dar mis primeros pasos en unity.
using UnityEngine;
using System.Collections;
public class Zoom : MonoBehaviour {
public float fieldOfView;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update()
{
if (Input.GetAxis("Mouse ScrollWheel") < 0)
{
if (Camera.main.fieldOfView <= 125)
Camera.main.fieldOfView += 2;
}
if (Input.GetAxis("Mouse ScrollWheel") > 0)
{
if (Camera.main.fieldOfView > 2)
Camera.main.fieldOfView -= 2;
}
}
}
Aqui tienes un sistema de zoom para la rueda del mouse.
Pues vale, me funciona, gracias por la ayuda.
hola kik195 si pudieras orientarme en esto que quiero hacer, tengo un scripts para visaulizar 3 camaras mediante una tecla, pero lo tengo en javascripts y quiero tenerlo en .cs
Código para visualizar 3 cámaras con una sola tecla (v)
var cam1 : GameObject;
var cam2 : GameObject;
var cam3 : GameObject;
var cont : int = 1;
function Start(){
cam1.SetActive (true);
cam2.SetActive (false);
cam3.SetActive (false);
}
//Iniciamos la función Update
function Update(){
if( Input.GetKeyDown (KeyCode.V)){
switch(cont){
case 1:
cam1.SetActive (false);
cam2.SetActive (true);
cont = 2;
break;
case 2:
cam2.SetActive (false);
cam3.SetActive (true);
cont = 3;
break;
case 3:
cam3.SetActive (false);
cam1.SetActive (true);
cont = 1;
break;
}
}
}
Pues estoy poco a poco con el lenguaje de programacion y pues hay cosas que voy probando viendo los tutoriales de videos pero otras en las que me quedo sin poder hacer nada, por ahora el scripts me funciona pero me piden en el proyecto q debo hacer que todo los scripts los trate de .cs y mas adelante pudiera yo tener envez de 3 camaras pues n camaras en la escena para irlas visualizando. estas camaras estan dentro de un modelo 3d que tengo cargado y ellas ocupan una posicion. saludos
using UnityEngine;
using System.Collections;
public class CameraActive : MonoBehaviour {
public GameObject cam1;
public GameObject cam2;
public GameObject cam3;
private int cont = 1;
// Use this for initialization
void Start () {
this.cam1.SetActive(true);
this.cam2.SetActive(false);
this.cam3.SetActive(false);
}
// Update is called once per frame
void Update()
{
if (Input.GetKeyDown(KeyCode.V))
{
switch (cont)
{
case 1:
cam1.SetActive(false);
cam2.SetActive(true);
cont = 2;
break;
case 2:
cam2.SetActive(false);
cam3.SetActive(true);
cont = 3;
break;
case 3:
cam3.SetActive(false);
cam1.SetActive(true);
cont = 1;
break;
}
}
}
}
pues bien. Y ahora como podria yo sincronizar dos camaras, por ejemplo una que esta visualizando un objeto y otra que esta dentro de un panorama, para visualizar ambas camaras segun se necesite, pues tengo un modelo 3d de uan casa, y pongo una camara dentro de una habitacion para visualizar esa parte del modelo, pero como tengo un panorama esferico de esa habitacion con una camara incluida en su centro, como puedo hacer para cambiar de camara, guiame para ir comprendiendo que debo estudiarme. Gracias
Hola yaneisy, tienes que poner Wiewport Rect a 0.5 en la camara1 en la camara2 la deja como estas y le pones este script a un emty vacio y enlazas la 2 camaras a su sitio.Este el script:
using UnityEngine;
using System.Collections;
public class cam : MonoBehaviour
{
public GameObject cam1;
public GameObject cam2;
private int cont = 1;
// Use this for initialization
void Start()
{
cam1.SetActive(true);
cam2.SetActive(false);
}
// Update is called once per frame
void Update()
{
if (Input.GetKeyDown(KeyCode.V))
{
switch (cont)
{
case 1:
cam1.SetActive(true);
cam2.SetActive(true);
cont = 2;
break;
case 2:
cam1.SetActive(true);
cam2.SetActive(false);
cont = 3;
break;
default:
cam1.SetActive(true);
cam2.SetActive(false);
cont = 1;
break;
}
}
}
}
(//<fileStore.core_Attachment>/monthly_2015_12/w.jpg.98d6ddea2266f2556ec27e3606d413d9.jpg)
Tambien se podria mover una sola camara por todos los sitios, teniendo su posicion, es decir que la camara visualice al modelo, luego se traslade al centro del panorama en su eje (0,0,0) y visualice el panorama, algo como eso necesito hacer y necesito orientacion para estudiar.
Me explico mejor, como voy aprendiendo lo de programar y a usar unity pero tengo q mostrar resultados me interesa aprender y que me guien, ahora mismo estoy trabajando en un proyecto donde debo recorrer en una escena con una camara ir a tres posiciones ya que tengo situada 3 esferas en un modelo 3D cargado y debo posicionar mi camara pues a traves de una tecla (v) q se situe en el centro de la 1ra esfera, ahi rote a 360 grados y haga Zom, pero si vuelvo a tocar la tecla (v) aparezca en el centro de la esfera 2 y haga igual rotar 360 grados y zoom, y los mismo con la esfera 3. Si han hecho algo que me sirva para crear un scripts en c, pues me vendria bien. O algun material q me sirva de estudio sobre el tema.
Hola yaneisy con este script que te dejo la camara va a rotar sobre si misma 360º.junto con lo que ya tienes creo que es todo lo que necesitas para hacer lo que quieres.
using UnityEngine;
using System.Collections;
public class RotateCamera : MonoBehaviour {
public float speed;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
transform.Translate(speed * Time.deltaTime, 0, 0);
transform.Rotate(new Vector3(0, speed, 0));
}
}
ok, Kik195, antes tenia yo en el modelo 3d en distintas posiciones 3 panoramas hechos con una esfera donde le agregaba un material con la imagen panoramica y la clase Invertirnormales, situaba una camara en el centro de la esfera y a esta camara le agregaba una clase de rotar y zoom camara y pues lograba visualizar el panorama, ahora me piden que en vez de tener 3 camaras (una interna en cada panorama), solo tenga una en el modelo 3d que se traslade al centro de cada panorama situado en un punto (x,y,z) que es donde se encuentra la esfera, pero debo poner la camara en su centro, y rotar y hacer zoom con el mouse, luego si aprieto la tecla (v) voy saltando hacia los otros restantes panoramas. Y aqui es donde estoy trabada, si tienes algo para orientarme por favor.
Perdona por no contestarte antes,es sencillo usa el mismo script que hiciste para cambiar de camara pero esta vez ponlo en la camara no en un empty object,y sustituye los cam.SetActive por transform.position y las coordenadas de cada esfera,espero que te sirva.
hola kik195 pues si que me ha funcionado lo que me has recomendado, pero ahora tengo algo nuevo, tengo en un excel un listado con las posiciones (x,y,z) de 30 imágenes panorámicas y un modelo 3d, entonces ya manualmente no puedo poner la esfera e invertir sus normales y agregarle la imagen panorámica, ya que ahora debo buscar como guardar todas esas posiciones de los panoramas y luego en cada posición mandar a crear una esfera que tenga sus normales invertidas y tenga la textura que le corresponde según esa posición. Y luego entonces con la cámara voy a ir pasando por todos los panoramas usando esas posiciones. Pues es un nuevo reto que tengo, ayúdame y dame algunos consejos, pues no se como voy a crear esas esferas y donde voy a guardas todas esas posiciones e imágenes para que me sirvan para crear las esferas mediante scripts.
Es muy fácil oS ejo el link aquí:
eature=oembed" frameborder="0" allowfullscreen="true">
Buenas kevin23699,esta muy bien el video pero lo que la compañera intenta hacer es por codigo de programacion ahi lo que esta usando es el addon de street view para unity,y con respecto a tu pregunta yaneisy lo que tienes que hacer es prefabs con todas las esferas y luego instanciarlas cuando pulses la tecla.Espero que te ayude.
Pues kik195 he estado analizando lo que me dices de usar prefabs, pues viendo este codigo de ejemplo de un prefabs
using UnityEngine;
using System.Collections;
void Start() {
for (int y = ; y < 5; y++) {
for (int x = ; x < 5; x++) {
GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
cube.AddComponent<Rigidbody>();
cube.transform.position = new Vector3(x, y, );
}
}
}
}
Donde se crea una pared de ladrillos, q viene el manual de unity, y se crea un GameObject vacío para arrastrar el scripts anterior, ahora en mi caso yo tengo que crear n esferas que ahora para probar son 30 pero en un futuro aumentaria su cantidad en dependencia de el numero de imagenes panoramicas que yo tenga del modelo 3d que estoy usando. ayudame a ubicarme pues en ese ejemplo los valores de x e y varian de 0 a 5, pero yo tengo todas las posiciones (x,y,z) donde se debe crear cada esfera en un archivo exel o txt y como no tengo tanta experiencia en la programacion, deberia yo guardar todos estos datos en algun sitio y luego ir recorriendolo para q en cada vector3(x.y.z) me pinte la esfera, le agregue la textura q es la imagen panoramica q pertenece a esa posicion y que coja la clase invertir normales q la tengo en un scripts, guiame en todo lo que puedas para seguir estudiando a ver si puedo lograr ubicar estos panoramas en el modelo 3d que tengo.
Para aclarar mas tengo todas las posiciones de las imagenes panoramicas (x,y,z) con su nombre, guardadas en un exel, pues entonces podria yo cargar estos datos del exel en c# y trabjar con ellos a la hora de crear los prefabs para los panoramas, pues siempre creo una esfera con sus normales invertidas usando el script .cs y luego le pongo la posicion donde debe crearse y el material (textura q es la imagen panoramica que debe tener segun la posicion). Espero haberme explicado bien sobre lo que quiero hacer, para que puedas darme algunos consejos que me ayuden en mi estudio.
Ya estudiando mas sobre el tema veo que puedo guardar los datos del exel en un archivo .csv para luego leer este archivo y guardar los datos para poder usarlo a la hora de crear una esfera en cada posicion que esta almacenada en ese archivo csv. Si pueden ayudarme con el tema de leer y almacenar datos de un archivo csv se los agradeceria.
el csv es un archivo de texto que tiene las columnas separadas con comas, y cada linea es una fila:
http://edoceo.com/utilitas/csv-file-formateso es todo...