Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.08.26;
Скачать: CL | DM;

Вниз

Большие сцены в OpenGL   Найти похожие ветки 

 
VitaWED   (2006-08-22 13:37) [0]

Доброго времени суток! Сейчас занимаюсь разработкой 3d сцен для больших участков территории (город целиком). Начал использовать под это дело OpenGL  2.0 и столкнулся с такой проблемой: сцена с большим числом полигонов не прорисовывается, получить картинку удается только при большом приближении. То бишь не получается красивое приближение/удаление/полет над городом, хотя ресурсов системы вроде достаточно. Вопрос: это такое ограничение OpenGL или мои кривые руки? И вообще,если не OpenGL, то какой инструмент порекомендуют уважаемые мастера под это дело?


 
DeadMeat ©   (2006-08-22 15:12) [1]

Вот не совсем впитал, что значит "не прорисовывается" в данном контексте. Чистый экран чтоли виден только?


 
@!!ex ©   (2006-08-22 15:38) [2]

Ерунда какая то......
OpenGL - это средсто рисования треугольников. Ни больше, ни меньше.
И ему плевать, сколько этих самых треугольников ты собираешся нарисовать.
Скрин давай.


 
RzCoDer ©   (2006-08-22 18:23) [3]

А если так:  
gluPerspective(60.0, Resolution.Width/Resolution.Height, -0.01, 99999999.0);
?


 
Chemodan   (2006-08-23 04:40) [4]

>gluPerspective(60.0, Resolution.Width/Resolution.Height, -0.01, 99999999.0);
Что такое -0.01? Этот параметр должен быть строго больше нуля!!!


 
XProger ©   (2006-08-23 05:59) [5]

Chemodan, понимаешь, человек не может сказать что-нибудь по делу, а сказать ведь надо... вот он и ненашёл ничего умнее тупого стеба над автором темы ;)


 
tButton ©   (2006-08-23 10:31) [6]


> сцена с большим числом полигонов не прорисовывается, получить
> картинку удается только при большом приближении

вот про это подробнее


 
RzCoDer ©   (2006-08-23 11:09) [7]

Chemodan, последние два параметра ограничивают область в которой ogl прорисовывает полигоны, -0.01 - ближняя стенка, не обязательно отрицательная, 99999999.0 - дальняя стенка, соответсвенно если объект от "камеры" будет дальше чем 99999999.0 то отрисовываться он не будет. Я так подумал что у тебя этот параметр может быть относительно небольшим при больших размерах сцены, по этому и не отрисовываестя.


> XProger ©   (23.08.06 05:59) [5]

Ты это про меня?


 
Zo   (2006-08-23 11:25) [8]

кстати, никогда не слышал что он должен быть сторго больше нуля


 
RzCoDer ©   (2006-08-23 11:49) [9]

Хм, я кстати тоже:
Вот цитата из редбук


> void gluPerspective (GLdouble fovy, GLdouble aspect, GLdouble
> near, GLdouble far);
>
>
> Создает матрицу для пирамиды симметричного перспективного
> вида и умножает на нее текущую матрицу. Параметр fovy задает
> угол визуального охвата в плоскости yz, его значение должно
> лежать в диапазоне [0.0, 180.0]. Параметр aspect – это отношение
> ширины пирамиды к ее высоте. Параметры near и far представляют
> дистанции от точки наблюдения до ближней и дальней плоскостей
> отсечения вдоль отрицательного направления оси z.

И ни слова про отрицательность


 
ancara ©   (2006-08-23 12:09) [10]

Вот цитата из RedBook:
void gluPerspective(GLdouble fovy, GLdouble aspect,
GLdouble near, GLdouble far);
Creates a matrix for a symmetric perspective-view frustum and multiplies the current matrix by it.
fovy is the angle of the field of view in the x-z plane; its value must be in the range [0.0,180.0].
aspect is the aspect ratio of the frustum, its width divided by its height. near and far values the
distances between the viewpoint and the clipping planes, along the negative z-axis. They should always be positive.

Русские доки - зло и попса! Даешь первоисточники! Гы-гы :))
По теме: действительно очень похоже, что дальняя плоскость отсечения не достаточно далеко. И если ее поставить на 100000, то ближнюю не обязательно на 0.0001, лучше на 1.0.  Z-буфер ведь не резиновый, 24 бита небось?


 
ancara ©   (2006-08-23 12:12) [11]

P.S. значения 0.0001 и 1.0 - это я образно, автору вопроса следует самому определить какие значения ему больше подходят.


 
VitaWED   (2006-08-23 14:22) [12]

Все точно. Разобрался. Спасиба всем.


 
Pa5ha   (2006-08-30 22:02) [13]

К слову ближняя плоскость отсечения должна быть все же больше нуля строго. Краснов в книге д3д так и говорит. В этом плане ОпенГЛ не должен отличаться от д3д. А при нуле з-буффер должен отключаться. В д3д отключается, проверял, в опенГЛ не проверял, поверил наслово :)


 
JohnJ   (2006-09-01 16:09) [14]

2RzCoDer
>>Параметры near и far представляют
>> дистанции от точки наблюдения до ближней и дальней плоскостей
>> отсечения вдоль отрицательного направления оси z.
>
>И ни слова про отрицательность

"дистанция от точки наблюдения" не может быть отрицательной, это заведомо положительное число.


 
НовичекОпенГЛ   (2006-09-21 10:20) [15]

У меня примерно тоже самое с 3-D городом. Все рисуется при отключенном буфере глубины с неверным наложением (по поряку рисования). Если включаю GL_DEPTH_TEST начинается всякая ерунда (хаотичные куски труегольников). Плоские объекты имеют Z=0, остальные пробовал и +Height и -Height - не помогает. Использую gluPerspective и gluLookAt. Видео карты разные, в т.ч. Geforce. ПОМОГИТЕ, Профессионалы 3D-графики !!! З.Ы. Краснова М. читал...


 
XProger ©   (2006-09-21 11:00) [16]

НовичекОпенГЛ, чему равны zNear, zFar и общий размер сцены?


 
НовичекОпенГЛ   (2006-09-21 14:00) [17]

Где-то в начале:
var  x0, y0, z0: GLFloat;

 x0 := 1.0;  // Начальная позиция глаза
 y0 := -8.0;
 z0 := -4.0;
 a := 97.0;  // Начальные углы
 b := +30.0;
...

procedure Tfm3D.FormResize(Sender: TObject);
begin
 glViewPort (0, 0, ClientWidth, ClientHeight);
 glMatrixMode(GL_PROJECTION);
 glLoadIdentity;
 gluPerspective(10.0, ClientWidth / ClientHeight, 0.0, 50.0);
 gluLookAt (
   x0, y0,  z0,
   x0+10*cos(a*pi/180),  y0+10*sin(a*pi/180),  z0+10*sin(b*pi/180),
   0, 0, 1);
 glMatrixMode(GL_MODELVIEW);
 glLoadIdentity;
 InvalidateRect(Handle, nil, False); // там прорисовка
end;

Координаты и габариты всех объектов нормализованы в кубик (-1,-1,-1) (1,1,1)

В проц-е прорисовки:
 glEnable (GL_DEPTH_TEST);
 ...
 glClear (GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);

Далее рисуются стены с помощью GL_QUADS, крыши с помощью gluTessBeginPolygon. Высота зданий отрицательная (примерно от 0 до -0.01).

Повторяю, без GL_DEPTH_TEST все рисуется нормально. glDepthFunc пробовал разные.


 
ancara ©   (2006-09-21 15:02) [18]

балин, тока ведь выше говорили, что в gluPerspective zNear должно быть больше нуля, а не ноль.


 
MeF Dei Corvi ©   (2006-09-21 16:28) [19]


> Русские доки - зло и попса! Даешь первоисточники! Гы-гы
> :))

Может просто версия русского дока старая? :) Хотя с точки зрения элементарной логики, отрицательного расстояния не бывает.


 
НовичекОпенГЛ   (2006-09-22 08:38) [20]

Всем ОГРОМНОЕ спасибо. Все наладилось! Очевидно, последние ответы читал уже через строку...



Страницы: 1 вся ветка

Текущий архив: 2007.08.26;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.04 c
15-1185869482
mutobor
2007-07-31 12:11
2007.08.26
проблемы при работе с БД


5-1158034357
demonnnn
2006-09-12 08:12
2007.08.26
события


15-1185470143
atruhin
2007-07-26 21:15
2007.08.26
Какой максимальный размер параметра реестра типа REG_SZ


2-1186051620
oleg__
2007-08-02 14:47
2007.08.26
Не загружается DLL


2-1186219361
AMD
2007-08-04 13:22
2007.08.26
Склеить формы.