Autor Wątek: Teksturowanie proceduralnie wygenerowanego mesh`a  (Przeczytany 2263 razy)

Offline kokos22

  • Użytkownik

# Luty 20, 2016, 16:54:18
Mam wygenerowany dynamicznie mesh, którego wierzchołki mapuje na teksturę (uvmapy). Tekstura ma być wielokrotnie wykorzystana przy jednym meshu, jednak jak widać, co drugie wykorzystanie odwraca się symetrycznie. Koordynaty dla każdych dwóch trójkątów podane są identycznie.

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline koirat

  • Użytkownik

# Luty 20, 2016, 17:03:09
Daj kod bo wiadomo że robisz coś źle.

Offline kokos22

  • Użytkownik

# Luty 20, 2016, 17:27:51
   Vector2[] uvs = new Vector2[vertexCount];

        float offset =1/(float) ((vertsPerTexture + 1) );
        int counter = 0;
       
        for(int i =0;i<vertexCount/2;i++)
        {
            if (counter * offset > 1) counter = 0;
            uvs[i] = new Vector2(counter*offset, 1);
            counter++;
        }

        counter = 0;

        for (int i = vertexCount/2; i < vertexCount; i++)
        {
            if (counter * offset > 1) counter = 0;
            uvs[i] = new Vector2(counter * offset, 0);
            counter++;
        }
Górne wierzchołki zawierają się w pierwszej połowie tablicy, dolne w drugiej.
Kod ma za zadanie utworzyć taką uvmapę aby użytkownik mógł definiować ile tekstur ma być użytych do wypełnienia siatki. Przykładowy wynik działania algorytmu  uvs[0] = new Vector2(0,1);
uvs[1]= new Vector2(0.25,1);
uvs[2] = new Vector2(0.5,1);
uvs[3] = new Vector2(0,75,1);
uvs[4] = new Vector2(1,1);
uvs[5] = new Vector2(0,1);
uvs[6]= new Vector2(0.25,1);


uvs[7] = new Vector2(0,0);
uvs[8]= new Vector2(0.25,0);
uvs[9] = new Vector2(0.5,0);
uvs[10] = new Vector2(0,75,0);
uvs[11] = new Vector2(1,0);
uvs[12] = new Vector2(0,0);
uvs[13]= new Vector2(0.25,0);

Offline kokos22

  • Użytkownik

# Luty 21, 2016, 11:03:55
Mniejsza o kod. Wystarczy mi informacja dlaczego przy koordynatach
(0,1),(1,1),(0,1),(1,1),...
(0,0),(1,0),(0,0),(1,0)...
tekstura nakładana jest naprzemiennie jak na pierwszym obrazie.


Offline albireo

  • Użytkownik

  • +1
# Luty 21, 2016, 11:09:55
Układa się naprzemiennie ponieważ koordynaty X tekstury lecą następująco: na pierwszym kwadracie masz od 0 do 1 (czyli normalnie), na drugim masz od 1 do 0 (czyli w lustrzanym odbiciu), później znów od 0 do 1 (normalnie).

Offline kokos22

  • Użytkownik

# Luty 21, 2016, 11:51:38
Czy da się to sensownie ominąć? Nie licząc użycia spreparowanej tekstury, która z obu stron wygląda tak samo.

Offline komorra

  • Użytkownik
    • Blog naszego teamu (o grze Voxelfield)

  • +1
# Luty 21, 2016, 13:45:28
Po prostu zamiast dawać naprzemiennie 0 i 1 a potem 1 i 0 w tym samym koordynacie, inkrementuj go ciągle o 1 (0,1,2,3,4,5), to nie szkodzi że będą większe niż 1, ważne jednak przy tym aby adresowanie tekstury dać na wrap a nie na clamp.

Offline kokos22

  • Użytkownik

# Luty 21, 2016, 23:28:32
Dzięki.