![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Полусфера на поверхности сферы (OpenGL) [Delphi, Windows]
Creative © (2006-11-28 14:34:00)Есть Сфера и есть полусфера. Как сделать следующую вещь:
Нарисовать полусфера таким образом стобы ее можно было возить по сфере , останавливая в произвольной точке?
Была мысль использовать для рисования полусферы gluSphere + glClipPlane, но при тех параметрах, которые принимает в себя glClipPlane, не могу понять, как заставить ее произвольно вертеться.
Подскажите что-нибудь.
ancara (2006-11-30 11:59:00) [61]Дело в том, что порядок хранения цветов в bmp-файле и RGB-текстуре различается : в bmp BGR, а в текстуре RGB, вот она и меняет местами крайние байты..
Creative (2006-11-30 10:39:00) [62]Да, очень страно смотрятся. Вчера как-то лечила, сегодня не могу вспомнить как.
А что делает процедура SwapRGB?
ancara (2006-11-29 18:18:00) [63]вот чорт, опять линк забыл запостить, вот он:
http://www.everfall.com/paste/id.php?sloc9gq8fbfp
P.S. как-то там на эверфоле каменты странно выглядят, или мне так кажется?
ancara (2006-11-29 18:10:00) [64]
> я ведь получу поворот на 30 градусов по обеим указанным
> осям, так?
нет, это будет поворот вокруг вектора (1.0, 0.0, 1.0) на 30 градусов. Причем OpenGL этот вектор еще и нормализует...
> А если я хочу повернуть объект по нескольким осям на разные
> углы, мне что, дважды или трижды писать glRotatef ?
Да, дважды или трижды :)
> Такой вопрос: а тебе удобно писать на VCL?
Да не жалуюсь :))
Вот тут еще один вариант main_u.pas, там кусок сферы окрашенный в желтый цвет и точечный источник света.
В процедуре рендеринга вот этими функциями
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, @diffuse);
glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, @diffuse);
устанавливаются соответсвующие свойства материала объекта.
Creative (2006-11-29 17:38:00) [65]
> Нет, это в корне не правильно :)
> А хотелось бы вот так:
Да, ты совершенно прав. Таким образом нам совершенно не нужна становится LoadIdentity. Спасибо.
Кстати, у меня тут еще один глупый вопрос есть: если я пишу glRotatef (30.0, 1.0, 0.0, 1.0) - я ведь получу поворот на 30 градусов по обеим указанным осям, так? А если я хочу повернуть объект по нескольким осям на разные углы, мне что, дважды или трижды писать glRotatef ?
Кстати, пример твой скомпилился, я поставила твой код и мне удалось нарисовать кусочек сферы :-). Осталось поработать над мелочами, подобрать точные параметры.
Такой вопрос: а тебе удобно писать на VCL?
ancara (2006-11-29 17:15:00) [66]
> glTranslatef (0.0, 0.0, -5.0);
> glRotatef (30.0, 0.0, 0.0, 1.0);
> glPushMatrix;
> //нарисовала все, что хотела
> glPopMatrix;
>
Нет, это в корне не правильно :)
Еще раз: glPushMatrix позволяет сохранить матрицу, путем помещения ее копии в стек, а glPopMatrix ее из стека достает и таким образом восстанавлявает матрицу.
А операции glTranslatef и glRotatef изменяютматрицу.
Поэтому этот код выглядит так:
- изменяем матрицу не сохранив ее: glTranslatef (0.0, 0.0, -5.0);
- еще раз изменяем: glRotatef (30.0, 0.0, 0.0, 1.0);
- сохраняем уже измененнуюматрицу: glPushMatrix; (зачем ее сохранять то?)
- рисуем, но не изменяем матрицу: //нарисовала все, что хотела
- восстанавливаем матрицу: glPopMatrix;
А хотелось бы вот так:
- прежде всего сохранить исходную матрицу: glPushMatrix;
- сделать необходимые преобразования: glTranslatef (0.0, 0.0, -5.0);
- сделать необходимые преобразования: glRotatef (30.0, 0.0, 0.0, 1.0);
- нарисовать все, что хочу...
- восстанавить матрицу: glPopMatrix;
Creative (2006-11-29 16:52:00) [67]Все, нормально открылось. Буду смотреть
Creative (2006-11-29 16:41:00) [68]Битый архив не пошел на пользу проекту. Теперь он в усмерть не компилится.
Creative (2006-11-29 16:31:00) [69]кстати, насчет независимого поволота объектов. Я вот как сделала:
glTranslatef (0.0, 0.0, -5.0);
glRotatef (30.0, 0.0, 0.0, 1.0);
glPushMatrix;
//нарисовала все, что хотела
glPopMatrix;
glLoadIdentity;
glTranslatef (0.0, 0.0, -5.0);
glRotatef (-30.0, 0.0, 0.0, 1.0);
glPushMatrix;
//нарисовала все, что хотела 2
glPopMatrix;
И получилось вроде правильно.
Это варварство?
Creative (2006-11-29 16:28:00) [70]Мне архив сказал "неожиданный конец", и файла оказалось только три. Пас как раз и потерялся
ancara (2006-11-29 16:24:00) [71]как так? а остальные есть? не может быть!
вобщем там было 4 (четыре) файла:
main_u.dfm
OpenGL_texture.dpr
1.jpg
main_u.pas
код main_u.pas положу сюда http://www.everfall.com/paste/id.php?icy518q11p56
Creative (2006-11-29 16:09:00) [72]Я дико извиняюсь, но по моему в твоем архиве чего-то не хватает. В частности файла Main_u.pas.
Creative (2006-11-29 15:45:00) [73]Все в порядке, это у меня глюки
Creative (2006-11-29 15:29:00) [74]Все бы ничего, только не качается он :-(
Creative (2006-11-29 15:05:00) [75]Спасибо! Я постараюсь разобраться обязательно.
ancara (2006-11-29 14:59:00) [76]хех, забыл сначала линк вставить :)
ancara (2006-11-29 14:58:00) [77]Я тут выложил свой рабочий примерчик:
http://s28.quicksharing.com/v/8118153/OpenGL_texture.rar.html
, там полигон и текстура на нем. Рендеринг через вызов дисплейного списка. Там еще есть парочка "лишних" процедур для управления камерой при помощи мышки, ну думаю разберешься...
Начинается все с OnCreate формы : создается контекст OpenGL, некот. инициализация камеры и проч. и BuildList - создается список с этим полигоном и все. А дальше вызывается RenderScene, когда надо перерисовать форму (событие OnPaint).
ancara (2006-11-29 14:58:00) [78]Я тут выложил свой рабочий примерчик, там полигон и текстура на нем. Рендеринг через вызов дисплейного списка. Там еще есть парочка "лишних" процедур для управления камерой при помощи мышки, ну думаю разберешься...
Начинается все с OnCreate формы : создается контекст OpenGL, некот. инициализация камеры и проч. и BuildList - создается список с этим полигоном и все. А дальше вызывается RenderScene, когда надо перерисовать форму (событие OnPaint).
Creative (2006-11-29 13:11:00) [79]Я могу код класса TSphere привести, если это поможет.
Creative (2006-11-29 12:10:00) [80]Самое противное заключается в том, что все равно ничего не происходит. Все компилится, все запускается, но ничего не рисуется. И вот теперь я уже не могу сказать, почему.