[Учебник]3D Рендер. Версия - 1.6.4.

1,990
18
105
А ещё по-хорошему было бы выкинуть нафиг всю deprecated-ную функциональщину и перейти на VBO. Тем более, что с 1.8 используется как раз эта модель данных.
А эти ваши display-listы недалеко от immediate mode ушли.
 

svk

1,185
2
GloomyFolken написал(а):
svk написал(а):
Так поможете?
Подскажите как это сделать? С чего начать?

1) Прикрутить использование dispay list'ов к загрузчику форджа. Плюсы такого решения: не надо париться с текстурами и степень отвратительности кода в итоге будет ниже. Минусы: нужно немного разобраться с openGL и нужно либо модифицировать фордж, либо копи-пастить оттуда код.
Проще, наверное, скопипастить себе форджевский лоадер и заменить оригинальный на свою модификацию (AdvancedModelLoader.registerModelHandler()). Потом нужно прикрутить использование дисплей листов. Работать они должны как-то так:
1) При загрузке меша создается и компилируется дисплей лист, его айди записывается в объект меша
Код:
GL11.glGenLists(1);
GL11.glNewList(this.displayListId, GL11.GL_COMPILE);
this.render();
GL11.glEndList();
2) А в render() как-нибудь так:
Код:
if (this.displayListId == 0){
  //содержимое GroupObject.render()
} else {
  GL11.glCallList(this.displayListId);
}
3) Еще хорошо после загрузки всех мешей в модели было бы очищать списки вершина, нормалей, текстурных координат (в WavefrontObject) и фейсов (в GroupObject), потому что все это добро занимает немало оперативки и содержит кучу объектов, которые замедляют сборщик мусора.
Так легко?)
[merge_posts_bbcode]Добавлено: 07.03.2015 10:28:31[/merge_posts_bbcode]

Oldestkon написал(а):
А ещё по-хорошему было бы выкинуть нафиг всю deprecated-ную функциональщину и перейти на VBO. Тем более, что с 1.8 используется как раз эта модель данных.
А эти ваши display-listы недалеко от immediate mode ушли.
Хм, то-есть я тупо могу скопипастить с 1.8. код, для решения этой задачки?

[merge_posts_bbcode]Добавлено: 07.03.2015 10:39:39[/merge_posts_bbcode]

GloomyFolken написал(а):
svk написал(а):
Так поможете?
Подскажите как это сделать? С чего начать?

1) Прикрутить использование dispay list'ов к загрузчику форджа. Плюсы такого решения: не надо париться с текстурами и степень отвратительности кода в итоге будет ниже. Минусы: нужно немного разобраться с openGL и нужно либо модифицировать фордж, либо копи-пастить оттуда код.
Проще, наверное, скопипастить себе форджевский лоадер и заменить оригинальный на свою модификацию (AdvancedModelLoader.registerModelHandler()). Потом нужно прикрутить использование дисплей листов. Работать они должны как-то так:
1) При загрузке меша создается и компилируется дисплей лист, его айди записывается в объект меша
Код:
GL11.glGenLists(1);
GL11.glNewList(this.displayListId, GL11.GL_COMPILE);
this.render();
GL11.glEndList();
2) А в render() как-нибудь так:
Код:
if (this.displayListId == 0){
  //содержимое GroupObject.render()
} else {
  GL11.glCallList(this.displayListId);
}
3) Еще хорошо после загрузки всех мешей в модели было бы очищать списки вершина, нормалей, текстурных координат (в WavefrontObject) и фейсов (в GroupObject), потому что все это добро занимает немало оперативки и содержит кучу объектов, которые замедляют сборщик мусора.
Слушай, раз всё так легко, можешь код дать?)
Нет, реально, я пока разберусь что такое меш, где он находиться и т.п. я состарюсь уже, а тебе минут 15 времени.
 
25
0
Не подскажите как сделать свой звук выстрела? Звук есть, я так понял что нужен .json файл где зареган мой звук, потом через него вписывать в код
Код:
par2World.playSoundAtEntity(par3EntityPlayer, "random.bow", 0.5F, 0.4F / (itemRand.nextFloat() * 0.4F + 0.8F));
 
808
3
124
Так у меня нет готового переделанного лоадера-рендера obj, меня не устраивает obj как формат :D

Извини, пилить за тебя твой мод не буду :p

По поводу использования VBO: это клевый способ хранить данные, но если шейдеры не используются, то дисплей листы намного уместнее. Прикрутить дисплей листы в разы быстрее. Да, они старые, но старое != плохое. По скорости работы они не уступают VBO, если не использовать индексирование вершин и так же мгновенно рендерятся, если количество треугольников измеряется тысячами. С индексированием должно быть быстрее, но разница даже в два раза роли не играет. Выигрыш в производительности от дисплей листов / VBO на современных видеокартах не меньше, чем в 10 раз.

Кстати, если использовать шейдеры и VBO, то лишнее время будет тратиться на установку шейдера, смену VBO и тому подобное. "Пустой" draw call из дисплей листа должен быть намного быстрее.
 
Сверху