Elite Games - Свобода среди звезд!
.
ВНИМАНИЕ!
Наша конференция посвящена космической тематике и компьютерным играм.
Политические вопросы и происходящие в мире события в данный момент на нашем сайте не обсуждаются!

  » FAQ по OpenGL | страница 1
Конференция предназначена для общения пилотов. Для удобства она разделена на каналы, каждый из которых посвящен определенной игре. Пожалуйста, открывайте темы только в соответствующих каналах и после того, как убедитесь, что данный вопрос не обсуждался ранее.

Поиск | Правила конференции | Фотоальбом | Регистрация | Список пилотов | Профиль | Войти и проверить личные сообщения | Вход

   Страница 1 из 16
На страницу: 1, 2, 3 ... 14, 15, 16  След.    Перейти:   Все страницы
Поиск в этой теме:
Канал Игры Мечты: «FAQ по OpenGL»
Jurec
 348 EGP


Ведущий раздела
Рейтинг канала: 4(76)
Репутация: 102
Сообщения: 1441 Заблокирован
Откуда: Seattle
Зарегистрирован: 25.02.2006
Собсно, сабж.
Это вполне нормальное дополнение КИМ.
_________________
MOV topka, C++
    Добавлено: 10:54 02-05-2006   
Jurec
 348 EGP


Ведущий раздела
Рейтинг канала: 4(76)
Репутация: 102
Сообщения: 1441 Заблокирован
Откуда: Seattle
Зарегистрирован: 25.02.2006
Итак 1 вопрос - VBO

GL_ARB_vertex_buffer_object - расширение, поддерживаемое всеми современными видеокартами. Позволяет записывать данные об вершинах в память видеокарты, чем ускоряет работу на оочень много. По данным сайта gamedev дает прирост в 1000 раз (!!) на 6800.
http://www.gamedev.ru/terms/VBO

Итак, как вы рисуете объекты. Есть 3 способа.
1) самый медленный

Цитата:

glBegin(GL_TRIANGLES);
for i:=0 to count-1 do begin
glTexCoord2fv(@Texcoord[i]);
glNormal3fv(@Normal[i]);
glVertex3fv(@Vertex[i]);
end;
glEnd;


2)более быстрый
Идея такова - не давать карточке вершини "поштучно", а отправить сразу массивами
Цитата:

// разрешаем массивы
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glEnableClientState(GL_NORMAL_ARRAY);

// в элементе массива 2 значения (если у вас 3, то пишите 3)
// GL_FLOAT - тип данных (С++ float, Delphi single)
// 0 - у вас есть отдельно каждый массив, данные идут подрят
// @Texcoord[0]-указатель на первый элемент массива

glTexCoordPointer(2, GL_FLOAT, 0, @Texcoord[0]);
// у нормалей всегда 3 элемента, поэтому нас даже не спрашивают
glNormalPointer(GL_FLOAT, 0, @Normal[0]);
glVertexPointer(3, GL_FLOAT, 0, @Vertex[0]);

// рисование
// GL_TRIANGLES - то же что и в glBegin (GL_TRIANGLES -самый эффективный)
// Есть еще один массив Indx - массив индексов, служит для экономии памяти.
//Например вам нужно вывести вершины 1,2,3, потом 2, 3, 4. Без массива Indx вам нужно будет объявить 2,3 - дважды.
//А с помощью Indx пишите в нем так [1,2,3,2,3,4] и все.

// Count - кол-во элементов в Indx
// GL_UNSIGNED_INT - тип элементов в Indx (в Delphi - cardinal)
// @Indx[0] - указатель на первый элемент массива

glDrawElements(GL_TRIANGLES, Count, GL_UNSIGNED_INT, @Indx[0]);

// ВНИМАНИЕ! Даже если у вас в Indx все идет без повторений, это все равно быстрее, чем без массива Indx

// запрещаем массивы
glDisableClientState(GL_NORMAL_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glDisableClientState(GL_VERTEX_ARRAY);


Теперь вернемся к VBO.
Идея такова, вместо того чтоб брать данные об массивах с оперативки, нужно брать их из видяхи.

Делается так:
Цитата:

glBindBufferARB( GL_ARRAY_BUFFER_ARB, VBOpoints[1] );
glNormalPointer( GL_FLOAT, 0, nil );

glBindBufferARB( GL_ARRAY_BUFFER_ARB, VBOpoints[2] );
glTexCoordPointer( 2, GL_FLOAT, 0,nil );

glBindBufferARB( GL_ELEMENT_ARRAY_BUFFER_ARB, VBOpoints[3] );

glBindBufferARB( GL_ARRAY_BUFFER_ARB, VBOpoints[0] );
glVertexPointer( 3, GL_FLOAT, 0, nil );

glDrawElements(GL_TRIANGLES, Count, GL_UNSIGNED_INT, nil);
//glVertexPointer - последняя команда перед glDrawElements!! так быстрее


Видим появился массив VBOpoints.

Цитата:

// генерируем 4 имени под 4 массива
glGenBuffersARB( 4, @VBOpoints[0] );
// данные из Vertex (Count*12 --размер)
glBindBufferARB( GL_ARRAY_BUFFER_ARB, VBOpoints[0] );
glBufferDataARB( GL_ARRAY_BUFFER_ARB, Count*12, Vertex, GL_STATIC_DRAW_ARB );

// данные из texcoord (Count*12 --размер)
glBindBufferARB( GL_ARRAY_BUFFER_ARB, VBOpoints[1] );
glBufferDataARB( GL_ARRAY_BUFFER_ARB, Count*12, Normal, GL_STATIC_DRAW_ARB );

// данные из texcoord (Count*8 --размер)
glBindBufferARB( GL_ARRAY_BUFFER_ARB, VBOpoints[2] );
glBufferDataARB( GL_ARRAY_BUFFER_ARB, Count*8, texcoord, GL_STATIC_DRAW_ARB );

// данные из Indx (Count*4 --размер)
glBindBufferARB( GL_ELEMENT_ARRAY_BUFFER_ARB, VBOpoints[3] );
glBufferDataARB( GL_ELEMENT_ARRAY_BUFFER_ARB, Count*4, Indx, GL_STATIC_DRAW_ARB );

// чистим оперативку
SetLength(vertex,0);
SetLength(normal,0);
SetLength(texcoord,0);
SetLength(indx,0);


После завершения работы нужно почистить данные о VBO
Цитата:
glDeleteBuffersARB(4,@VBOpoints[0]);

Теперь рисование такое.
Полный код:


glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_NORMAL_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);

if JL_USE_VBO then begin
glBindBufferARB( GL_ARRAY_BUFFER_ARB, VBOpoints[1] );
glNormalPointer( GL_FLOAT, 0, nil );


glBindBufferARB( GL_ARRAY_BUFFER_ARB, VBOpoints[2] );
glTexCoordPointer( 2, GL_FLOAT, 0,nil );

glBindBufferARB( GL_ELEMENT_ARRAY_BUFFER_ARB, VBOpoints[3] );

glBindBufferARB( GL_ARRAY_BUFFER_ARB, VBOpoints[0] );
glVertexPointer( 3, GL_FLOAT, 0, nil );

glDrawElements(GL_TRIANGLES, Count, GL_UNSIGNED_INT, nil);
end else begin

glClientActiveTextureARB(GL_TEXTURE0_ARB);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glTexCoordPointer(2, GL_FLOAT, 0, @Texcoord[0]);
glClientActiveTextureARB(GL_TEXTURE1_ARB);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glTexCoordPointer(3, GL_FLOAT, 0, @Tangent[0]);
glClientActiveTextureARB(GL_TEXTURE2_ARB);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glTexCoordPointer(3, GL_FLOAT, 0, @Binormal[0]);


glNormalPointer(GL_FLOAT, 0, @Normal[0]);
glVertexPointer(3, GL_FLOAT, 0, @Vertex[0]);

glDrawElements(GL_TRIANGLES, Count, GL_UNSIGNED_INT, @Indx[0]);
end;

glDisableClientState(GL_NORMAL_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glClientActiveTextureARB(GL_TEXTURE1_ARB);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glClientActiveTextureARB(GL_TEXTURE2_ARB);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glDisableClientState(GL_VERTEX_ARRAY);

_________________
MOV topka, C++
    Добавлено: 11:25 02-05-2006   
Jurec
 348 EGP


Ведущий раздела
Рейтинг канала: 4(76)
Репутация: 102
Сообщения: 1441 Заблокирован
Откуда: Seattle
Зарегистрирован: 25.02.2006
Вопрос 2 - lens flares
1)
Код:

function JEngScene.ZTracePos(Pos):TDotVector3;
begin
var proj_,modl_:T16dArray;
    view_:TViewPortArray;
    da:single;
    px,py,pz,sz,winX,winY:double;
    in_vis:boolean;


gluProject ( px, py, pz, modl_, proj_, view_, @winX, @winY, @sz );

glReadPixels ( round(winX), round(winY), 1, 1,GL_DEPTH_COMPONENT, GL_FLOAT, @da );

  // in_vis:=(WinX>0)and(WinX<ENG_SCR_X)and
  //         (WinY>0)and(WinY<ENG_SCR_Y)and(da > sz);
   result:=dotVector3(winx,winy,sz);
end;


in_vis говорит виден ли источник света в сцене, например не перекрыт ли он какой-то геометрией. Но вызывать его надо после рисования 3Д сцены.

result содержит координаты экранные (px, py, pz - 3Д, а result - 2Д в экране. sz - глубина)

Теперь имея экранные координаты источника lens flares мы рисуем их.

Код:

FromPos2d:=Scene.ZTracePos(Pos);

 p.x:=(ENG_SCR_X-FromPos2d.X*2);
 p.y:=(ENG_SCR_Y-FromPos2d.Y*2);
  glEnable(GL_TEXTURE_2D);
  glDepthMask(0);
 for i:=0 to eng_max_Lens-1 do begin
  if Lenses[i].Tex<>'' then begin
   tex:=Scene.TexBuf.GetItem(Lenses[i].Tex,nil);

   glColor4fV(@Lenses[i].Col);

   if tex<>nil then tex^.Bind
               else begin
                Scene.TexBuf.AddFromFile(Lenses[i].Tex);
                render;
                exit;
               end;
   v:=dotVector2(FromPos2d.X+(p.x/Lenses[i].posi),
                 FromPos2d.Y+(p.y/Lenses[i].posi));

   DrawBill2D(v,lenses[i].size);
  end;
 end;
  glDepthMask(1);
  glDisable(GL_TEXTURE_2D);


от части это псевдокод, от части код из моего прошлого движка.
DrawBill2D - рисует в v текстурированый квадрат размером size.
Код:

procedure DrawBill2D(Pos:TDotVector2;size:double);
const texc:array [0..3] of TDotVector2=((x:0;y:0),(x:1;y:0),(x:0;y:1),(x:1;y:1));
var v:array [0..3] of TDotVector2;
begin
  v[0].x:=Pos.x-size;
  v[0].y:=Pos.y-size;
  v[1].x:=Pos.x+size;
  v[1].y:=Pos.y-size;
  v[2].x:=Pos.x-size;
  v[2].y:=Pos.y+size;
  v[3].x:=Pos.x+size;
  v[3].y:=Pos.y+size;

 glEnableClientState(GL_VERTEX_ARRAY);
  glVertexPointer(2, GL_FLOAT, 0, @v[0]);
 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
  glTexCoordPointer(2, GL_FLOAT, 0, @texc[0]);
  glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
 glDisableClientState(GL_TEXTURE_COORD_ARRAY);
 glDisableClientState(GL_VERTEX_ARRAY);
end;

_________________
MOV topka, C++
    Добавлено: 11:45 02-05-2006   
himem
 210 EGP


Репутация: 24
Сообщения: 343
Откуда: Дзержинск- Нижегородский
Зарегистрирован: 24.01.2004
Ай, малацо! Как обещал, красавчег!
ЗЫ А есть чёньть по облакам/воде? Мона шадеры! Реально облака сделать шарообразными кусками тумана? Наскока быстро буит?
_________________
-Что ты чувствуешь став богатым?
-Опустошенность.
-Да,ты подойдешь для Темного Колеса.Это точно!
    Добавлено: 12:24 02-05-2006   
Jurec
 348 EGP


Ведущий раздела
Рейтинг канала: 4(76)
Репутация: 102
Сообщения: 1441 Заблокирован
Откуда: Seattle
Зарегистрирован: 25.02.2006
Насчет облаков - не знаю, не было опыта, вообще генерируются шумами Перлина. Можно кучей спрайтов.

Шейдеры - тема. Что хотишь узнать?
_________________
MOV topka, C++
    Добавлено: 12:45 02-05-2006   
himem
 210 EGP


Репутация: 24
Сообщения: 343
Откуда: Дзержинск- Нижегородский
Зарегистрирован: 24.01.2004
Про облака видел дему японца какогото - именно шарами/элипсами тумана - тока без исходников и статья - ироглифы! Блин. Ух ты!.. У меня пока плоские - текстурами 2Д - вроде ничо - но када пересекаешь 10 км высоту - ужасть...
А про шадеры - море - вид сверху/под углом + из под воды + блики на дне - есть реально работаюший кусок?
_________________
-Что ты чувствуешь став богатым?
-Опустошенность.
-Да,ты подойдешь для Темного Колеса.Это точно!
    Добавлено: 12:54 02-05-2006   
Jurec
 348 EGP


Ведущий раздела
Рейтинг канала: 4(76)
Репутация: 102
Сообщения: 1441 Заблокирован
Откуда: Seattle
Зарегистрирован: 25.02.2006
himem :
вид сверху/под углом

не понял

himem :
из под воды

просто устанавливаешь туман, шейдеры не надо(разве что пост обработка)

himem :
блики на дне


мультитекстурирование. дно+текстура блика(анимированная)

шейдер поможет, разве что с генерацией блика, но ИМХО он хдесь не очень нужен
_________________
MOV topka, C++
    Добавлено: 12:59 02-05-2006   
himem
 210 EGP


Репутация: 24
Сообщения: 343
Откуда: Дзержинск- Нижегородский
Зарегистрирован: 24.01.2004
Ага... Р-канал... Попробвам...
Ну а всетаки - можно на лету менять мультитекстуры или по неск раз рендерить?
_________________
-Что ты чувствуешь став богатым?
-Опустошенность.
-Да,ты подойдешь для Темного Колеса.Это точно!
    Добавлено: 13:08 02-05-2006   
Jurec
 348 EGP


Ведущий раздела
Рейтинг канала: 4(76)
Репутация: 102
Сообщения: 1441 Заблокирован
Откуда: Seattle
Зарегистрирован: 25.02.2006
Да пожалуйса. В одном кадре биндиш одну текстуру на GL_TEXTURE1_ARB, в следующем кадре уже другую.
(ошибка: не по кадрам надо, а по секунам)
_________________
MOV topka, C++
    Добавлено: 13:12 02-05-2006   
Jurec
 348 EGP


Ведущий раздела
Рейтинг канала: 4(76)
Репутация: 102
Сообщения: 1441 Заблокирован
Откуда: Seattle
Зарегистрирован: 25.02.2006
На шейдерах делается следующее
вершинные:
- деформации
- скиннинг
- любое другое изменение вершин
- освещение повершинное

фрагментные:
- текстуринг (в том числе и мультитекстурирование)
- освещение попиксельное
- Фонг
- Блинн
- Любая другая модель освещения
- Бамп маппинг (то над чем я бьюсь третий день)
- искажения (от пламени)
- постобработка (фильтры, например)

АХ,ДА! Совсем забыл!
Для мультитекстурирования нужно еще выставить свойства текстуре.

Код:
glActiveTextureARB(GL_TEXTURE0_ARB);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, Texture0);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);

glActiveTextureARB(GL_TEXTURE1_ARB);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, Texture1);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_ADD);


http://www.gamedev.ru/articles/?id=20107 - тут все есть.

http://www.gamedev.ru/articles/?id=20002
_________________
MOV topka, C++
    Добавлено: 13:19 02-05-2006   
Vladimir Kladov
 218 EGP


Репутация: 84
Сообщения: 80
Откуда: Novosibirsk, Russia
Зарегистрирован: 11.04.2006
Скажите, а как звездное небо (не в смысле НЕБОсклон, а именно сферу со звездами вокруг нас) рисуете? Поделитесь. Попробовал в GL - накидал 20000 звезд на сферу большого радиуса, разбил списки по треугольным секторам, чтобы все сразу не выводить, точками - все замечательно. Но: 1. дрожат, перепрыгивая с пиксела на пиксел, если потихоньку вращать камеру вокгруг любой оси. 2. если включить SMOOTH_POINTS, тоже не очень-то мне понравилось. В первом варианте звезда выглядит звездой, все-таки, а во втором - надо подальше от экрана отодвигаться, чтобы она на звезду была похожа. 3. Пробовал текстуры - но видны даже геометрические искажения отдельных звезд к краю (отвратительно). Плюс некоторые тормоза. А ведь я еще не пробовал сделать туманности... Объясните, какая "техника" должна использоваться, чтобы небо было небом а не декорацией.
    Добавлено: 19:37 02-05-2006   
Digited
 271 EGP


Рейтинг канала: 4(99)
Репутация: 49
Сообщения: 932

Зарегистрирован: 24.08.2004
Собственный алгоритм отрисовки поинт-спрайтов, видимо - если не важна какая-либо особенная структура взаиморасположения всех звезд...
Закрашиваете черненьким, а сверху в нужной консистенции разнокалиберными.
В этом плане интересна реализация движения и остановки камеры в IW2 - там большая часть звезд как фильтр при неподвижности камеры. Хотите "живого" - можно как-то так.
    Добавлено: 19:47 02-05-2006   
Jurec
 348 EGP


Ведущий раздела
Рейтинг канала: 4(76)
Репутация: 102
Сообщения: 1441 Заблокирован
Откуда: Seattle
Зарегистрирован: 25.02.2006
Ух ты!..
Ну вначале, РЕСПЕКТ за Новосибирку...
Пока я приходил в себя мне в голову взбрели следующие мысли:

Первый вариант - вариант из Homeplanet, самый нормальный, так вот, чтоб звезды не перескакивали им надо увеличить размер.

glPointSize(1.2); ну, например...

Третий, нужно правильно тектурные координаты задавать и делать текстуру у которой по краям черный цвет с значением RGB (0,0,0).

Vladimir Kladov :
разбил списки по треугольным секторам, чтобы все сразу не выводить

Это как? Поясни...
_________________
MOV topka, C++
    Добавлено: 19:52 02-05-2006   
Vladimir Kladov
 218 EGP


Репутация: 84
Сообщения: 80
Откуда: Novosibirsk, Russia
Зарегистрирован: 11.04.2006
2Digited: как это не важна. Даже допустим не все небо из реальных звезд, но расположение их обязательно должно быть одинаковым.

2Jurec: glPointSize на моем ноутбуке не катит (сначала думал что у меня в коде что-то не то. Пришел на работу, запускаю экзешник: а там 1. работает SMOOTH 2. Работает glPointSize. Вот вам и инвариантность OpenGL Расстроен ). Увеличивать размер очень не хочется. HomePlanet запускал. Выглядит там красиво, но звезд мне показалось маловато. (Однажды году в 98 был я на даче в августе и наблюдал около часа ночи настоящее небо. Были видны сразу тысячи звезд, были даже видны туманности, звезды были разноцветные, но все они были безразмерные, т.е. точками, никакими не пятнышками. Я тогда подумал, что примерно так звездное небо должно выглядеть и из космоса). Размер звезд ровно 1 пиксел делает звезду и впрямь очень похожей на звезду (причем неважно, на ЭЛТ или TFT). Яркость лучше регулировать RGB. Возникает проблема с туманностями. Точки-пикселы надо как-то одновременно показывать с текстурными фрагментами, и чтобы при движении камеры не получалось так, что звезды движутся сквозь туманности, при искажениях на краю. Вообще, от искажений на краях лучше было бы как-то вообще отказаться. По крайней мере для звезд. Но не знаю пока как. (т.е. алгоритм мне в голову приходил: бить видимую часть на квадраты, ставить камеру в центр квадрата, рисовать на битмапе в памяти эти звезды - искажение будет минимальное, потом квадрат рисовать по glDrawPixels. Но на этой функции пока обнаружил непреносимые тормоза, не говоря уже о проблемах точного позиционирования в glPixelPos). Может, надо показывать звезды в ортогональной проекции. Но тогда придется софтверно (своим кодом) рассчитывать координаты всех звезд. Может быть есть возможность рисовать в дополнительных буферах карты, и тогда тормоза уйдут. Но не уверен: 1. что это возможно 2. что это будет возможно на всех видеокартах 3. что это уйдет тормоза.

Треугольные сектора - это просто. Приближаю сферу неба треугольниками, камера всегда в центре этой сферы. Для определения того, какие треугольники попали в область видимости, вызываю отрисовку в режиме glRenderingMode( GL_SELECT..., получаю список треугольников. Когда изначально генерится (пока генерится, потом можно загружать) список звезд, для каждой (своим кодом) вычисляется, в какой треугольник она попадает, для треугольника составляется список звезд. (На самом деле, звезду приходится привязывать не к одному треугольнику, а к нескольким, иначе на краях некоторые звезды странным образом появляются не сразу - но это возможно проблема в различии моего алгоритма расчета координат и того, что в GL/видеокарте). Т.е. весь смысл этой канители - сократить список звезд, которые надо просчитывать в кадре, в несколько раз, даже не считать те, что однозначно не попадут на экран - сразу. Могу дать экзешничек на просмотр, всего 30К с хвостиком (Delphi+KOL). Если очень-очень хочется, могу и исходник дать. Он пока что без особого наполнения.

Вообще-то после недели мытарств с OpenGL я решил попробовать отойти на время и посмотреть в сторону D3D. В доках по нему мне очень нравится что уже есть намек на то, как сделать, чтобы было быстрей. Для OpenGL такого нет. Сначала приходится делать код, потом доводить его до рабочего состояние (вспоминая все маты которые знаю), а потом обнаруживать, что это тормозит, и надо делать как-то еще иначе. (Кстати, насчет ARB: у меня видюха XGI, совсем не NVidia - это раз. Хотя и поддержиает шейдеры. VOB'sы точно не покатят. По-моему в соседней ветке затрагивалось, что ARB нужны для хранения массивов в буфере видюхи, так это по-моему и без ARB реализуется, если используются вызываемые списки. Иначе я не представляю, почему количество точек для представления звезд практически никак не влияет на производительность. Пока они списком рендерятся).

Мини-текстурки для звезд это может и неплохо. Пока звед немного. Не знаю (но догадываюсь) какие будут тормоза для сотен (если только для ярких так делать) звезд - в GL.
    Добавлено: 20:46 02-05-2006   
Jurec
 348 EGP


Ведущий раздела
Рейтинг канала: 4(76)
Репутация: 102
Сообщения: 1441 Заблокирован
Откуда: Seattle
Зарегистрирован: 25.02.2006
Vladimir Kladov :
glPointSize на моем ноутбуке не катит

Тогда рисуй по несколько точек рядом, чтоб они сливались в одну.

Vladimir Kladov :
Для определения того, какие треугольники попали в область видимости, вызываю отрисовку в режиме glRenderingMode( GL_SELECT..., получаю список треугольников. Когда изначально генерится (пока генерится, потом можно загружать) список звезд, для каждой (своим кодом) вычисляется, в какой треугольник она попадает, для треугольника составляется список звезд.


Очень странный вариант...
По моему не нужно проверять такие объекты как звезды на попадание в кадр, это будет намного быстрее. 20000 точек по 1 пикселю - по моему это не нагрузка на систему.

Vladimir Kladov :
Вообще-то после недели мытарств с OpenGL я решил попробовать отойти на время и посмотреть в сторону D3D


Да, у тебя мытарства еще те... Очень прошу, одумайся, Директ это зло. Гы-гы

Vladimir Kladov :
По-моему в соседней ветке затрагивалось, что ARB нужны для хранения массивов в буфере видюхи, так это по-моему и без ARB реализуется, если используются вызываемые списки. Иначе я не представляю, почему количество точек для представления звезд практически никак не влияет на производительность. Пока они списком рендерятся).


Списки нужны, чтоб не повторять вычисления которые уже были сделаны, и списки по-моему хранятся в оперативке, а не в видеопамяти...

Vladimir Kladov :
Мини-текстурки для звезд это может и неплохо. Пока звед немного. Не знаю (но догадываюсь) какие будут тормоза для сотен (если только для ярких так делать) звезд - в GL.

Ну может на ноутбуке и будет, но на обычном компе все буит ОК..

Может скоро смастрячу демку по этому поводу...
_________________
MOV topka, C++
    Добавлено: 21:23 02-05-2006   
Sh.Tac.
 151 EGP


Рейтинг канала: 5(108)
Репутация: 14
Сообщения: 1426

Зарегистрирован: 27.07.2005
Vladimir Kladov :
Может, надо показывать звезды в ортогональной проекции. Но тогда придется софтверно (своим кодом) рассчитывать координаты всех звезд.


При ортогональной проекции в углах будут искажения другого рода, зрительно даже более неприятные, дело в том, что если вы будете рисовать ортопроекцию фиксированного диаметра, то на краях "поплывут" линейные размеры между звёздами, там надо вытягивать проекцию в эллипс, зависит от FOV

Vladimir Kladov :
Может быть есть возможность рисовать в дополнительных буферах карты, и тогда тормоза уйдут.


P-buffer для звёздного неба можно попробовать, вопрос в том, что для рисовки планет тож было бы неплохо использовать фоновый рендеринг в тот же P-buffer Улыбка

Vladimir Kladov :
Мини-текстурки для звезд это может и неплохо. Пока звед немного. Не знаю (но догадываюсь) какие будут тормоза для сотен (если только для ярких так делать) звезд - в GL.


Вообще-то скайбокс с текстурками, - самое оно, надо тока решить в какой момент его пересчитывать
_________________
This is what you get ...
(c) Radiohead
    Добавлено: 21:43 02-05-2006   
Jurec
 348 EGP


Ведущий раздела
Рейтинг канала: 4(76)
Репутация: 102
Сообщения: 1441 Заблокирован
Откуда: Seattle
Зарегистрирован: 25.02.2006
Sh.Tac. :
P-buffer для звёздного неба можно попробовать, вопрос в том, что для рисовки планет тож было бы неплохо использовать фоновый рендеринг в тот же P-buffer


Ого, для такой цели тратиться на Р-буфер... ого, еще раз.
Ну, это явно не на всех картах пойдет.

__
А скайбоксы явно не пойдут, т.к. нужны именно звезды (или я не прав)
_________________
MOV topka, C++
    Добавлено: 21:48 02-05-2006   
L'osheg
 1080 EGP


Модератор
Рейтинг канала: 1(6)
Репутация: 227
Сообщения: 6068 Предупреждений: 1
Откуда: Texasкие мы...
Зарегистрирован: 25.04.2003
himem :
У меня пока плоские - текстурами 2Д - вроде ничо - но када пересекаешь 10 км высоту - ужасть...

Намана. Тока надо делать "два слоя" один на ~5-6 км, а второй на ~10-15, нулевой толщины. Пока сквозь облака падаешь оны выглядят как "серое нифига" (т.е. при подходе к высоте облачного слоя опасити в "полный ноль видимости" и "идите по приборам"...)
_________________
Тооолстый тролль с нулевой кривизной дна
    Добавлено: 22:04 02-05-2006   
himem
 210 EGP


Репутация: 24
Сообщения: 343
Откуда: Дзержинск- Нижегородский
Зарегистрирован: 24.01.2004
Абалдеть! Какие люди тута бывают! Респект за 2 и 3 части! Егопка! Супер! (имхо - 75 (50+25) мало Расстроен )

Поповоду неба - у мя реализовано именно через прстую отрисовку точек... Это ужасно (как выше говорили), на вот как сделано в Celestia - это супер ( не привожу ввиду большого куска - исходники общедоступны http://www.shatters.net/celestia/ ). Вот там действительно реальные звезды. Думаю - это использовать...

кто такой "поповод неба"? Подозрение.Гы-гы
NRG

_________________
-Что ты чувствуешь став богатым?
-Опустошенность.
-Да,ты подойдешь для Темного Колеса.Это точно!
    Добавлено: 22:05 02-05-2006   
Jurec
 348 EGP


Ведущий раздела
Рейтинг канала: 4(76)
Репутация: 102
Сообщения: 1441 Заблокирован
Откуда: Seattle
Зарегистрирован: 25.02.2006
Облака - просто набор спрайтов(биллбоардов), стоящих рядом.
_________________
MOV topka, C++
    Добавлено: 22:08 02-05-2006   
Канал Игры Мечты: «FAQ по OpenGL»
На страницу: 1, 2, 3 ... 14, 15, 16  След.    Перейти:   Все страницы
  
Показать: 
Предыдущая тема | Следующая тема |
К списку каналов | Наверх страницы
Цитата не в тему: Рожденный ползать - уйди со взлетной полосы!

  » FAQ по OpenGL | страница 1
Каналы: Новости | Elite | Elite: Dangerous | Freelancer | Star Citizen | X-Tension/X-BTF | X2: The Threat | X3: Reunion | X3: Terran Conflict | X Rebirth | X4: Foundations | EVE Online | Orbiter | Kerbal Space Program | Evochron | VoidExpanse | Космические Миры | Онлайновые игры | Другие игры | Цифровая дистрибуция | play.elite-games.ru | ЗВ 2: Гражданская война | Творчество | Железо | Игра Мечты | Сайт
   Дизайн Elite Games V5 beta.18