Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 2007.08.26;
Скачать: [xml.tar.bz2];

Вниз

Большие сцены в 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.06 c
2-1185790407
Юра
2007-07-30 14:13
2007.08.26
Рисование движущегося прямоугольника


15-1185303927
arnage
2007-07-24 23:05
2007.08.26
АРхиватор


4-1173117533
Альберт
2007-03-05 20:58
2007.08.26
почему не обновляется окно?


15-1185527097
TruePunk
2007-07-27 13:04
2007.08.26
крестики


8-1164108426
Igor_thief
2006-11-21 14:27
2007.08.26
GIF через OLE





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский