Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

Presentaciones (Invertir normales, Panorama)

Iniciado por yaneisy, Noviembre 24, 2015, 05:33:40 PM

Tema anterior - Siguiente tema
Noviembre 24, 2015, 05:33:40 PM Ultima modificación: Noviembre 24, 2015, 06:27:24 PM por pioj
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" rel="external nofollow"><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.

Noviembre 30, 2015, 02:40:07 PM #6 Ultima modificación: Junio 05, 2016, 06:35:15 PM por pioj
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;


            }
        }
    }
}
 

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.

Etiquetas: