2017-12-14 6 views
1

Ich habe eine Reihe von Koordinaten eines 6-Bild Cubemap (vorne, hinten, links, rechts, oben, unten) wie folgt:Konvertieren Cubemap zu Äquivalenten in Equirectangular Koordinaten

[ [160, 314], Front; [253, 231], Front; [345, 273], Left; [347, 92], Bottom; ... ] 

Jedes Bild ist 500x500p, ist [0, 0] die obere linke Ecke. Ich möchte diese Koordinaten für ein 2500x1250p Bild in ihre äquirectangular Äquivalente konvertieren. Das Layout ist wie folgt:

cubemap

ich nicht das ganze Bild konvertieren müssen, nur den Satz von Koordinaten. Gibt es eine direkte Konvertierung für ein bestimmtes Pixel?

+1

Sind die Koordinaten, die Sie in Bezug auf einen gemeinsamen XYZ Ursprung posten? Was ist equirektangulär? Wenn Sie diese Dinge erklären, bekommen Sie mehr Chancen, dass jemand hilft. – Ripi2

Antwort

1
  1. konvertieren Ihr Bild + 2D-Koordinaten zu 3D normalisierten Vektor

    der Punkt (0,0,0) ist das Zentrum Ihres Cubemap diese Arbeit wie vorgesehen zu machen. Sie müssen also die U,V Richtungsvektoren, die auf Ihre Koordinaten skaliert sind, zur 3D-Position des Texturpunkts (0,0) hinzufügen. Die Richtungsvektoren sind nur Einheitsvektoren, wobei jede Achse 3 Optionen {-1, 0 , +1} hat und nur eine Achskoordinate für jeden Vektor ungleich null ist. Jede Seite der Cube-Map hat eine Kombination ... Welche hängt von Ihren Konventionen ab, die wir nicht kennen, da Sie keine Einzelheiten angegeben haben.

  2. Verwendung Cartesian to spherical Koordinatensystemtransformation

    benötigen Sie den Radius nicht nur die beiden Winkel ...

  3. die sphärischen Winkel zur 2D-Textur-Koordinaten umwandeln

    Diese Schritt hängt von Ihrer 2D-Texturgeometrie ab. Die einfachste ist rechteckige Textur (ich denke, das ist, was du mit equirectangular meinst), aber es gibt andere Mappings mit spezifischen Merkmalen, die jeweils unterschiedliche Konversionen erfordern. Hier einige Beispiele:

    Für das Rechteck Textur nur Sie die sphärischen Winkel in Texturauflösung skalieren ...

    U = lon * Usize/(2*Pi) 
    V = (lat+(Pi/2)) * Vsize/Pi 
    

    plus/minus einige Orientierung Zeichen, die Ihren Koordinatensystemen entsprechen.

btw. nur fanden diese (möglicherweise doppelte QA):

+0

Korrekte und gut erklärte Lösung. Meine Konvention ist wie [diese] (https: //upload.wikimedia.org/wikipedia/commons/b/b4/Skybox_beispiel.png), und ich habe die Einheitsvektoren bereits daran angepasst. Das letzte _V_ hängt auch davon ab, ob sich das Pixel [0,0] in der oberen linken Ecke oder links unten befindet. In diesem Fall funktioniert es für mich, danke. – Finfa811

+0

@ Finfa811 froh zu helfen. Ich habe das Bild zu Ihrer Frage hinzugefügt (Sie können es tun, indem Sie '!' Vor dem Link '! [Bla bla bla] (link)' hinzufügen, der der Seite sagt, dass es sich um ein Bild handelt ... – Spektre

Verwandte Themen