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

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

Хранение и рендеринг геометрии31 мар. 200816:49#10
student
>Т.е. некая структура RenderableInfo, содержащая в себе геометрию, материалы, трансформацию и т.д.?
>Как она может быть представлена?
да типа того. Более того данные о текущем проходе рендеринга к примеру рендер Shadow Map, рендер в текстуру отражения/преломления рендер в Cube текстуру, в вершинный буфер. По сути данные о Render Target.
>п.с. ещё небольшой вопрос. Как сделать поддержку нескольких форматов вершин, чтобы при загрузку геометрии,
>никто не должен был думать, какой именно формат нужен для данного меша?
все просто VertexBuffer хранит формат вершины. При его установке рендер это все разруливает вызывая соответсвующие функции конкретного рендер API.
у меня формат вершин не содержит к притмеру Tangent и Binormal по умолчаню у него фопмат вершин позиция/нормаль/текс. Если мешь грузится с парамеррами загрузки(массив структур(имя/значение)) и если есть параметр считать TBN то тут -же епресоздаестя загрузчиком VB считается TB и формат вершин меняется
Хранение и рендеринг геометрии31 мар. 200816:40#6
student
>А зачем столько вызовов, связанных с буферами, если можно сразу всё напрямую впихнуть в DrawIndexedPrimitive()?
что-то я не понял, установка VB/IB это 2 вызова 1 функции интерфейсного класса Render
+ DIP всего 3...
данные для DIP хранятся в каждом Surface mesh'а.
ктстати SkinnedMesh у меня наследуется от Mesh
т.е. у него есть еще кости и кадры... геометрия одна и таже...т.е. рендер не знает что он рендерит анимацию или нет...
Хранение и рендеринг геометрии31 мар. 200816:33#3
student
>А зачем делать Vertex and IndexBuffer интерфейсами?
а чем так плохо?:
render->SetIndexBuffer(mesh->GetIndexBuffer(());
render->SetVertexBuffer(mesh->GetVertexBuffer(());
нет зависимости от API
>>3) у меня не содержит его рисует Render что тоже пока не правильно :)
>почему неправильно?
должна быть некая рендер дата которая содержит матрицу трансформации шейдеры, текстуры RenderState данные от VB/IB и т.д.
массив таких дат поступает для рендера он их правильно сортирует по нужным параметрам. Пока я такое не делал. но планирую
Хранение и рендеринг геометрии31 мар. 200816:23#1
student
>1)Как должен выглядеть класс Mesh? (приведите примеры вариантов реализации класса)
>Я себе его представляю как массив вершин/граней/субсетов, собcтdенно описания формата вершин,
>массив материалов. Должен ли меш уметь работать с вершинным и индексным буфером (в случае мульти-АПИ)
>это гемморно)? В общем приветствуются примеры.
Vertex and IndexBuffer у меня мульти API так что у меня это интерфейсы. никакого гемора нет  для абстрагирования от API.
как вариант можно хранить массив полигонов (просто треугольник без текстурных координат нормалей и т.д.) можно использовать для коллизий.
по поводу материалов. У меня есть массив Surface в котором есть индекс материала стартовая вершина и число  вершин. тогда для отрисовки ходим по массиву Surface'ов ставим материал и DrawIndexedPromitive/glDrawElements(последнее делает рендер а не mesh). т.е. примерный аналог Subset в ID3DXMesh. Также в меше хранится массив указателей на загруженные материалы.
>2)Как лучше организовать заполнение буферов? Напрямую в методе load() загрузчика мешей, или лучше
>в этот метод передать результат выполнения методов d3d9device->CreateVertexBuffer()/d3d9device->CreateIndexBuffer()?
>Или завести классы хелперы VertexBuffer и IndexBuffer, от которых ничего не наследуется и которые
>содержат просто массивы вершин и индексов. И затем эти массивы используются в качестве параметров для
>DrawIndexedPrimitive(). По-моему самый оптимальный вариант. Как вы считаете?
зугрузку мешей к примеру у меня делает менеджер ресурсов. Он создает VB/IB вызывает у них Lock/Unlock (все не зависит от API) и сохраняет указатели на VB/IB в Mesh.
3) у меня не содержит его рисует Render что тоже пока не правильно :)
Как лучше батчить импостеры(растительность)28 мар. 200816:09#3
Zemedelec
>схлопъвать импостеръ в вертекс шейдере,
занулять вершины что-бы не растеризатор не напрягался?
Как лучше батчить импостеры(растительность)28 мар. 200815:52#1
>Если при отрисовке сеток деревьев считать расстояние до них и отбрасывать, если они далеко, то как вместо этого дерева рисовать импостер?
дак вроде импостер как раз для этого и предназначен. Можно еще попробовать ввести дистанцию с которой не рисовать импостер.
>Ведь у меня импостеры для узла октри в одном буффере и батчатся они ВСЕ сразу
впринципе можно сделать динамический буфер и сортировать импостеры по материалам. Хотя в зависимости от поворота к камере тебе нужно с разных ракурсов рисовать и будут разные текстуры.(Если у тебя реализовно так).
Выбор графического API25 мар. 200813:02#160
steps
ну это мое собственно мнение возможно оно не правильное.
Есть лекция в сообществах http://www.gamedev.ru/community/gamedev_lecture/articles/?id=7
там рассказывается про это в самом начале.
>Ну и ктстати сколько лет этому документу :)))
это возможно не важно, увеличилась мощность видеокарт увеличился объем геометрии и сложность и загруженность сцен, отсюда число вызовов отрисовки API.
Я не думаю что Oblivion переписанный на OpenGL будет летать только из-за того что там glDrawElements быстрей IDirect3DDevice9::DrawIndexedPrimitive
Выбор графического API25 мар. 200812:27#157
steps
проверки на установку шейдеров проверка формата вершин и т.д.
>И какой документ делает такие классыне сравнения, уж не от M$ ли ? Вера их доументам ноль в лучшем случае.
http://developer.nvidia.com/docs/IO/8230/BatchBatchBatch.pdf
Выбор графического API25 мар. 200812:08#155
steps
>Дело в том, что в D3D (кроме 10-й версии) операция DIP очень дорогая и больше нескольких сотен таких опеарций за кадр просто нереально.
зато сразу в отладке будут все ошибки что совершил программист как раз и в шейдерах неверных вершинных декларациях. т.к. проверка происходит в момент вызова IDirect3DDevice9::DrawIndexedPrimitive, а в OpenGL ошибку проверять нужно на каждой функции что затруднит отладку и поддержку. поэтому там и возможно дешевле glDrawElements
Cмелю заметить что при достаточно сложных и загруженных сценах цены вызовов IDirect3DDevice9::DrawIndexedPrimitive и glDrawElements выравниваются(есть графики в одном из документов который вы 100% видели).
И тут как раз инстансинг может дать прирост, который в Direct3D работает на ATI и nVidia. Аналогичное расширение пока доступно на nVidia
и то имеет статус EXT. И когда оно станет доступно еще не известно. Мне нравится OpenGL но факты есть факты.
>И то и то в OpenGL есть и отлично работает.
где? только на nVidia ?
Порталы,Octree и CSG21 мар. 200821:10#4
Matisse
ну Octree тогда поможет для оптимизированной отрисовки геометрии внутри сектора(я так понимаю он может быть большим и там сотни тысяч полигонов).
вроде проблем никаких не вижу.
Порталы,Octree и CSG21 мар. 200820:53#2
Matisse
а что ты понимаешь под сектором?
GPU Gems 320 мар. 200811:49#4
Не сожмешь ничем, последний WinRar и 7z не ужали :)
GPU Gems 320 мар. 200811:16#1
megacoder
Спасибо! ща закачаем
OpenGL - работа с матрицами19 мар. 200820:09#1
aRpi
float matr[16];
glGetFloatv(GL_MODELVIEW_MATRIX, matr);
glGetFloatv(GL_PROJECTION_MATRIX, matr);
Проблема спользования шейдерных моделий версии 319 мар. 200811:24#7
Architector
>Но почему то у меня нет такой штуки... Ее надо как-то отдельно устанавливать?
это только в Visual C++ 2003
дальше пост 5, по поводу отладки.

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

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