Ich muss ein Bild von einem Server herunterladen, dann in eine Cubemap transformieren und schließlich diese CubeMap in meine Skybox legen.Bearbeiten einer Cubemap Skybox von einem Remote-Image
Ich arbeite mit C#.
kam ich mit diesem Code auf:
public string url = "image/url.jpg";
void Update() {
// When trigger, we start the process
if (Input.GetKeyDown("f")) {
// start Coroutine to handle the WWW asynchronous process
StartCoroutine("setImage");
}
}
IEnumerator setImage() {
Texture2D tex;
tex = new Texture2D(2048, 2048, TextureFormat.RGBA32, false);
WWW www = new WWW(url);
//Texture myGUITexture = Resources.Load("23") as Texture;
Debug.Log (www.bytesDownloaded);
Debug.Log (www.progress);
Debug.Log (www.texture);
yield return www;
// we put the downloaded image into the new texture
www.LoadImageIntoTexture(tex);
// new cubemap
Cubemap c = new Cubemap(2048, TextureFormat.RGBA32, false);
Color[] CubeMapColors;
CubeMapColors = tex.GetPixels();
c.SetPixels(CubeMapColors, CubemapFace.PositiveX);
// we set the cubemap from the texture pixel by pixel
c.Apply();
//NewTexture.isPowerOfTwo = true;
//Debug.Log (RenderSettings.skybox.GetTexture ("_Tex"));
// We change the Cubemap of the Skybox
RenderSettings.skybox.SetTexture("_Tex", c);
}
ich den gesamten Code kommentiert zu erklären, was ich denke, ich tue.
Ich habe diesen "Trick" gemacht, die Cubemap Pixel für Pixel zu erstellen, weil die Art und Weise des Editors (die übrigens unglaublich einfach ist) von anderen Leuten, die ich lesen konnte, nicht möglich ist.
Schließlich war das Ergebnis nur ein paar graue Pixel.
Ich weiß nicht wirklich, was in meinem Prozess so viel vermasselt, der einzige "Schatten" Punkt, den ich sehe, ist das TextureFormat.
Ich wählte RGBA32, weil, wenn ich auf meine Unity Editor schaue, ich BC7-Format, die Fehler als nicht möglich für SetTexture protokolliert und aus der doc erklären sie in RGBA32 dekomprimiert werden kann.
Natürlich gibt es keinen verbleibenden Fehler in der Konsole.
Ich bin wirklich überrascht, es gibt keinen einfachen Weg, es zu tun. Ich meine, ich nehme nicht unbedingt ein Bild von http und lege es in Skybox, sondern verändere einfach die Textur einer Skybox. Fehle ich etwas?
Cubemap haben 6 Gesichter. Sie sollten alle 6 davon einstellen, aber Sie setzen nur einen 'CubemapFace.PositiveX' in Ihrem Code. – Programmer
Aber wie soll ich dann das Bild in 6 Teile teilen? In der Tat habe ich gelesen, dass der Unity Editor das gemacht hat, als wir das Cubemap-Material für das Material gesetzt haben, aber ich habe kein Beispiel dafür gefunden mit C# script – Alburkerk
Versuchen Sie, das gleiche Bild auf allen 6 Seiten zu platzieren oder willst du das Bild auspacken? – user1767754