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

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

Своя замена D3DX. Зачем?29 мар. 200710:45#8
antber
>В добавок это избавляет от привязки к d3dx9_xx.dll и теоретически программа будет работать на самом первом DirectX 9 - хотя >не знаю нужно ли это кому
вроде бы там только ID3DXFont и ID3DXSprite и скорей всего ID3DXLine.
Полностью заменить не получиться ведь D3DXCompileShader, D3DXAssemblerShader и все функции для работы с шейдерами находятся в D3Dx9.
Вышел TAO 2.0. Помогите разобраться какие расширения OpenGL я могу на нем использовать. Там есть Cg 1.4.1.28 мар. 200716:56#9
MoRLOK
>Неужели такое уж Г этот 1.4.1?
он уже устарел в последнем обновлении возможно все поправили, появились новые профили компиляции.
Cg 1.5  будет работать получше и у всех. Кстати он уже не совместим с  1.4.1
Вышел TAO 2.0. Помогите разобраться какие расширения OpenGL я могу на нем использовать. Там есть Cg 1.4.1.28 мар. 200715:56#7
MoRLOK
>Там есть Cg 1.4.1.
выкинь этот пещерный век... уже есть обновление за февраль 2007
http://developer.nvidia.com/object/cg_toolkit.html
и видать тему надо перенести в раздел графика
RPGman
>Выбрось каку.
>Ориентируйся на GLSL. Это, по крайней мере, стандарт. Да и на вид почти то же самое.
ну почему как? для некоторых задач пойдет...
Демка ландшафта с лодами.28 мар. 200714:01#39
MoRLOK
Не переживай :) у меня дублирование вершин поэтому памяти много ушло..
OpenGL  все-таки в плане рендеринга геометрии быстрей :)
Почему в C++ многие не пользуются exception'aми ???28 мар. 200711:03#224
slyfox
ну я поменял... С++ исключения немного затормаживают код, особенно при частом их злоупотреблении, лишние инструкции компилятор вставляет. Не спроста в boost к примеру, luabind есть опции BOOST_NO_EXCEPTIONS, LUABIND_NO_EXCEPTIONS. Да и сами реализации STL к примеру имееют подобные макросы.
На конечном релизи проекта их лучше убирать(ну при обработке ошибок использовать другие способы). При возникновении C++ исключения и при отсутствии их поддержки(опция компилятора) оно будет перехвачено __try...__except для Win32 либо нужно обработать сигнал в Unix системах, про сигналы я могу ошибаться. Для win32 платформ желательно главный цикл,загрузку деинициализацию обернуть в __try __except для перехвата системных исключений(access violation и т.д.). В таком случае движок
корректно обработает фатальные ошибки и завершит работу.
Возможно многие будут не согласны с этим.
Демка ландшафта с лодами.28 мар. 200710:46#37
Спасибо всем за тесты!!!
итак работает быстро.
На данный момент попробую убрать дублирование вершин. после этогго исправления думаю скорость повысится.
И исправить ошибку с рендерингом на старых картах под Direct3D.
Думаю как заделать дыры...
geomorph27 мар. 200719:48#17
Shtam
Отправь мне пожалуйста , а то трафика нет так закачивать :)
Демка ландшафта с лодами.27 мар. 200719:10#32
Mikle
>Что-то маловато, у меня ландшафт на 500к дает 30 fps при двух текстурах и просчитанном лайтмэпе, причем эти 500к - >фрагмент из бОльшего, практически неограниченного ландшафта.
ну в 4 раза же не понизится у меня FPS если я добавлю еще пару текстур?
>Это все на D3D, на OGL вообще ничего не показывает, только текст.
а лог не покажешь?
Демка ландшафта с лодами.27 мар. 200716:45#29
dave
ну тогда грузится не буду ROAM тормоз, сложен в реализации и уже устарел :)
Демка ландшафта с лодами.27 мар. 200716:41#28
>Для каждого лода считаешь максимальную ошибку (отклонение ЛОДа от full res).
>Потом эту ошибку проецируешь на экран, получаешь ошибку, выраженную в пикселях.
>А потом уже выбераешь ЛОД с подходящей ошибкой.
>Такой способ лучше для юзера в плане перцепции, но могут быть такие случаи, когда патч будет рисоваться с большим разрешением, чем у >тебя сейчас.
ну а формулу общую с моими данными к примеру на словах слишком туманно.
что такое максимальная ошибка ЛОДА
Как спроецировать ошибку на экран?
как выбирать лод с подходящей ошибкой?
В книге Снука такая формула:
              E * S
              _____  > L
Split ? =
              D

E - метрика ошибки;
S - масшаб ошибки;
D - расстояние до наблюдателя;
L-предел отношения;
Что нибудь похожее на твой способ есть?

Демка ландшафта с лодами.27 мар. 200716:20#25
>А ты используешь Screen space error для определния ЛОДа, или просто удаленность от камеры?
не скорей всего удаленность от камеры :) вот участок кода для уяснения:
//отображение узла
void OctreeNode::Draw() const
{
  if (!render) {
    return;  
  }
  //отображение bounding box'а
  if (DrawBox) {
    debugBoxes.push_back(&localBoundingBox);
  }
  // квадрат расстояния от центра узла до камеры
  LodInfo::curSqDistance = Math3D::Math::DistanceSq(render->GetCamera().GetPosition(), localBoundingBox.GetCenter());
  // поиск подходящего лода
  lodInfo_t::const_iterator info = std::find_if(lodInfo->begin(), lodInfo->end(), &LodInfo::FindDistance);
  // стартовая вершина
  size_t startVertex = 0;
  // информация о лоде найдена
  if (info != lodInfo->end()) {
    const LodInfo &lInfo = *info;
    render->SetIndexBuffer(lInfo.lodIndexBuffer);
    // текущее число полигонов
    curNumPolygons = lInfo.NumPolygons;
    // пересчет стартовой вершины
    startVertex = StartVertex / lInfo.kStartVertex;
  }
  else {
    render->SetIndexBuffer(octreeIndexBuffer);
    // число полигонов
    curNumPolygons = NumPolygons;
    // стартовая вершина
    startVertex = StartVertex;
  }
  render->DrawIndexedPrimitive(Render::TRIANGLE_LIST, 0, OffsetIndices, TotalNumVertex, startVertex, curNumPolygons);
}
Я так понял не совсем это точно? объясни про Screen space error
Демка ландшафта с лодами.27 мар. 200715:46#23
Asgard
>Для работы с ландшафтом 512х512 INDEX32 (DWORD) не требуется, тем более, так как у тебя (сам так же делаю), делай INDEX16 >(WORD).
не хватит для 512x512 INDEX16  считаем если у меня поправлено дублирование вершин:
512*512 + 512 = 262656;
2^16 - 1 = 65535 - столько индексов только умещается в unsigned short.
Правильно посчитал?
сейчас у меня вообще неправильно(но просто как начинал сделал так) 512 * 512 * 3.
>Во-втоорых, убирай дублирование вершин,
Про дублирование вершин пост 1 :) это я знаю.
>и вообще, у тебя что, несколько VB? Убирай нафиг, делай один VB, несколько IB (по >одному на уровень ЛОДа),
У меня как раз 1 большой IB на весь ландшафт ;) а вот IB несколько больших(тоже на весь ландшафт) на каждый лод.
>причём IB должен рисовать только один кусок ландшафта, а там потом сдвигай индексы и нарисуется >весь ландшафт, памяти
>кушает заметно меньше!
понятно просто это усложнится немного отрисовка но подумать можно. IB то 1 и тот-же. Просто смещение внутри VB будет.
>А как ты индексбуффер для ЛОДа считаешь? Просто прореживанием каждой второй вершины?
>Если так, то годится ИМХО только для достаточно гладких рельефов.
да нет к примеру если размер листа 64x64 то там будет 6 уровней лодов(2^6 = 64) и 6 индексных буферов. итого
numLod = log2(width), где width - размер листа дерева.
соответственно размер каждого IB будет меняться в 4 раза.
>С OpenGL запустилось только в фулскрине. Выдает около 50 фпс (ну от такой видюхи больше ждать не стоит).
понятно в общем. Тут проблема с методом DrawIndexedPrimitive там еще неправильно передается число вершин учавствующих в отрисовке(4 параметр). Сейчас я передаю все вершины ландшафта(с учетом что они у меня еще и дублируются!!).  вот и ругается на D3DCAPA9.MaxPrimiitveCount. Может кто поможет с этим?
>Дырки выглядят >страшновато, наверное не стоит делать такие резкие переходы в детализации - с 1 клетки сразу на 4. И еще есть вариант - >пускать по краю каждого "куска" ландшафта вертикальные треугольники - чтобы дырки были не так заметны.
про вертикальные треугольники понятно. Это 1 из способов. Вот я подумываю о геоморфинге в шейдере. Или добавление вертикальных полигонов возможно будет проще и быстрей.
Про переход с 1 клетки на 4 хм... можно подумать.
Но возможно заделывание дыр это все скроет + более точно подобрать момент перехода. Сейчас у меня просто считается квадрат расстония до центра узла, по нему ищется в массвие подходящий лод.
Демка ландшафта с лодами.27 мар. 200714:10#19
VileDog(ck.UA)
ну а лог под OpenGL ? хотя там все понятно не хватает памяти...
ошибку с дублирование вершин и передачей числа вершин для Direct3D надо срочно исправлять.
Демка ландшафта с лодами.27 мар. 200711:06#16
LEVelSi
>Только черный экран, ниче кроме текста не рисуется. Возможно из-за INDEX32. или 50-метровый буфер не влезает в >видеопамять.
попробуй запустить в OpenGL :) в render.cfg подправь имя рендера на "OpenGL".
просто есть еще 1 ошибка в Direct3D нужно передавать число вершин, я передаю слишком много тут и D3DCAPA9.MaxPrimiitveCount дает ограничение и ландшафт не рендерится.
Спасибо за тест.
Asgard
Спасибо за тест и критику. Прокоментирую ее:
>размер ландшафта какой?
512x512
>-Ландшафт несколько угловат, правда в большинстве случаев это обусловлено фиговыми картами высот, я перешёл на >16-битные RAW, и получаю очень гладенькие ландшафтики с довольно большим диапазоном высот
это не из-за битности что-то я накосячил при загрузки карты высот или при построении вершинного буфера
загрузка карт любой битности тоже поддерживается :) но там вроде тоже есть ошибочка :(
>аццкая работа с памятью, особливо в OpenGL, аж 73 мегабайта
читал первый пост ;) ? дублирование вершин в вершинном буфере :) ...
>-управление - видать не юзал DirectInput, хотя и без него можно толково сделать, но это мелочи, научишься...
так учиться этому не нужно в движке у меня нормальное управление через Direct Input, в тестовом проекте ландшафта я это просто не вставил :), посчитав лишним и обошелся просто тормознутыми обработчиками виндовых сообщений.
>В принципе, если это первое что ты вообще сделал, то жить мона, скорости приличные, хотя потом при толковом >текстурировании (сплаттинг), начнёт падать, так что оптимизируй дальше!
ну как не совсем первое есть уже опыт... Но сам понимаешь рендеринг ландшафта не совсем тривиальная задача.
Демка ландшафта с лодами.26 мар. 200716:45#12
eHomo
сюда

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

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