2012-07-06 20 views
6

OpenGL ES 2.0 ma poważne problemy z pobieraniem próbek precyzyjne tekstury - Widziałem tematy z similar problem, ale nie widziałem prawdziwe rozwiązanie tego „zniekształcony OpenGL ES 2.0 tekstura " problem jeszcze.OpenGL ES 2.0 zniekształcenia tekstur na dużej geometrii GL_REPEAT

Nie jest to związane z formatem obrazu tekstury ani buforami kolorów OpenGL, wydaje się, że jest to błąd precyzji. Nie wiem, co dokładnie powoduje awarię precyzji - nie wydaje się, aby rozmiar geometrii powodował to zniekształcenie, ponieważ po prostu skalowanie pozycji wierzchołka przekazanej do modułu cieniującego wierzchołków nie rozwiązuje problemu.


Oto kilka przykładów zniekształceń Tekstura:

Problem z fakturą jest ograniczone do geometrii małej skali w OpenGL ES 2.0, w przeciwnym razie próbkowanie tekstur wydaje się być normalne, ale ziarnisty efekt stopniowo pogarsza dalsze dane werteksów od początku XYZ (0,0,0)

Te problemy z teksturami mają nie występuje na pulpicie OpenGL (działa dobrze pod Windows XP, Windows 7 i Mac OS X)

Widziałem tylko problem występujący na Androidzie, iPhone'u lub WebGL (podobny do OpenGL ES 2.0)


Wszystkie tekstury są potęgą 2 ale problem nadal występuje

  • Skalowanie danych wierzchołków - wartości z wierzchołkiem w XYZ lokalizacji są w zakresie: -65536 do +65536 zmiennoprzecinkowy

    • Zdałem sobie sprawę, że był duży, więc próbowałem podzielić pion ex pozycjach 1024 do kurczyć geometrię i miejmy nadzieję uzyskać dokładniejsze punkt precyzji pływających, ale to nie rozwiąże problemu lub zmniejszyć zniekształcenia tekstury
  • Skalowanie ModelView lub skalowanie macierzy projekcji nie pomaga

  • Zmiana filtracji tekstur opcje nie pomaga

    • Wyłączenie mipmappingu lub przy użyciu GL_NEAREST/GL_LINEAR robi nic
    • Włączanie/wyłączanie anizotropowe nie robi nic
    • Efekt banding nadal występuje nawet podczas korzystania GL_CLAMP
  • Dzielenie współrzędnymi tekstur przekazywane do vertex shader a następnie mnożąc je z powrotem do poprawnych wartości w fragment shader, również nie działa

  • precyzję highp sampler2D, highp float, highp int - we fragmencie lub moduł cieniujący wierzchołek niczego nie zmieni (lowp/mediump nie wo rk albo)

myślę ten problem ma zostały rozwiązane w jednym punkcie - Widząc, że OpenGL ES 2.0 -na gry udało się uczynić na dużą skalę, bardzo szczegółowe geometrii

Odpowiedz

1

ten jest zwykłym problemem atlasów tekstur. Nie ma ustawienia ograniczającego interpolację liniową w środku tekstury. Tak działa sprzęt.

Możesz obejść ten problem, używając najbliżej wyszukiwanego tekstury filtra w programie fragmentów, który oblicza modulo teksturowania na rozmiar i położenie kafelka tekstury i wykonuje liniowe filtrowanie ręcznie.

+0

Próbowałem rozwiązać błąd, który moim zdaniem jest podobny do tego, i przypadkowo trafiłem na to pytanie ... czy twoja technika działała również przy sortowaniu tego problemu? http://stackoverflow.com/questions/13915531/repeating-opengl-es-texture-bound- to-hills-in-cocos2d-2-0 Każda pomoc zostanie ogromnie doceniona! – simonthumper