He estado perdiendo mi cordura en esto por un tiempo ahora. Simplemente ignore la parte que está comentada (no es el problema). Estoy tratando de hacer un barrido de longitud de 360 grados y de longitud de 180 grados y luego raycast. Pero aparentemente el vector de dirección (Dir en este caso) está atascado en (0, 0, -1). Revisé los valores xy y z y están funcionando bien. No tengo idea ahora de lo que está mal. Por favor responde antes de que me mate. suspiro
{ Vector3 Dir = new Vector3(0.0f, 0.0f, 0.0f); Output = new Texture2D(2160, 1080); for (int i = 0; i < 1080; i++) { float theta = (Mathf.Deg2Rad * i * 1.0f) / 6.0f; for (int j = 0; j < 2160; j++) { float phi = (Mathf.Deg2Rad * j) / 6.0f; float x = Mathf.Sin(theta) * Mathf.Cos(phi); float y = Mathf.Sin(theta) * Mathf.Sin(phi); float z = Mathf.Cos(theta); Dir = new Vector3(x, y, z); Debug.Log(x + " " + y + " " + z); /* RaycastHit raycastHit; if (Physics.Raycast(transform.position, Dir, out raycastHit)) { Renderer rend = raycastHit.transform.GetComponent<MeshRenderer>(); Texture2D tex = rend.material.mainTexture as Texture2D; Vector2 pCoord = raycastHit.textureCoord; pCoord.x *= tex.width; pCoord.y *= tex.height; Color color = tex.GetPixel((int)(pCoord.x * rend.material.mainTextureScale.x), (int)(pCoord.y * rend.material.mainTextureScale.y)); Output.SetPixel(j, i, color); Debug.Log("Ray hit an object! @ theta " + i.ToString() + " phi " + j.ToString() + " Color: " + color.ToString() + "Hit Coordinate x: " + pCoord.x + " y: " + pCoord.y); } */ } } //System.IO.File.WriteAllBytes("D:\\FYProject\\WebcamSnaps\\" + naming + ".png", Output.EncodeToPNG()); }En uno de sus comentarios, dijo: "No obtengo nada más que (0,0,-1) en cualquier iteración".
Su código tiene un bucle externo con un factor de iteración de 1080. Su bucle interno tiene un factor de iteración de 2160. En total, sus bucles combinados producen 2 332 800 valores de salida. No creo que haya verificado la salida de más de dos millones de declaraciones de depuración. Creo que comprobó las últimas docenas de valores, vio el mismo resultado una y otra vez y supuso que el patrón continuaba en toda la cadena. Ese fue tu primer error.
Su segundo error fue perder varias horas asumiendo que una función de formato era un error.
Vector3.ToString() redondea su salida a un dígito después del decimal. Si imprime los componentes individualmente, mostrarán lo que esperaría.
Tienes mis simpatías.