Форум: "Игры";
Текущий архив: 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.089 c