GameDev.ru
/ GameDev.ru / Пользователи / Andrey / Сообщения на форуме пользователя Andrey (138 стр.)

Сообщения на форуме пользователя Andrey (138 стр.)

Как узнать размер post-TnL-кэша?22 мая 200710:49#19
vip_open
>как в FarCry делали? у них так то секции состоят из 33х33 вершин...
откуда знаешь? можешь поделится инфой или ссылками и т.д. ?
Сортировка объектов21 мая 200713:33#1
kr214
сортировать объекты следует по расттонию до камеры(сравнивай лучше квадрат расстояния). И выводить от ближних к дальним.
Если в объекте разные материалы то объекты следует сортировать еще и по материалам.
В результате будут группы объектов отсортированных по материалам, а внутри групп еще и по расстоянию.
Ошибка с форматом depth buffer18 мая 200719:26#2
БЕБЕГОН
задай массив  AutoDepthStencilFormat  и проверяй IDirect2D9::CheckDeviceFormat:
const D3DFORMAT displayFormats[] = {
      D3DFMT_D32,
      D3DFMT_D24S8,
      D3DFMT_D24X4S4,
      D3DFMT_D24X8,
      D3DFMT_D16
  };
  // цикл по форматам
  for(size_t j = 0; j < sizeof(displayFormats) / sizeof(displayFormats[0]); ++j) {
    // проверка формата
    if (FAILED(pD3D->CheckDeviceFormat(D3DADAPTER_DEFAULT,
      D3DDEVTYPE_HAL,  d3ddm.Format,  D3DUSAGE_DEPTHSTENCIL, 
      D3DRTYPE_SURFACE, displayFormats[j]))) {
        continue;
      }
      pPresentationParameters.AutoDepthStencilFormat = displayFormats[j];
      break;
  }
D3DERR_DRIVERINTERNALERROR18 мая 200719:23#3
ztranger
ищи ошибки при работе вершиными/индексными буферам,проверяй границы указателей из VB/IB . Я как-то шарахнул за пределы буфера у меня такая ошибка выскакивала. Иногда комп в перезагруз.
vsprintf + /vsscanf -18 мая 200713:08#7
Inspire
>Нет. У нас потокам С++ красный свет.
очень интересно, расскажи по каким причинам?
Проблемы с экспортом текстурных координат.17 мая 200714:08#2
Zemedelec
ну к примеру я в лог выводил чему же равно MaxTV, у меня и получается что 1.0f == MaxTV. Я конечно все это потом проверю и если действительно всегда 1.0f == MaxTV, то я уберу поиcк MaxTV.
Проблемы с экспортом текстурных координат.17 мая 200713:33#0
Привет всем!
Решил переделать экспортер что-бы экспортировались индексы. Текстурные координаты на экране выглядят не правильными.
Раньше экспортер собирал готовые полигоны без индексов. Все работало и экспортировалось правильно.
Экспорт делаю так.
Сначала поиск максимальной текстурной координаты 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;
    }
  }
Вот что получилось в результате
Изображение удалено
что я делаю не так? Если нужен еще кусок окда то я могу запостить. Прошу помочь я в тупике :(
Спасибо всем заранее!
С уважением Андрей.

Свой string и UNICODE16 мая 200712:19#24
cppguru
>а вполне себе линейная (если выкинуть STL всякий, конечно ;)
а можно с этого места поподробней, пожалуйста.
необходимо кое-что похитрее std::vector15 мая 200713:09#6
Lolmen
Ну это должно быть быстрей
#ifdef STLPORT
typedef std::hash_map<std::string, std::vector<Object *> > TYourSuperVector;
#else
typedef stdext::hash_map<std::string, std::vector<Object *> > TYourSuperVector;
#endif
минимальное PPL (GLSL)15 мая 200713:00#28
Vic3Dexe
хм... у меня все работает но стоит на машине VS2003 и VS2005
DirectX *.X Формат VS свой формат VB15 мая 200712:38#2
Nappster
твои модельки врядли кто-то так просто возьмет, да и попробовать распознать и вытянуть то что в твоем формате не так-то просто, при условии что он двоичный.
минимальное PPL (GLSL)15 мая 200711:04#26
lightmap
"1" - 224 FPS
"2" - 300 FPS
"3" - 240 FPS
GeForce 6600

NULL_PTR
>Юзай glslvalidate от 3DLabs http://developer.3dlabs.com/downloads/glslvalidate/index.htm (680кб)
>Показывает типичные ошибки.
Спасибо бошое!! как возьмусь по серьезней за улучшения OpenGL рендeра обязательно покапаю!

Cg vs GLSL12 мая 200722:35#14
Zeux
спасибо пригодится...
Из OpenGL в DirectX крик души!12 мая 20073:44#40
cppguru
>В топике http://www.gamedev.ru/code/forum/?id=63368 на драйверах ATI glBegin получился быстрее, чем любая ручная >политика VBO/Vertex arrays. Разработчики драйвера умеют их готовить лучше тебя.
>Впрочем, полагаться на драйвер плохо, и лучше использовать гарантированные решения через VBO.
мдя... очень удивлен... Но всятаки это такой частный случай... Что уж лучше VBO.

Следующие темы >>

2001—2012 © GameDev.ru — Разработка игр