Система координат и примитивы OpenGL |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
Система координат и примитивы OpenGL |
mitz |
14.10.2010 13:46
Сообщение
#1
|
Новичок Группа: Пользователи Сообщений: 48 Пол: Мужской Репутация: 0 |
В общем, нужно отобразить простую геометрическую фигуру в пределах нормализованного объема видимости.
Нужно нарисовать пятиугольник с двумя диагоналями, используя геометрические примитивы: треугольник (GL_TRIANGLES) и отрезок (GL_LINES), а также использовать: Команды инициализации: auxInitWindowPosition, auxInitWindowSize, glutInitWindowPosition, glutInitWindowSize. Команды настройки цветов фона и изображения: glClearColor, glClear, glColor. Команды рисования геометрических примитивов: glVertex, glBegin – glEnd. Команды задания стиля вычерчивания: glLineWidth, glEnable(GL_LINE_SMOOTH), glEnable(GL_POINT_SMOOTH). |
TarasBer |
14.10.2010 15:33
Сообщение
#2
|
Злостный любитель Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
Документация по OpenGL для Delphi есть?
Если нет, то http://www.google.com/search?client=opera&...=utf-8&oe=utf-8 По первой же ссылке какой-то архив есть, я не поверял, но книгу знаю, к ней примеры прилигаются (я эту книгу покупал в бумажном варианте, примеры прилагались на дискете). -------------------- |
mitz |
19.10.2010 17:19
Сообщение
#3
|
Новичок Группа: Пользователи Сообщений: 48 Пол: Мужской Репутация: 0 |
Документация по OpenGL для Delphi есть? Если нет, то [ссылка]. По первой же ссылке какой-то архив есть, я не поверял, но книгу знаю, к ней примеры прилигаются (я эту книгу покупал в бумажном варианте, примеры прилагались на дискете). Спасибо, посмотрю, что там Насчёт документации: до этого не было. |
mitz |
19.10.2010 21:08
Сообщение
#4
|
Новичок Группа: Пользователи Сообщений: 48 Пол: Мужской Репутация: 0 |
В общем, программу я сделал, только подскажите, пожалуйста, как закрасить полученный пятиугольник, а также немного повернуть его, чтобы он стоял ровно в центре, без наклона.
Вот код: unit Unit1; |
TarasBer |
20.10.2010 9:34
Сообщение
#5
|
Злостный любитель Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
А почему 4 точки задаются?
-------------------- |
mitz |
21.10.2010 20:39
Сообщение
#6
|
Новичок Группа: Пользователи Сообщений: 48 Пол: Мужской Репутация: 0 |
А почему 4 точки задаются? Просто у меня при задании 4 точек почему-то получается не пятиугольник, а шестиугольник... Насчёт процедуры POLYGONE - почему-то при её задании и вписании (замены TRIANGLE или вписании до/после него) кода, описанного выше, получается такой же результат, что был и до этого... |
mitz |
21.10.2010 23:57
Сообщение
#7
|
Новичок Группа: Пользователи Сообщений: 48 Пол: Мужской Репутация: 0 |
Ну вот, что-то сделал вроде этого, получилось вроде (используя при этом Polygon):
unit Unit1; |
TarasBer |
22.10.2010 9:44
Сообщение
#8
|
Злостный любитель Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
А, я проглядел лишнее glVertex2f (0, 0);
-------------------- |
TarasBer |
22.10.2010 11:36
Сообщение
#9
|
Злостный любитель Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
Да, нулевая вершина в начале нужна, если через fan (я эту команду просто не знаю). Вроде, оптимальнее считается через gl_triangle_strip. Ну в общем, по этой картинке разберись. -------------------- |
mitz |
4.11.2010 22:22
Сообщение
#10
|
Новичок Группа: Пользователи Сообщений: 48 Пол: Мужской Репутация: 0 |
TarasBer, спасибо за помощь!
Вот я нарисовал этот пятиугольник с двумя диагоналями: unit Unit1; Ещё в моём задании указывалось: Задать координату z одной из вершин равной +0.5, затем -0.5. Объяснить наблюдаемый эффект. Задать координату z одной из вершин равной +5, затем -5. Объяснить наблюдаемый эффект. Помогите, пожалуйста, с выше заданным мною вопросом - т.е. помогите сформулировать ответ. |
TarasBer |
4.11.2010 22:38
Сообщение
#11
|
Злостный любитель Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
А какой эффект наблюдается? То, что отсекается часть, вылезающая за плоскость Z=0?
-------------------- |
mitz |
4.11.2010 22:51
Сообщение
#12
|
Новичок Группа: Пользователи Сообщений: 48 Пол: Мужской Репутация: 0 |
А какой эффект наблюдается? То, что отсекается часть, вылезающая за плоскость Z=0? Да, там так получается, но почему-то когда z=2 и более, а что минус, что плюс, всё одинаково отсекается - и отсекается из-за того, что просто выходит за Z или как-то проектируется точка на него, принимая значение координаты Z? И здесь правосторонняя или левосторонняя (я полагаю, что левосторонняя) система координат используется? |
TarasBer |
4.11.2010 22:59
Сообщение
#13
|
Злостный любитель Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
> И здесь правосторонняя или левосторонняя (я полагаю, что левосторонняя) система координат используется?
Пока без разницы, это только для односторонних полигонов имеет значение. > но почему-то когда z=2 и более, а что минус, что плюс, всё одинаково отсекается Не, отсечка, когда z по модулю больше 1. Просто по умолчанию ближняя плоскость отсечения - z=-1, а дальняя - z=1 -------------------- |
mitz |
5.11.2010 0:24
Сообщение
#14
|
Новичок Группа: Пользователи Сообщений: 48 Пол: Мужской Репутация: 0 |
> И здесь правосторонняя или левосторонняя (я полагаю, что левосторонняя) система координат используется? Пока без разницы, это только для односторонних полигонов имеет значение. > но почему-то когда z=2 и более, а что минус, что плюс, всё одинаково отсекается Не, отсечка, когда z по модулю больше 1. Просто по умолчанию ближняя плоскость отсечения - z=-1, а дальняя - z=1 А, теперь понятно. Только ещё один вопрос: координата Z, если всё равно какая система координат используется, отсекает части отрезков относительно точки (т.е. у средней точки левого треугольника координата Z будет проходить именно мимо неё и её конкретно заданных других координат) или относительно осей координат X и Y ? Сообщение отредактировано: mitz - 5.11.2010 2:25 |
TarasBer |
5.11.2010 0:29
Сообщение
#15
|
Злостный любитель Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
Ничего не понял. Повтори вопрос с картинками.
-------------------- |
mitz |
5.11.2010 1:20
Сообщение
#16
|
Новичок Группа: Пользователи Сообщений: 48 Пол: Мужской Репутация: 0 |
Ничего не понял. Повтори вопрос с картинками. Хорошо, тогда выкладываю картинки. На первой я выделил среднюю точку в левом треугольнике и провёл около неё координату Z, которая после экспериментом с заданием Z=5 отсекла часть треугольника так, как я прочертил белыми стрелками на картинке. На второй, третьей и четвёртой выделил всевозможные оси Z (лево-, право- и многостороннее, хотя как было сказано выше, это только для односторонних полигонов имеет значение), которые расположены относительно осей X и Y, а не точек, как в первом примере. Эскизы прикрепленных изображений |
TarasBer |
5.11.2010 11:50
Сообщение
#17
|
Злостный любитель Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
Кхм... Не пугай меня так.
Ось z на этой картинке вообще не видна - она поперёк экрана идёт. Представь, что мы эту вершину тянем на себя, из экрана прямо на себя, и всё, что дальше, чем на сантиметр от экрана, сгорает. Тогда треугольник, содержащий эту вершину, как раз будет вот так отсекаться. Белая линия на первой картинке - это не ось z, это просто сечение плоскости, содержащей левый треугольник, плоскостью z=1. -------------------- |
mitz |
17.12.2010 13:59
Сообщение
#18
|
Новичок Группа: Пользователи Сообщений: 48 Пол: Мужской Репутация: 0 |
TarasBer,
спасибо за помощь! Насчёт 2-й картинки - там косяк - не нарисована линия вообще, а должна идти вниз - в принципе, обычно координата Z так и ставится в системах координат. Кому интересно, вот ответ на вопрос, что будет, если задать Z=5: Если задать координаты z = 5 одной из вершин треугольника (например, верхней вершины левого треугольника), то можно увидеть эффект, обусловленный тем, что точка выходит за границу видимости (проецируется), и часть фигуры при этом отсекается. Если Z=0...1, то точка находится в границе видимости, и фигура не отсекается при этом. З.Ы. Программный код задачки на Delphi: unit Unit1; При этом крайне рекомендуется сделать размер выводимого окна с одинаковым разрешением, например, 600Х600, чтобы координаты ложились на окно соответственно заданным координатам, иначе будет искажения. Сообщение отредактировано: mitz - 17.12.2010 14:02 |
Текстовая версия | 30.05.2024 18:27 |