Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

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

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


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

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

Блог
_PROGRAMM_ вне форума Ответить с цитированием
Старый 20.05.2011, 22:29   #2
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Добавьте

Код:
 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, 08:12   #3
RomiKon
Форумчанин
 
Регистрация: 11.04.2010
Сообщений: 143
По умолчанию

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

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

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

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

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

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

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

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

Блог

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

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

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

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

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

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

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

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

Блог

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

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


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


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


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