Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Полусфера на поверхности сферы (OpenGL) [Delphi, Windows]


Страницы:   1 2 3 4 5

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]

Самое противное заключается в том, что все равно ничего не происходит. Все компилится, все запускается, но ничего не рисуется. И вот теперь я уже не могу сказать, почему.


Страницы:   1 2 3 4 5

Наверх

Титульная страница Поиск, карта сайта Написать письмо