Сообщения на форуме пользователя Andrey (91 стр.)
Проблемма с VBO (точнее OctTree из объектов) | 28 ноя. 2008 | 15:12 | #38 |
---|
Aut
>А когда тогда этот обход производить?
Вообще к примеру у меня у каждого объекта есть ссылка на узел где он находится. при изменении трансформации объекта, он у своего узла вызывает функцию которая при необходимости перемещает его в нужный узел, меняя таким образом дерево.
Обход происходит при обновлении камеры в этом случае, идет обход дерева и сбор видимых объектов. Перестроение дерева для динамических объектов и обход дерева для поиска видимых никак не связаны.
>А когда тогда этот обход производить?
Вообще к примеру у меня у каждого объекта есть ссылка на узел где он находится. при изменении трансформации объекта, он у своего узла вызывает функцию которая при необходимости перемещает его в нужный узел, меняя таким образом дерево.
Обход происходит при обновлении камеры в этом случае, идет обход дерева и сбор видимых объектов. Перестроение дерева для динамических объектов и обход дерева для поиска видимых никак не связаны.
Проблемма с VBO (точнее OctTree из объектов) | 28 ноя. 2008 | 9:56 | #36 |
---|
Aut
>Т.е. придется умножать матрицу на коорднаты каждой вершины (пойду смотреть учебник по высшей математике).
не в коем случае это не делай!!! умрет CPU речь идет о сотнях тысяч вершин для современных сцен. Делай трансформацию его локального бокса!
>В процессе рендеринга придется менять дерево.
не в процессе рендеринга, а в процессе обхода. Если не получится могу скинуть кусок кода. но советую разобраться самому.
>Т.е. придется умножать матрицу на коорднаты каждой вершины (пойду смотреть учебник по высшей математике).
не в коем случае это не делай!!! умрет CPU речь идет о сотнях тысяч вершин для современных сцен. Делай трансформацию его локального бокса!
>В процессе рендеринга придется менять дерево.
не в процессе рендеринга, а в процессе обхода. Если не получится могу скинуть кусок кода. но советую разобраться самому.
Проблемма с VBO (точнее OctTree из объектов) | 28 ноя. 2008 | 9:29 | #34 |
---|
Aut
>Просто я на мгновение подумал, что OpenGl сам это делает =)
делает. Но дополнительно:
1) драйвер Проверяет текстуру на валидность
2) Возможно сам проверяет совпадение идентификаторов
3) Есть вызов функции API
и того твой простейший if будет быстрей если речь идет о большом количестве смен текстур
>как быть с динамическими объектами?
после трансформации объекта проверяешь если его бокс вышел за границы бокса узла. пытаешься его засунуть в 1 из детей родителя данного узла.
Если не получилось то присоединяешь его к родителю по дереву. И так далее рекурсивно.
и обрати внимание на то что сказал sactemp.
>Просто я на мгновение подумал, что OpenGl сам это делает =)
делает. Но дополнительно:
1) драйвер Проверяет текстуру на валидность
2) Возможно сам проверяет совпадение идентификаторов
3) Есть вызов функции API
и того твой простейший if будет быстрей если речь идет о большом количестве смен текстур
>как быть с динамическими объектами?
после трансформации объекта проверяешь если его бокс вышел за границы бокса узла. пытаешься его засунуть в 1 из детей родителя данного узла.
Если не получилось то присоединяешь его к родителю по дереву. И так далее рекурсивно.
и обрати внимание на то что сказал sactemp.
аналог GL_SHORT в dx 9. | 26 ноя. 2008 | 23:28 | #5 |
---|
flaber
ну задавай соответствующий тип. В шейдере может произойти конвертация типов и лишние инструкции.
ну задавай соответствующий тип. В шейдере может произойти конвертация типов и лишние инструкции.
аналог GL_SHORT в dx 9. | 26 ноя. 2008 | 23:21 | #3 |
---|
flaber
ах вон ты про что.
через FVF не получится там только float. Скорей всего используй IDirect3DDevice9::CreateVertexDeclaration.
ах вон ты про что.
через FVF не получится там только float. Скорей всего используй IDirect3DDevice9::CreateVertexDeclaration.
OpenGL и низкоуровневые проблемы его программирования. Нужны хорошие теоретики. | 26 ноя. 2008 | 23:09 | #8 |
---|
HALz
перенеси тему в раздел графика, будет более заметна. Про тормоза скажу несколько вещей
итак передача констант в шейдера. Если смотреть на GLSL то там ка крути нельзя передать все константы за 1 вызов.
ну кто ввел такие ограничения что только через имя или id unifrorm ? ну почему на засласть со стартового регистра какое-то число констант? ведь в любом случае внутри видео карты есть регистры. Зачем это сделали в GLSL ?
Для GL_ARB_vertex_program/GL_ARB_fragment_program опять же передается максимум 4 float. Вот тут есть регистры только вот толку мало.В ситуации со скелетной анимацией,
когда нужно передавать 50 матриц с среднем да еще для десятков объектов это может ударить по производительности.
Для есть GL_ARB_vertex_program/GL_ARB_fragment_program решение проблемы через расширение GL_EXT_gpu_program_parameters
http://opengl.org/registry/specs/EXT/gpu_program_parameters.txt. Я вот думаю его опробовать.
как раз оно и говорит про улучшения скорости:
This extension provides a new set of procedures to load multiple
consecutive program environment parameters more efficiently, via a single
GL call instead of multiple calls. This will reduce the amount of CPU
overhead involved in loading parameters.
Как быть с GLSL я не знаю, для сравнения в Direct3D9/Direct3D10 все константы можно заслать за 1 вызов.
второе меня смущает что для использования текстур нужно вызывать 4 функции
glBindTexture
glActiveTexture
glClientTexture
ну и в случае glsl нужно еще и glUniform. Опять для сравнения в Direct3D9/Direct3D310 это 1 вызов.
Если в выше сказанном я ошибаюсь, поправьте.
Сразу Прошу не разводить холивар про графические API.
перенеси тему в раздел графика, будет более заметна. Про тормоза скажу несколько вещей
итак передача констант в шейдера. Если смотреть на GLSL то там ка крути нельзя передать все константы за 1 вызов.
ну кто ввел такие ограничения что только через имя или id unifrorm ? ну почему на засласть со стартового регистра какое-то число констант? ведь в любом случае внутри видео карты есть регистры. Зачем это сделали в GLSL ?
Для GL_ARB_vertex_program/GL_ARB_fragment_program опять же передается максимум 4 float. Вот тут есть регистры только вот толку мало.В ситуации со скелетной анимацией,
когда нужно передавать 50 матриц с среднем да еще для десятков объектов это может ударить по производительности.
Для есть GL_ARB_vertex_program/GL_ARB_fragment_program решение проблемы через расширение GL_EXT_gpu_program_parameters
http://opengl.org/registry/specs/EXT/gpu_program_parameters.txt. Я вот думаю его опробовать.
как раз оно и говорит про улучшения скорости:
This extension provides a new set of procedures to load multiple
consecutive program environment parameters more efficiently, via a single
GL call instead of multiple calls. This will reduce the amount of CPU
overhead involved in loading parameters.
Как быть с GLSL я не знаю, для сравнения в Direct3D9/Direct3D10 все константы можно заслать за 1 вызов.
второе меня смущает что для использования текстур нужно вызывать 4 функции
glBindTexture
glActiveTexture
glClientTexture
ну и в случае glsl нужно еще и glUniform. Опять для сравнения в Direct3D9/Direct3D310 это 1 вызов.
Если в выше сказанном я ошибаюсь, поправьте.
Сразу Прошу не разводить холивар про графические API.
аналог GL_SHORT в dx 9. | 26 ноя. 2008 | 22:44 | #1 |
---|
flaber
наверное имеется ввиду 3 параметр в функции glDrawElements для OpenGL. Аналог для Direct3D это 3 параметр в IDirect3DDevice9::CreateIndexBuffer, его значение D3DFMT_INDEX16. Объявление FVF и шейдеры к этому не имеет отношения.
наверное имеется ввиду 3 параметр в функции glDrawElements для OpenGL. Аналог для Direct3D это 3 параметр в IDirect3DDevice9::CreateIndexBuffer, его значение D3DFMT_INDEX16. Объявление FVF и шейдеры к этому не имеет отношения.
бесплатный комерческий cpp compiler для Windows | 26 ноя. 2008 | 19:17 | #11 |
---|
IROV..
mingw + Code Blocks ?
mingw + Code Blocks ?
Проблемма с VBO (точнее OctTree из объектов) | 26 ноя. 2008 | 17:09 | #26 |
---|
Aut
>Получается время потраченное на реализацию Quad-tree - было потрачено зря.
ты его неправильно написал тебе уже говорили что нужно объект присоединять при условии отсутствия пересечений с боксами узлов. и помечать его что он уже присоединен. Никаких других массивов.
Если я не ошибаюсь то AABBTree отличается от QuadTree/OctTree тем что его узлы не равны по размеру и построение не требует дробления на 4/8 равных частей.
>таким способом рендеринг нода находящегося выше по дереву не происходит.
что-то не пойму рендерить нужно начиная с корня. Тебе Excecutor вообще-то сказал про построение, а не про рендер
>Получается время потраченное на реализацию Quad-tree - было потрачено зря.
ты его неправильно написал тебе уже говорили что нужно объект присоединять при условии отсутствия пересечений с боксами узлов. и помечать его что он уже присоединен. Никаких других массивов.
Если я не ошибаюсь то AABBTree отличается от QuadTree/OctTree тем что его узлы не равны по размеру и построение не требует дробления на 4/8 равных частей.
>таким способом рендеринг нода находящегося выше по дереву не происходит.
что-то не пойму рендерить нужно начиная с корня. Тебе Excecutor вообще-то сказал про построение, а не про рендер
Проблемма с VBO (точнее OctTree из объектов) | 26 ноя. 2008 | 16:42 | #23 |
---|
st0ke
есть выход использовать типа AABBTree. вроде у него решена эта проблема.
есть выход использовать типа AABBTree. вроде у него решена эта проблема.
(const char*) to (char*) | 26 ноя. 2008 | 15:55 | #14 |
---|
Executor
конверсия скажется на производительности, возможно не сильно.
ну эта функция возвращает либо большое значение, либо в errno ошибка переполнения ERANGE, строковое сообщение об ошибке можно получить через strerror(errno).
конверсия скажется на производительности, возможно не сильно.
ну эта функция возвращает либо большое значение, либо в errno ошибка переполнения ERANGE, строковое сообщение об ошибке можно получить через strerror(errno).
(const char*) to (char*) | 26 ноя. 2008 | 15:28 | #8 |
---|
Executor
еще есть
strtod
она возвращает ошибку. stringstream полный тормоз. Ошибку если не ошибаюсь можно проверить через состояния потока но как не в курсах. Я особо в потоках не шарю. Еще кидает исключения, внутри вызывает sprintf для ввода.
>Я правильно делаю?
да
еще есть
strtod
она возвращает ошибку. stringstream полный тормоз. Ошибку если не ошибаюсь можно проверить через состояния потока но как не в курсах. Я особо в потоках не шарю. Еще кидает исключения, внутри вызывает sprintf для ввода.
>Я правильно делаю?
да
(const char*) to (char*) | 26 ноя. 2008 | 15:06 | #6 |
---|
Executor
где ты такую функцию нашел?
_atoflt(v, &str[0]);
Проблемма с VBO (точнее OctTree из объектов) | 26 ноя. 2008 | 15:03 | #17 |
---|
Aut
>был ли объект нарисован ранее
вообще объекты должны располагаться в узлах без пересечений. тогда они будут рисоваться точно 1 раз. нету нету необходимости в каких-то временных хранилищах
>приходится рыться в массиве
т.е. линейный поиcк ? а если речь идет о сотнях объектов? будем бегать по несколько раз за кадр массиву? оптимизация посредством иерархии как раз предполагает избавление от такого.
>был ли объект нарисован ранее
вообще объекты должны располагаться в узлах без пересечений. тогда они будут рисоваться точно 1 раз. нету нету необходимости в каких-то временных хранилищах
>приходится рыться в массиве
т.е. линейный поиcк ? а если речь идет о сотнях объектов? будем бегать по несколько раз за кадр массиву? оптимизация посредством иерархии как раз предполагает избавление от такого.
Проблемма с VBO (точнее OctTree из объектов) | 25 ноя. 2008 | 13:24 | #6 |
---|
Aut
>Ведь девево разбивается по треугольникам. и наверное рисуется так же.
нет. В листьях группы индексы полигонов принадлежащих 1 материалу. рендер идет этих групп причем патчами, но не в коем случае ПО 1 ТРЕУГОЛЬНИКУ.
>Вы мне скажите правильно ли я делаю, что использую объекты?
все от задачи зависит. дерево для полигонов для больших мешей, дерево объектов - для сцены
>Ведь девево разбивается по треугольникам. и наверное рисуется так же.
нет. В листьях группы индексы полигонов принадлежащих 1 материалу. рендер идет этих групп причем патчами, но не в коем случае ПО 1 ТРЕУГОЛЬНИКУ.
>Вы мне скажите правильно ли я делаю, что использую объекты?
все от задачи зависит. дерево для полигонов для больших мешей, дерево объектов - для сцены