Войти
ПрограммированиеФорумГрафика

Как правильно хранить обект меш геометрии для Оптимизации ?

#0
(Правка: 9 дек. 2018, 21:44) 21:55, 8 дек. 2018

Как само ефиктивно реализовать класс меш геометрии, так чтоб как можно эфиктивней , и как можно быстрее работала программа.!?

Варянт : 1

+ Показать

Варянт : 2

+ Показать

Варянт : 3

+ Показать


Скажите как мне лутше всего хранить даные для геометрии, чтоб как можно быстрей видилялась память, и как можно бистрей имееть доступ к даным геометрии с минимальной нагрузкой на ЦП...? Кароче как написать как можно оптимизированей меш геометрию?
И вообще дайте какое-то советы по этой теме.  Интересно всё...?

P.S: Надо ли мене std::vector  заминить на свой опитимизорованый быстрый менеджер памяти с своим пулом, для того чтоб программа работала быстрей ?


#1
22:17, 8 дек. 2018

werasaimon
> P.S: Надо ли мене std::vector  заминить на свой опитимизорованый быстрый
> менеджер памяти с своим пулом, для того чтоб программа работала быстрей ?
если у тебя все меши одинаковые и будут удаляться и создаваться за кадр по 500 раз то надо!

#2
22:24, 8 дек. 2018

werasaimon
> так чтоб как можно эфиктивней
эффективней для каких задач?

#3
(Правка: 0:02) 0:02, 9 дек. 2018

Mira
> если у тебя все меши одинаковые и будут удаляться и создаваться за кадр по 500
> раз то надо!
Да будут ! потому что после каждой операции над мешом я сохраняю его копию , для того чтоб next prev в программе !


/A\
> эффективней для каких задач?
нахождения края , заглаживания , быстрой инициализации геометрии сферы  , цилиндра и,т,д .
Сохранения - Удаления - Копирования Меша,
Короче говоря для всех тех операций с геометрией что можно делать в 3DS-MAX . Blender , Cinema4D ....

#4
0:21, 9 дек. 2018

werasaimon
Ну в общем, если тебе нужен доступ только к позиции, то выносишь позицию в отдельный массив, это лучше для кэша.

#5
0:48, 9 дек. 2018

werasaimon
> Да будут ! потому что после каждой операции над мешом я сохраняю его копию ,
> для того чтоб next prev в программе !
не надо тут пул
изменения меша у тебя не 500 раз в секунду будут, да и данные не однородные раз изменяются.
если будешь сохранять изменния 500 раз в сек у тебя память кончится после пары проведений мышкой)

#6
2:00, 9 дек. 2018

werasaimon
чувак, устройся уже на работу :D

#7
(Правка: 2:41) 2:38, 9 дек. 2018

werasaimon
На самом деле наружу достаточно предоставить интерфейс с индексатором, типа:

interface IVertex {};
interface ICommonVertex: IVertex {
  vec3 Position { get; }
  ...
}

interface IMesh<Vertex> {
  Vertex& operator[] (uint index);
}
А внутри держать все в сырых массивах байтов:
class MeshImplementation: IMesh<VertexImplementation> {
  vector<byte> bytes;
  
  VertexImplementation& operator[] (uint index);
}
Чтобы логика могла работать с нормальными структурами данных и не было лишних затрат на конвертацию/хранение данных.
Да, я знаю что это не совсем С++ код.
#8
(Правка: 21:45) 21:36, 9 дек. 2018

itmanager85
> чувак, устройся уже на работу :D
ЧтооО "WTF" !? Ну вот как , ну вот как , объясните каааак можно было прийти к такому вывводу в этом трейде, где стоял вопрос про геометрию?
Я так понимаю пишешь коментарии только ради чтоб написать всякое.  Обясни мне в чем смысл!?

#9
(Правка: 21:49) 21:37, 9 дек. 2018

Great V.
А что делает оператор interface?

/A\
> Ну в общем, если тебе нужен доступ только к позиции, то выносишь позицию в
> отдельный массив, это лучше для кэша.
> Mira
А если мне нужен доступ к позиции, нормали, текстурных координат. и.т.д  То мне лутше хранить всё отдельных массивах
, причём так как в первом варянте кода ?


Mira
> если будешь сохранять изменния 500 раз в сек у тебя память кончится после пары
> проведений мышкой)
Я удаляю данные с хвоста. Я храню только 50-100.шагов для next prev !

#10
0:15, 10 дек. 2018

werasaimon
> А что делает оператор interface?
Считай это псевдокодом, а не чистым С++.
Мне лень реализовывать интерфейсы и геттеры штатными средствами С++, потому я надеюсь на твое знание C#.

ПрограммированиеФорумГрафика