![]() |
Модераторы: gambit, Partizan |
![]() ![]() ![]() |
|
Garcian |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 5.11.2008 Репутация: нет Всего: нет |
Здравствуйте. Изучаю OpenGL по довольно хорошему курсу лекций. Приведенный пример довольно простой - рисуется треугольник (Paint событие), он поворачивается вокруг любой оси и изменяется при изменении размера окна (Resize). Допустим, я хочу добавить фигуру в glControl, чтобы с ней можно было делать все тоже самое
![]()
А это уже от меня. Вот обработка кнопки по добавлению треугольника:
Ну и получается, яное дело, ерунда. События никак не связаны с новым треугольником. Подскажите, пожалуйста, как надо. Это сообщение отредактировал(а) Garcian - 18.4.2012, 19:44 --------------------
Неродивый студент |
||||
|
|||||
Garcian |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 5.11.2008 Репутация: нет Всего: нет |
Нету никого, кто бы в OpenGL разбирался? Или я вопрос сформулировал плохо? По сути, он даже, наверное, самого GL и не касается, а дело в непонимании мной работы обработчика событий.
--------------------
Неродивый студент |
|||
|
||||
Veitmen |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 288 Регистрация: 10.11.2006 Где: СПБ Репутация: нет Всего: 4 |
Привет.
Объясните чего вы сделать хотите. А то не понятно... |
|||
|
||||
Garcian |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 5.11.2008 Репутация: нет Всего: нет |
Первый листинг - рисуется треугольник в 3х мерном пространстве (событие Paint). Его можно вертеть, окно можно растягивать - изображение преобразуется в реальном времени.
Я хочу сделать возможным добавление треугольника с помощью кнопки - листинг 2, чтобы он тоже преобразовывался в реальном времени. Но на деле у меня этого не происходит. Это сообщение отредактировал(а) Garcian - 20.4.2012, 16:46 --------------------
Неродивый студент |
|||
|
||||
SlimsUA |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 22.4.2012 Где: Украина, Донецк Репутация: нет Всего: нет |
Если вкратце, то в твоём коде "добавления треугольника" никакого добавления не происходит. Там выполняется просто однократная отрисовка. Весь рендеринг должен происходить в glControl1_Paint(...). Для рисования произвольного количества объектов со связанной или независимой трансформацией необходимо иметь класс (или структуру - смотря какая сложность и разнообразие нужны), содержащий информацию о фигуре (меше, модели, и т.д.). Экземпляры этого класса придется хранить в динамическом массиве (или списке, дереве, или иной коллекции), а в glControl1_Paint(...) делать проход по элементам коллекции и выводить их на экран, применяя к каждому его собственную трансформацию. А вот в обработчике нажатия кнопки - создавать новый экземпляр класса фигуры, заполнять данными (вершины, цвет, сдвиги, повороты, масштабирования и т.д.) и добавлять объект в коллекцию.
P.S. Ну это если очень бегло и вкратце... P.P.S. Ссылкой на курс лекций не поделишься? Это сообщение отредактировал(а) SlimsUA - 22.4.2012, 00:44 |
|||
|
||||
Garcian |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 5.11.2008 Репутация: нет Всего: нет |
Спасибо, лично я этот вопрос пока оставил, так как времени осуществлять задумку просто нету.
Курс лекций с INTUIT.ru, для записи на курсы там надо зарегестрироваться (все бесплатно). Курс называется: Создание графическиx моделей с помощью Open Graphics Library Автор: В.Н. Лихачев Ссылка на курс: http://www.intuit.ru/department/graphics/grogl/ зы: насчет класса, может я что то и не правильно делал, но объект GL, как я понял, создается при добавлении glControl на форму. Поэтому, когда я использовал класс, обрабатывающий объекты GL - компилятор ругался, говорил что нету ссылки на объект. При попытке создать new GL() - ничего не изменялось. Поэтому бОльшая часть обработки изображения (повороты, масштибирование, перекрытие, освещение, а также создание случайных треугольников) у меня происходит в самой Form1.cs. Отдельный класс у меня лишь нахождение нормалей к поверхностям. Это сообщение отредактировал(а) Garcian - 22.4.2012, 07:53 --------------------
Неродивый студент |
|||
|
||||
SlimsUA |
|
||||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 22.4.2012 Где: Украина, Донецк Репутация: нет Всего: нет |
Ты не только неправильно делал, ты неправильно понял. Класс OpenTK.Graphics.OpenGL.GL не хранит информацию об объекте, который нужно отрисовать, поэтому создавать его экземпляры бессмысленно и бесполезно.
Вот посмотри его документацию: OpenTK.Graphics.OpenGL.GL ![]() Посмотрим часть кода из твоей формы:
Получается, что все данные о треугольнике у тебя прописаны непосредственно в коде ( GL.Color3(1f, 0f, 0f); GL.Vertex3(-0.7, -0.7, 0); и т.д. ) и в переменных формы ( AngleX, AngleY, ...). Вот их то и нужны помещать в отдельную структуру данных, что-то вроде:
Для каждого треугольника создавать свой экземпляр Triangle, а для динамически создаваемых треугольников хранить их в какой-либо коллекции, позволяющей динамическое изменение количества элементов. В методе отрисовки (glControl1_Paint в твоем случае) перебирать элементы коллекции в цикле и выводить их на экран. P.S. И вот еще... Для написания игр GLControl не подходит. В нем реализован цикл, основанный на событиях, т.е. пока не будет вызван GLControl.Invalidate() перерисовки не произойдет. Грубо говоря, пока не нажмешь кнопку - ничего нового не нарисуется. Представляешь? В гонках нажал газ - ты едешь, соперники едут, деревья качаются, дождь идет, кнопку отпустил - всё замерло ![]() Так что для игр нужно использовать OpenTK.GameWindow. P.P.S. И еще одно, изучай теорию. Вот тут: ссылочка рекомендую посмотреть первые пять роликов. Видео-курс вообще посвящен XNA Game Studio, но в этих роликах достаточно наглядно показываются теоретические основы. |
||||
|
|||||
Garcian |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 125 Регистрация: 5.11.2008 Репутация: нет Всего: нет |
Спасибо, обязательно посмотрю) Пока надобности делать игры нет, надо КГ сдать
![]() --------------------
Неродивый студент |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Разработка Windows Forms | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |