Страницы: 1

Ответить
RSS
Инициализация OpenGL в C#. Библиотека Tao Framework.
 
Инициализация OpenGL в C#. Библиотека Tao Framework.

В этом уроке на основе тестового приложения мы проверим работоспособность библиотеки Tao: сначала мы подключим ее к проекту, затем проведем инициализацию библиотеки и инициализацию OpenGL и в качестве проверки визуализируем сферу с помощью библиотеки FreeGlut.
Мы не будем вдаваться в подробности настройки и инициализации OpenGL в C# - мы лишь проверим работоспособность и научимся размещать специальный элемент управления, предназначенный для визуализации сцены в окне программы. На выходе мы получим простейшее приложение с визуализацией трехмерной сферы.
information must be free for all
 
Очень интересные Уроки )) Довольно подробные и понятные, как раз для новичков ))

У меня проблема:
Я попытлся засунуть SimpleOpenGLControl в дочернюю форму MDI и когда нажимаешь на создание нового файла родительской формы первый раз открывается дочерняя форма (все как надо), но когда нажимаешь второй раз (должно открыться ище одна дочерняя и тп до бесконечности) программа просто Закрывается совсем БЕЗ ошибок.
Я попробовал убрать из Конструктора формы код инициализации OpenGl и ВСЕ заработало, Значит дело OpenGl.
Так как мне его работать заставить? ))
 
Дмитрий Конопинский, вы хотите разместить несколько компонентов SimpleOpenGLControl на разных формах? По-моему не будет работать  :( .
Нужно смотреть в сторону GLFW, там заявлены
...Support for multiple windows, multiple monitors, high-DPI, gamma ramps and clipboard.. и много других фишек, а TaoFramework - это больше для простых проектов и для обучения  :(
 
Цитата
Петр Василисин пишет:
Дмитрий Конопинский, вы хотите разместить несколько компонентов SimpleOpenGLControl на разных формах? По-моему не будет работать .
Нужно смотреть в сторону GLFW, там заявлены
...Support for multiple windows, multiple monitors, high-DPI, gamma ramps and clipboard.. и много других фишек, а TaoFramework - это больше для простых проектов и для обучения
несколько компонентов SimpleOpenGLControl на разных формах и так работает, я проверял, не работает именно в Контейнере  
 
Цитата
Дмитрий Конопинский пишет:
Цитата
Петр Василисин пишет:
Дмитрий Конопинский, вы хотите разместить несколько компонентов SimpleOpenGLControl на разных формах? По-моему не будет работать .
Нужно смотреть в сторону GLFW, там заявлены
...Support for multiple windows, multiple monitors, high-DPI, gamma ramps and clipboard.. и много других фишек, а TaoFramework - это больше для простых проектов и для обучения
несколько компонентов SimpleOpenGLControl на разных формах и так работает, я проверял, не работает именно в Контейнере
о, виноват, нет, не совсем так ...
Запускаю одну форму, запускаю вторую ..закрывается НО
Запускаю одну форму => закрываю её (т.е ни одно окно с графикой не запущено) > открываю еще раз или другое окно (другая форма) и закрывается =)))
Поэтому тут в чем то другом дело наверно
 
Привет

выполняйте инициализацию только 1 раз. что-то наподобие


Код
public Form2(bool needInit)
        {
            InitializeComponent();
            _needInit = needInit;
...

Код
private void Form2_Load(object sender, EventArgs e)
{
            if (_needInit)
            {
                Glut.glutInit();
                Glut.glutInitDisplayMode(Glut.GLUT_RGB | Glut.GLUT_DOUBLE | Glut.GLUT_DEPTH);
            }
 ...
и взов
Код
private void newToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Form2 newMDIChild = new Form2(true); // первый вызов дочерней формы
            newMDIChild.MdiParent = this;
            newMDIChild.Show();
        }

        private void new2ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Form2 newMDIChild = new Form2(false); // последующие
            newMDIChild.MdiParent = this;
            newMDIChild.Show();
        }
 ...
ну это набросок, можно сделать удобнее для повседневного использования   :D  

при создании второй формы рендер может сработать не с первого вызова (глядел наскоро, не уверен почему так происходит. например, если поставить кнопку , реализующую визуализацию, то на второй форме визуализация отрисуется после второго нажатия)
 
Я правильно понял? Единственное и достаточное условие работы - это чтобы
Glut.glutInit();
Glut.glutInitDisplayMode(Glut.GLUT_RGB | Glut.GLUT_DOUBLE | Glut.GLUT_DEPTH);
запускалась только один раз вне зависимости от того, сколько окон открыто, а остальной код что ты привел - это просто твоя реализация для примера?
У меня Создание нового окна (нового файла в программе) конструктор среды написал так
private void ShowNewForm(object sender, EventArgs e)
{
Form childForm = new Form1();
childForm.MdiParent = this;
childForm.Text = "Окно " + childFormNumber++;
childForm.Show();
}

И я не понял твой "вызов".  Почему у обработчика на вызов 2 окна передается False? Может я логику работы не понял
По идее нужно като отслеживать запущенно хотябы одно окно или нет, либо инициализирован ли OpenGL а так просто не получится
Изменено: Дмитрий Конопинский - 1 Февраля 2015 19:21:01
 
Инициализация заработала, все окна открываются, НО теперь при нажатии на кнопку Закрывается прога причем не  важно сколько окон запущено =))
Изменено: releyshic - 1 Февраля 2015 19:12:02
 
Касяк происходит на функции Glut.glutWireSphere(2, 32, 32); . Выявил комментируя строки кода построчно
Нажимаешь кнопку и окно просто закрывается, даже если только 1 окно запущено
 
Цитата
И я не понял твой "вызов".  Почему у обработчика на вызов 2 окна передается False? Может я логику работы не поня
По идее нужно като отслеживать запущенно хотябы одно окно или нет, либо инициализирован ли OpenGL а так просто не получится

Просто это был быстрый набросок реализации:
Сделал 2 пункта меню, чтобы потестировать, будет ли вылетать:
1 пункт меню вызывал дочернюю форму передавая true, второй пункт меню - передавая false.


Цитата
По идее нужно като отслеживать запущенно хотябы одно окно или нет, либо инициализирован ли OpenGL а так просто не получится

Да, в вашей реализации надо сделать контроль над инициализацией в модальных окнах - надо следить за тем, инициализирован ли или нет, т.е. контролить открытие/закрытие окон и использование визуализации в них.

Идею я подал, дальше все в ваших руках:good:. Если где-то еще вылетает надо ловить дебагером, на каком именно моменте.
 
Цитата
Я правильно понял? Единственное и достаточное условие работы - это чтобы
Glut.glutInit();
Glut.glutInitDisplayMode(Glut.GLUT_RGB | Glut.GLUT_DOUBLE | Glut.GLUT_DEPTH);


Я просто дебагером поймал вылет примерно с glutInit(). убирать из условия glutInitDisplayMode не пробовал, просто сразу накидал кусок, окно не вылетело - дальше экспериментов не ставил
 
Цитата
Касяк происходит на функции Glut.glutWireSphere(2, 32, 32); . Выявил комментируя строки кода построчно
Нажимаешь кнопку и окно просто закрывается, даже если только 1 окно запущено

Там случайно не "«System.DllNotFoundException: Не удается загрузить DLL „freeglut.dll“: Не найден указанный модуль. (Исключение из HRESULT: 0x8007007E) — Решаеться методом копирования из папки C:\Programm Files\TaoFramework\lib в папку C:\Windows\System32»"?

В конце публикации есть советы по этому поводу. Если не помогут можно еще попробовать C:\Program Files (x86)\TaoFramework\lib закинуть в переменные окружения или freeglut.dll в папку с исполняемым файлом проекта
 
не могу понять как именно ты использовал дебаггер, я запукаю режим отладки потом в проге жму на копку
[img]c:%5CUsers%5CHP%5CDesktop%5C%D0%BE%D1%82%D0%BB%D0%BB%D0%B0%D0%B4%D0%BA%D0%B0.gif[/img]
а что с этим делать? как понять что не так
http://www.fayloobmennik.net/4565300
Изменено: Дмитрий Конопинский - 1 Февраля 2015 20:21:39
 
Цитата
Anvi пишет:
Цитата
Касяк происходит на функции Glut.glutWireSphere(2, 32, 32); . Выявил комментируя строки кода построчно
Нажимаешь кнопку и окно просто закрывается, даже если только 1 окно запущено
Там случайно не "« System.DllNotFoundException: Не удается загрузить DLL „freeglut.dll“: Не найден указанный модуль. (Исключение из HRESULT: 0x8007007E) — Решаеться методом копирования из папки C:\Programm Files\TaoFramework\lib в папку C:\Windows\System32 »"?

В конце публикации есть советы по этому поводу. Если не помогут можно еще попробовать C:\Program Files (x86)\TaoFramework\lib закинуть в переменные окружения или freeglut.dll в папку с исполняемым файлом проекта
в том то и дело, что ошибок ипредупреждений вообще никаких не появляется ,поэтому я и не знаю что с этим делать =))
 
Цитата
не могу понять как именно ты использовал дебаггер, я запукаю режим отладки потом в проге жму на копку

Надо отметить метками (красны точки слева) все строки кода, на которых будет остановка выполнения программы (на скрине отметка на входе в функцию). Когда исполнение дойдет до нужной строки кода. Дальше жмем F5 для продолжения выполнения программы и остановки на нужной строке кода.



ну и при очередном нажатии F5 программа вылетит, таким образом определяем проблемное место
 
не проще ли в дебаг моде запустить и когда вылетит call stack посмотреть?
 
Цитата
не проще ли в дебаг моде запустить и когда вылетит call stack посмотреть

Ну если человек только начал использовать дебагер, то проще ориенитроваться по брекпоинтам, имхо
information must be free for all
 
Цитата
Дмитрий Конопинский пишет:
Касяк происходит на функции Glut.glutWireSphere(2, 32, 32); . Выявил комментируя строки кода построчно
Нажимаешь кнопку и окно просто закрывается, даже если только 1 окно запущено
Если Windows x64, то файлы библиотеки нужно скопировать в директорию SystemDisk\Windows, а не в папку SystemDisk\Windows\System32.
 
Цитата
Anna написал:
Если Windows x64, то файлы библиотеки нужно скопировать в директорию SystemDisk\Windows, а не в папку SystemDisk\Windows\System32.
Вообще лучше прописать путь к библиотекам в
Мой компьютер -> Свойства -> Дополнительные параметры системы (в левой колонке) -> Вкладка "Дополнительно" -> Переменные среды -> В списке системных переменных выбираем переменную Path и дописываем путь  8) .
 
Цитата
noname пишет:
Вообще лучше прописать путь к библиотекам в
Мой компьютер -> Свойства -> Дополнительные параметры системы (в левой колонке) -> Вкладка " Дополнительно " -> Переменные среды -> В списке системных переменных выбираем переменную Path и дописываем путь .
Эмммм...  и как его прописать?
 
В статье
http://esate.ru/uroki/OpenGL/uroki-OpenGL-c-sharp/teksturirovanie-opengl-devil/
в самом низу в примечании пример  :)
 
Ошибка: Элемент "Glut" не существует в текущем контексте. Это вылетает уже на строчке Glut.glutInit();
 
Цитата
derex пишет:
Ошибка: Элемент "Glut" не существует в текущем контексте. Это вылетает уже на строчке Glut.glutInit();
Не в том месте были подключены пространства имён. Теперь работает.
 
Добрый день, возникла проблема с одним dll. Все файлы из lib и bin находятся в папках windows и system32, в менеджере стоит х86, в переменных средах в path есть путь к библиотекам в папке tao, но ошибка не уходит.  
Снимок.JPG (77.59 КБ)
 
Цитата
masterkonst написал:
Добрый день, возникла проблема с одним dll. Все файлы из lib и bin находятся в папках windows и system32, в менеджере стоит х86, в переменных средах в path есть путь к библиотекам в папке tao, но ошибка не уходит.

Привет! Судя по вашему комментарию, вы вроде все попробовали (вот тут примерно ту же проблему обсуждали)
http://esate.ru/forum/?PAGE_NAME=message&fid=2&tid=43&TITLE_SEO=43-teksturirovanie-v-ope...

могу посоветовать еще раз все внимательно проверить по шагам. Еще желательно перезагрузиться после установки переменной path.
как правило, все кто просил помочь в этой проблемой решали ее перебрасыванием файлов в windows / system32, перезагрузкой, сменой типа проекта на x86, либо оказывалось что ссылки на библиотеки не добавлены (рис 1), либо не добавлен (или добавлен в неверно месте) код

Цитата
// для работы с библиотекой OpenGL
using Tao.OpenGl;
// для работы с библиотекой FreeGLUT
using Tao.FreeGlut;
// для работы с элементом управления SimpleOpenGLControl
using Tao.Platform.Windows;
Изменено: noname - 19 Мая 2017 23:14:55
 
Цитата
noname написал:
могу посоветовать еще раз все внимательно проверить по шагам. Еще желательно перезагрузиться после установки переменной path.
как правило, все кто просил помочь в этой проблемой решали ее перебрасыванием файлов в windows / system32, перезагрузкой, сменой типа проекта на x86, либо оказывалось что ссылки на библиотеки не добавлены (рис 1), либо не добавлен (или добавлен в неверно месте) код
Спасибо, пойду еще раз создам проект и переделаю все, что перечислено. А на счет кода в нужном месте - его же добавлять в файл form1.cs (двойной клик по форме)?
 
Цитата
masterkonst написал:
Цитата
noname  написал:
могу посоветовать еще раз все внимательно проверить по шагам. Еще желательно перезагрузиться после установки переменной path.
как правило, все кто просил помочь в этой проблемой решали ее перебрасыванием файлов в windows / system32, перезагрузкой, сменой типа проекта на x86, либо оказывалось что ссылки на библиотеки не добавлены (рис 1), либо не добавлен (или добавлен в неверно месте) код
Спасибо, пойду еще раз создам проект и переделаю все, что перечислено. А на счет кода в нужном месте - его же добавлять в файл form1.cs (двойной клик по форм
Цитата
masterkonst написал:
Цитата
noname  написал:
могу посоветовать еще раз все внимательно проверить по шагам. Еще желательно перезагрузиться после установки переменной path.
как правило, все кто просил помочь в этой проблемой решали ее перебрасыванием файлов в windows / system32, перезагрузкой, сменой типа проекта на x86, либо оказывалось что ссылки на библиотеки не добавлены (рис 1), либо не добавлен (или добавлен в неверно месте) код
Спасибо, пойду еще раз создам проект и переделаю все, что перечислено. А на счет кода в нужном месте - его же добавлять в файл form1.cs (двойной клик по форме)?
Лучше скачай пример из Первых уроков и пробуй запустить его, чтобы быть уверенным что дело не в коде или других бибилиотеках
Может у тебя какието программы или антивирус запрещают доступ к какимто директориям? или на этих папках доступ запрещен
Также попробуй переустановить Студию или поставить другую - в них бывают глюки
Страницы: 1

Ответить
Читают тему (гостей: 1)
Форма ответов
Текст сообщения*
Загрузить файл или картинкуПеретащить с помощью Drag'n'drop
Перетащите файлы
Ничего не найдено
Загрузить картинки
Отправить Отменить
 
^
Регистрация
Регистрируясь, вы принимаете правила сайта. Если вы не получили код подтв. регистрации - не забудьте проверить папку спам.
Логин*
Email*
Пароль*
Подтверждение пароля*
 
Логин*
Код*
 
×
Восстановление пароля
Пожалуйста, заполните поля, после чего вы получите код подтверждения на ваш Email. Если код не пришел в течении нескольких минут - проверьте папку спам.
Логин

или Email
Логин*
Код подтверждения*
Новый пароль*
Подтверждение пароля*
×
Авторизация
  • Используйте вашу учетную запись на Facebook.com для входа на сайт.
  • Используйте вашу учетную запись VKontakte для входа на сайт.
  • Используйте вашу учетную запись Google для входа на сайт.
Авторизуйтесь с помощью соц. сети или с помощью аккаунта на сайте:
×