Форум программистов Контакты:
О проблемах с регистрацией, почтой и по другим вопросам пишите сюда - post@programmersforum.ru
По необходимости будем регистрировать вручную. И проверяйте папку спам!
Главная  |  Правила форума  |  Исходники Delphi  |  Основы Delphi  |  Блог программистов  |  Рассылка  |  Повторная активизация e-mail  | 

Вернуться   Форум программистов > Технологии > Создание и обсуждение игр

Ответ
 
Опции темы
Старый 20.05.2011, 19:22   #1
_PROGRAMM_
Профессионал
 
Аватар для _PROGRAMM_
 
Регистрация: 30.07.2009
Адрес: Российская Федерация
Сообщений: 1,606
Репутация: 231
По умолчанию 3D куб. OpenGL

Добрый вечер. В разделе "помощь студентам" мне так никто и не помог. Поэтому решил написать здесь. В общем, я рисую куб, т. е. 6 граней. Но выходит у меня не то, что нужно. Когда добавляю glTranslate, я получаю черный экран. Не понимаю почему. Двумерные рисунки получаются отлично. Добавил в код glPolygonMode (GL_FRONT_AND_BACK, GL_LINE); и получил полный бред. Я уже "головой об стену бьюсь". Не знаю, что мне делать. Надеюсь на вашу помощь. Прикрепил исходник.


P.S .Хочу нарисовать (это моя цель) свою комнату, хотя знаю, что сложно, да вот никак не получается куб
Вложения
Тип файла: zip Kub.zip (200.0 Кб, 33 просмотров)
__________________

В мире нет вечных двигателей, зато есть вечные тормоза...

Блог
_PROGRAMM_ вне форума   Ответить с цитированием
Старый 20.05.2011, 21:29   #2
alexBlack
Модератор
Заслуженный модератор
 
Регистрация: 12.10.2007
Адрес: -
Сообщений: 1,204
Репутация: 909
По умолчанию

Добавьте

Код:

 TForm1 = class(TForm)
  protected
    procedure WMEraseBkgnd(var M : TWMEraseBkgnd); message WM_EraseBkgnd;

  end;

procedure TForm1.WMEraseBkgnd(var M : TWMEraseBkgnd);
begin
   M.Result := 1;
end;

И вынесите glRotatef из FormPaint в FormCreate. Получите рисунок куба, отсеченный передней и задней плоскостями.

//Я OpenGL знаю поверхностно, не обессудьте.
alexBlack вне форума   Ответить с цитированием
Старый 21.05.2011, 07:12   #3
RomiKon
Форумчанин
 
Регистрация: 11.04.2010
Сообщений: 141
Репутация: 35
По умолчанию

Вот держи. Там где изменил код поставил комменты.
Вложения
Тип файла: rar Kub.rar (175.6 Кб, 78 просмотров)
RomiKon вне форума   Ответить с цитированием
Старый 21.05.2011, 07:20   #4
_PROGRAMM_
Профессионал
 
Аватар для _PROGRAMM_
 
Регистрация: 30.07.2009
Адрес: Российская Федерация
Сообщений: 1,606
Репутация: 231
По умолчанию

Спасибо.
А что ваш код делает? И все же в уроках нет данной процедуры. Они просто берут и рисуют квадраты. Хотелось бы узнать, как у них это работает?
Вынес я glRotatef в Create. Это мне ничего не дало. Еще я хочу поворачивать куб при каждом событии таймера.
Вот здесь как-то без махинаций получается же сделать. У кого есть возможность, дайте свой исходник куба без лишних строк.

Заранее благодарю.

--Add
RomiKon, сейчас посмотрю ваш пост. Вы опубликовали сообщение во время моего письма, поэтому я не заметил. Извиняюсь.
__________________

В мире нет вечных двигателей, зато есть вечные тормоза...

Блог
_PROGRAMM_ вне форума   Ответить с цитированием
Старый 21.05.2011, 07:31   #5
_PROGRAMM_
Профессионал
 
Аватар для _PROGRAMM_
 
Регистрация: 30.07.2009
Адрес: Российская Федерация
Сообщений: 1,606
Репутация: 231
По умолчанию

RomiKon, Спасибо вам. Прейду после похода и изучу полностью ваши изменения. Пока возник только один вопрос: Почему, заменив -3 на -1 в строке glTranslatef(0, 0, -3);, получатся не то, что хотелось бы. Я думаю, что в этом виновата glFrustum. Так ли это?
__________________

В мире нет вечных двигателей, зато есть вечные тормоза...

Блог

Последний раз редактировалось _PROGRAMM_; 21.05.2011 в 07:33.
_PROGRAMM_ вне форума   Ответить с цитированием
Старый 21.05.2011, 10:46   #6
RomiKon
Форумчанин
 
Регистрация: 11.04.2010
Сообщений: 141
Репутация: 35
По умолчанию

Понимаешь вся сцена отсекается пирамидой видимости. Стандартно пирамида видимости очень маленькая. Поэтому нужно заново задать плоскости ограничивающие основания пирамиды, это делается в процедуре glFrustum(есть ещё несколько процедур устанавливающих отсечение, но вам пока рано знать о них), последние два параметра этой функции и задают растояние до ближней и дальней плоскости отсечение. Всё что вы рисуете перед ближнее или за дальней плоскостью отсечения неотрисовывается, поэтому при изменении значений параметров glTranslatef вы видите куб не полностью=)
RomiKon вне форума   Ответить с цитированием
Старый 21.05.2011, 13:45   #7
_PROGRAMM_
Профессионал
 
Аватар для _PROGRAMM_
 
Регистрация: 30.07.2009
Адрес: Российская Федерация
Сообщений: 1,606
Репутация: 231
По умолчанию

Спасибо. Еще вопрос. Думаю он будет в тему. Почему при изменении строки с glFrustum(-3, 3, -3, 3, 1, 10); на ,допустим, glFrustum(-3, 3, -3, 3,5 , 10);
, не сдвигая ось координат (glTranslatef()), рисунка не видно?
__________________

В мире нет вечных двигателей, зато есть вечные тормоза...

Блог
_PROGRAMM_ вне форума   Ответить с цитированием
Старый 21.05.2011, 18:41   #8
RomiKon
Форумчанин
 
Регистрация: 11.04.2010
Сообщений: 141
Репутация: 35
По умолчанию

Я уже говорил что предпоследний параметр функции glFrustum задаёт расстояние до ближней плоскости отсечения, тогда всё что нарисуется ближе чем этот параметр видно не будет. Да кстати если интересно то прочитай книжку Краснов OpenGL в Delphi. Отличная вещь ориентированная прежде всего на практику. Тебе будет очень полезно.
RomiKon вне форума   Ответить с цитированием
Старый 22.05.2011, 08:23   #9
_PROGRAMM_
Профессионал
 
Аватар для _PROGRAMM_
 
Регистрация: 30.07.2009
Адрес: Российская Федерация
Сообщений: 1,606
Репутация: 231
По умолчанию

Цитата:
Да кстати если интересно то прочитай книжку Краснов OpenGL в Delphi.
Я по ней и учусь.
Цитата:
Я уже говорил что предпоследний параметр функции glFrustum задаёт расстояние до ближней плоскости отсечения, тогда всё что нарисуется ближе чем этот параметр видно не будет
Сейчас, немного поразмыслив, я сообразил. Спасибо. Теперь все понятно.
__________________

В мире нет вечных двигателей, зато есть вечные тормоза...

Блог

Последний раз редактировалось _PROGRAMM_; 22.05.2011 в 08:25.
_PROGRAMM_ вне форума   Ответить с цитированием
Старый 09.06.2011, 19:53   #10
Марк Сунгатулин
Новичок
 
Регистрация: 09.06.2011
Сообщений: 1
Репутация: 10
По умолчанию

Цитата:
Сообщение от _PROGRAMM_ Посмотреть сообщение
Добрый вечер. В разделе "помощь студентам" мне так никто и не помог. Поэтому решил написать здесь. В общем, я рисую куб, т. е. 6 граней. Но выходит у меня не то, что нужно. Когда добавляю glTranslate, я получаю черный экран. Не понимаю почему. Двумерные рисунки получаются отлично. Добавил в код glPolygonMode (GL_FRONT_AND_BACK, GL_LINE); и получил полный бред. Я уже "головой об стену бьюсь". Не знаю, что мне делать. Надеюсь на вашу помощь. Прикрепил исходник.


P.S .Хочу нарисовать (это моя цель) свою комнату, хотя знаю, что сложно, да вот никак не получается куб
Я не знаю, но есть еще одна проблема, для страдающих эпилепсией этот куб будем последним в их жизни
У меня вообщем быстро моргает белым цветом.
Марк Сунгатулин вне форума   Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
куб в дельфи Руслан05 Помощь студентам 2 01.04.2011 15:08
Куб в 3D Dixmix20120 Помощь студентам 1 19.12.2010 11:37
Куб в OPENGL maxflint Мультимедиа в Delphi 10 19.04.2010 14:19
OpenGL в delphi. Как перемещать куб с помощью мыши Xawk Мультимедиа в Delphi 2 08.12.2009 12:20
магический куб Diller Помощь студентам 3 09.09.2007 10:35




07:51.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.

Forex с Admiral Markets — это надежно


Работа на Forex с 2000 года. Очное и дистанционное обучение. Выгодные условия.
магазин горящих туров


более 1000 горящих предложений ежедневно
Бэбиблог - соц сеть для будущих мам


RusProfile.ru


Справочник российских юридических лиц и организаций.