forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   C++ (http://forum.boolean.name/forumdisplay.php?f=22)
-   -   OpenGl—Оптимизация для скорости и качества (http://forum.boolean.name/showthread.php?t=6056)

zheland 27.06.2008 13:15

OpenGl—Оптимизация для скорости и качества
 
OpenGl—Оптимизация для скорости и качества
Вот много вариантов рисования кубов,
Какой из них тратит меньше памяти, какой быстрее, какой когда применять?
(Если есть ещё варианты, тоже скажите чем отличаются.)
(Тут приведён простейший вариант, но хотелось-бы услышать какой вариант будет лучше в более крупных проектах.)
1(Рисование готовыми glut объектами):
Код:

//В главном цикле
glutSolidCube(10);

2(Самое обычное рисование):
Код:

//В главном цикле
glBegin(GL_QUADS);
  glVertex3b(0,0,0);
  glVertex3b(10,0,0);
  glVertex3b(10,10,0);
  glVertex3b(0,10,0);

  glVertex3b(0,0,10);
  glVertex3b(10,0,10);
  glVertex3b(10,10,10);
  glVertex3b(0,10,10);

  glVertex3b(0,0,0);
  glVertex3b(10,0,0);
  glVertex3b(10,0,10);
  glVertex3b(0,0,10);

  glVertex3b(0,10,0);
  glVertex3b(10,10,0);
  glVertex3b(10,10,10);
  glVertex3b(0,10,10);

  glVertex3b(0,0,0);
  glVertex3b(0,10,0);
  glVertex3b(0,10,10);
  glVertex3b(0,0,10);

  glVertex3b(10,0,0);
  glVertex3b(10,10,0);
  glVertex3b(10,10,10);
  glVertex3b(10,0,10);
glEnd();

3(Таблицы отображений):
Код:

//Перед главным циклом
glNewList(cube_list, GL_COMPLITE);
  glBegin(GL_QUADS);
  glVertex3b(0,0,0);
  glVertex3b(10,0,0);
  glVertex3b(10,10,0);
  glVertex3b(0,10,0);
  ...
  glEnd();
glEndList();
//В главном цикле
CallList(cube_list);

4(Массивы GLTVector):
Код:

//Перед главным циклом
GLTVector3 cube_list[24];
  cube_list[0][0]=(GLubyte)0;
  cube_list[0][1]=(GLubyte)0;
  cube_list[0][2]=(GLubyte)0;

  cube_list[0][0]=(GLubyte)10;
  cube_list[0][1]=(GLubyte)0;
  cube_list[0][2]=(GLubyte)0;
  ...
//В главном цикле
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(3,GL_UNSIGNED_BYTE,0,cube_list);
glDrawArrays(GL_QUADS,0,24);

5(Индексированные массивы):
Код:

//Перед главным циклом
GLubyte cube_list_pnt[]={0,10,10,  10,10,10,  10,0,10,      0,0,10  0,10,0,  10,10,0,  10,0,0  0,0,0};
GLubyte cube_list_ind[]={0,1,2,3,  4,5,1,0,  3,2,6,7,  5,4,7,6,  1,5,6,2,  4,0,3,7};
//В главном цикле
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(3,GL_UNSIGNED_BYTE,0,cube_list_pnt);
glDrawElements(GL_QUADS, 24,GL_UNSIGNED_BYTE,cube_list_ind);

p.s.:Возможно есть ошибки: исправьте.

HolyDel 27.06.2008 13:55

Ответ: OpenGl—Оптимизация для скорости и качества
 
1 - нафиг
2 - для кубиков сойдет, и для анимированных (повершинно) моделей тоже. ито можно через шейдер делать.
3 - нафиг
4,5 - тоже что и 2, только лучше

не написал самого главного - рендер из VBO. зачем постоянно гонять данные по шине? можно их записать в память видюхе и рисовать прям оттуда.

jimon 27.06.2008 14:03

Ответ: OpenGl—Оптимизация для скорости и качества
 
а можно чтобы .. к примеру геометрический шейдер рисовал кубик без никаких входящих данных ?

HolyDel 27.06.2008 14:10

Ответ: OpenGl—Оптимизация для скорости и качества
 
вроде можно. но точно не скажу.
триугольник нарисовать точно можно. входные данные... хз, наверно все же что то на вход подавать надо.

zheland 27.06.2008 14:11

Ответ: OpenGl—Оптимизация для скорости и качества
 
А можно всё-таки поподробнее про все режимы
И про рендер из VBO попоробнее.
(Надо учесть, что мне хочется создать игру с часто изменяющимся миром)
(Например: Дерево+Пулемёт=2 части дерева)
(Или: Стекло+1 пуля=Стекло с дыркой и расходящимися трещинами)
(Или: Стекло+20 пуль=Разлетащиеся осколки и остатки стекла по краям)
(Таблицы отображений наверно отпадают)

HolyDel 27.06.2008 14:30

Ответ: OpenGl—Оптимизация для скорости и качества
 
будеш менять модели.
т.е у тебя должна быть модель целого дерева и несколько моделей - частей етого дерева. трещины (и дырки) в стекле - делаются текстурой.

zheland 27.06.2008 15:55

Цитата:

Сообщение от HolyDel (Сообщение 81488)
будеш менять модели.
т.е у тебя должна быть модель целого дерева и несколько моделей - частей етого дерева.

Нет я хочу что-бы дерево ломамось именно там где сломали
Преставь сколько кусочков:дерево—20;ветка—10;
дерево и ветки — считай.
Потом зачем знать как выглядит разлом(лишняя память):
Нельзя-ли его сгенерировать самому когда надо.
А если стрелять постоянно оно разлетится на щепки.
А если кувалдой ударить по бочке:будет прогиб:как такой предугадать?

У меня будет свой формат моделей:
Под него будет подстроен мой движок;
Формат будет иметь физические свойства тела.
А так-же анимацию и.т.д..

dimanche13 27.06.2008 16:22

Ответ: OpenGl—Оптимизация для скорости и качества
 
Цитата:

Сообщение от drunnik (Сообщение 81491)
У меня будет свой формат моделей:
Под него будет подстроен мой движок;
Формат будет иметь физические свойства тела.
А так-же анимацию и.т.д..


У меня будет свой формат
У меня будет свой движок
У меня будет своя физика
У меня будет своя скилетная анимация
У меня будет своя игра для самого себя...

Не обижайся, это я просто так ворчу :crazy:

HolyDel 27.06.2008 16:30

Ответ: OpenGl—Оптимизация для скорости и качества
 
тут я бессилен что либо посоветовать )) на самом деле смотри - вот есть у тебя бочка - ее сетка должна хранится в видеопамяти. в момент изминения сетки (по ней ударили молотком) секту можно рисовать динамически, из системной памяти - когда бочка прекратила деформирвоаться - ее нужно опять отправить в видеопамять, чтобы она рисовалась оттуда.

zheland 27.06.2008 16:33

Ответ: OpenGl—Оптимизация для скорости и качества
 
Цитата:

Сообщение от dimanche13 (Сообщение 81492)

У меня будет свой формат
У меня будет свой движок
У меня будет своя физика
У меня будет своя скилетная анимация
У меня будет своя игра для самого себя...

Не обижайся, это я просто так ворчу :crazy:

И ты не обижайся:
Просто когда я увидел один формат я ужаснулся:
(Что-то вроде такого)
Цитата:

14006 12829 10877
27721 24600 900
Написано цифрами
Это можно было записать 12-байтами(Short), а здесь 35

zheland 27.06.2008 16:37

Ответ: OpenGl—Оптимизация для скорости и качества
 
Насчёт бочки:
сетки почти не будет: она будет генерироваться при ударе.
(Удалятся старые большие квадраты,
и на их месте новые точки итреугольнички)
Экономлю память

HolyDel 27.06.2008 16:37

Ответ: OpenGl—Оптимизация для скорости и качества
 
у меня так ))) загрузку сделать проще. только не шортами в флоатами.

jimon 27.06.2008 20:58

Ответ: OpenGl—Оптимизация для скорости и качества
 
drunnik
если хочешь свой формат с доп данными
то напиши к нему редактор с возможностью импортить
и експортить в разные форматы, иначе никто модельку не сможет
в него перевести :)

zheland 28.06.2008 01:38

Ответ: OpenGl—Оптимизация для скорости и качества
 
Цитата:

Сообщение от jimon (Сообщение 81498)
drunnik
если хочешь свой формат с доп данными
то напиши к нему редактор

Обязательно!
(мой формат—.zpk—ZhelezkaPak—
—как архив будет содержать различные данные)
Цитата:

Сообщение от jimon (Сообщение 81498)
с возможностью импортить
и експортить в разные форматы, иначе никто модельку не сможет
в него перевести :)

(почти)Всё я буду делать ручками.
(почти: некоторые вещи редактор будет генерировать сам:
самое простое—камни; но деревья тоже будет сам создавать)
Если моделька хорошая конечно поделюсь

zheland 28.06.2008 11:31

Ответ: OpenGl—Оптимизация для скорости и качества
 
А где достать новейший OpenGl?


Часовой пояс GMT +4, время: 01:59.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot