Autor Wątek: Allegro quad3d_f, a tekstury  (Przeczytany 461 razy)

Offline jaboja

  • Użytkownik
    • JaBoJa

# Sierpień 18, 2010, 04:51:11
Używam funkcji quad3d_f (Allegro 4), żeby narysować prostą bryłę (3 czworokąty) i mam pewien problem.
Mimo, że używam POLYTYPE_PTEX to ściany są jednokolorowe (kolor jednego z pikseli tekstury).
Wygląda to tak jakby tekstura była tak rozciągnięta, że na czworokącie mieści się tylko jeden jej piksel.
Czy istnieją jakieś sposoby na kontrolowanie pokrywania czworokąta teksturą?
Ewentualnie w jaki inny sposób to renderować, żeby działało tak jak powinno.

Kod: (cpp) [Zaznacz]
  MATRIX_f m, m_rotation;
  set_projection_viewport(0, 0, buffer->w, buffer->h);
  get_camera_matrix_f(&m, 0, 0, -8, 0, 0, -1, 0, 1, 0, 32, (float)buffer->w / (float)buffer->h);
 
  get_rotation_matrix_f(&m_rotation, ry, rx, 0);   // obliczanie rx i rx dla czytelnosci usuwam
  matrix_mul_f(&m_rotation, &m, &m);
 
  V3D_f points[12];
  for(int i=11; i>=0; --i) {
    float x, y, z;
    apply_matrix_f(&m, source_points[i].x, source_points[i].y, source_points[i].z, &points[i].x, &points[i].y, &points[i].z);
    persp_project_f(points[i].x, points[i].y, points[i].z, &points[i].x, &points[i].y);
    points[i].u = 0.0f;
    points[i].v = 0.0f;
    points[i].c = 0;
  }

  quad3d_f(buffer, POLYTYPE_PTEX, tex1, points  , points+1, points+2, points+3);
  quad3d_f(buffer, POLYTYPE_PTEX, tex2, points+4, points+5, points+6, points+7);
  quad3d_f(buffer, POLYTYPE_PTEX, tex3, points+8, points+9, points+10,points+11);

ps. Przy okazji: jak zmieniam POLYTYPE_PTEX na POLYTYPE_PTEX_LIT mam naruszenie ochrony pamięci. Z czego może to wynikać?

Offline Mr. Spam

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

Offline Avaj

  • Użytkownik

# Sierpień 18, 2010, 08:28:24
ustawiasz UV na (0,0) to nie dziwne, że ci jeden texel całą powierzchnię pokrywa.

Kod: (cpp) [Zaznacz]
points[0].u = 0.0;
points[0].v = 0.0;
points[1].u = 1.0;
points[1].v = 0.0;
points[2].u = 1.0;
points[2].v = 1.0;
points[3].u = 0.0;
points[3].v = 1.0;
spróbuj coś w tym stylu zakombinować