Войти
Уголок tool-программФорум

Проблемы с экспортом текстурных координат.

#0
13:33, 17 мая 2007

Привет всем!
Решил переделать экспортер что-бы экспортировались индексы. Текстурные координаты на экране выглядят не правильными.
Раньше экспортер собирал готовые полигоны без индексов. Все работало и экспортировалось правильно.
Экспорт делаю так.
Сначала поиск максимальной текстурной координаты tv( Y ) (их надо переворачивать) для текущего материала.
везде учитывается порядок обхода греней.

Проход по всем материалам {
  Проход по всем полигонам {
    если  индекс материала совпадает с индексом материала полигона, ищу максимальную текстурную координату tv( Y ).
  }
}

стандартный экспорт индексов для полигонов.
далее идет экспорт вершин тут лучше приведу кусок кода:

  // ранее записанный массив максимальных значений tv для каждого материала
  std::vector<float> MaxTV;
  // Описание вершины
  struct Vertex {
    // вершина
    Point3 v;
    // нормаль
    Point3 normal;
    //текстурная координата
    Point2 tvert;
    Vertex();
  };
...
  // массив учитывающий порядок обхода грани
  int orderPass[3];
...
  // массив вершин
  std::vector<Vertex> writeVertices(nVertex); 
  // цикл по граням
  for(j = 0; j < nTriangles; ++j) {
    // индекс материала
    int MatId = mesh.getFaceMtlIndex(j);
    // по 3 вершинам грани
    for(k = 0; k < 3; ++k) {
      // индекс вершины
      int vertexId = mesh.faces[j].v[orderPass[k]];
      // индекс текстурной координаты
      int tvertexId = mesh.tvFace[j].t[orderPass[k]];
      // получить вершину
      Point3 vec = mesh.verts[vertexId];
      // обнулить 4 столбец чтобы не учитывалось смещение
      tm.SetRow(3, Point3(0.0f, 0.0f, 0.0f));
      // записать без смещения
      writeVertices[vertexId].v = tm * vec;
      // обмен значениями
      std::swap(writeVertices[vertexId].v.z, writeVertices[vertexId].v.y);
      // Получение RVertex
      RVertex &rVert = mesh.getRVert(vertexId);
      // получить нормаль
      GetVertexNormal(mesh, j, rVert, writeVertices[vertexId].normal);
      // скопировать x по умолчанию
      writeVertices[vertexId].tvert.x = mesh.tVerts[tvertexId].x;
      // перевернуть y
      writeVertices[vertexId].tvert.y = MaxTV[MatId] - mesh.tVerts[tvertexId].y;
    }
  }

Вот что получилось в результате
Изображение удалено
что я делаю не так? Если нужен еще кусок окда то я могу запостить. Прошу помочь я в тупике :(
Спасибо всем заранее!
С уважением Андрей.

#1
14:02, 17 мая 2007

>>writeVertices[vertexId].tvert.y = MaxTV[MatId] - mesh.tVerts[tvertexId].y;
Переворачивается не так, а 1.0 - mesh.tVerts[tvertexId].y. Ето и есть различие, которое вносить MAX и там нет ничего, что бъ имело отношение к каким либо текстурнъм координатам модели - всего лиш перевернутъй битмап.

#2
14:08, 17 мая 2007

Zemedelec
ну к примеру я в лог выводил чему же равно MaxTV, у меня и получается что 1.0f == MaxTV. Я конечно все это потом проверю и если действительно всегда 1.0f == MaxTV, то я уберу поиcк MaxTV.

Уголок tool-программФорум

Тема в архиве.