Название: Передача координат вершин фигуры по сети Отправлено: 8Observer8 от Март 28, 2014, 06:22 Привет!
У Макса Шлее есть пример с рисованием пирамиды в 3D (книга "Qt 4.8", глава 23 "Работа с OpenGL"). Я хочу переделать этот пример. В моём примере будет запущено две такие программы. Одна, как клиент, а другая, как сервер. Клиент подсоединяется к серверу. Когда пользователь клиента (или сервера) вращает мышкой пирамиду, то начинают вращаться обе пирамиды и у клиента и у сервера. Координаты у него задаются один раз при создании пирамиды: Код
А вот как потом до них добраться? Есть ли способ получения координат в любой момент времени? Скорее всего, мне нужно будет передавать координаты, когда происходит событие mouseMoveEvent(). Заранее спасибо за ответы! Название: Re: Передача координат вершин фигуры по сети Отправлено: Old от Март 28, 2014, 06:26 Вам нужно будет передовать положение и направление камеры.
Название: Re: Передача координат вершин фигуры по сети Отправлено: 8Observer8 от Март 28, 2014, 06:28 Какой ещё камеры :) Я только пример открыл, там в книге про камеру ничего не написано :)
Скажите, пожалуйста, что такое камера? И как до неё добраться? Чем она задаётся? У неё есть координаты? Название: Re: Передача координат вершин фигуры по сети Отправлено: Old от Март 28, 2014, 06:41 Какой ещё камеры :) Я только пример открыл, там в книге про камеру ничего не написано :) А я книгу эту в глаза не видел и понятия не имею, что там в примере. :)Смысл в том, что нужно передовать не новые координаты сцены, а параметры матрицы трансформации или параметры камеры. Название: Re: Передача координат вершин фигуры по сети Отправлено: 8Observer8 от Март 28, 2014, 06:50 Я скопирую весь код примера сюда. Добавил класс OGLPyramid на форму в Widget через "Promoted to..." Где здесь параметры матрицы трансформации или параметры камеры? Видимо, матрица трансформации это: "glTranslatef(0.0, 0.0, -3.0)"). А точно "или", а не "и"? Что такое "параметры камеры"?
main.cpp Код
OGLPyramid.h Код
OGLPyramid.cpp Код
Название: Re: Передача координат вершин фигуры по сети Отправлено: Old от Март 28, 2014, 06:59 Почитайте про glMatrixMode. Да и вообще по opengl.
А конкретно в этом случае достаточно по сети передавать m_xRotate и m_yRotate. Название: Re: Передача координат вершин фигуры по сети Отправлено: 8Observer8 от Март 28, 2014, 07:07 Почитайте про glMatrixMode. Да и вообще по opengl. Когда-то давно нашёл книгу "OpenGL. СуперКнига" (третье издание на русском). Но в ней очень сложно написано, и она очень толстая. Посоветуйте, пожалуйста, что-нибудь простое с большим количеством примеров :)А конкретно в этом случае достаточно по сети передавать m_xRotate и m_yRotate. Огромное спасибо! Буду передавать m_xRotate и m_yRotate :) Как мне это в голову не пришло :)Название: Re: Передача координат вершин фигуры по сети Отправлено: Old от Март 28, 2014, 07:13 Когда-то давно нашёл книгу "OpenGL. СуперКнига" (третье издание на русском). Но в ней очень сложно написано, и она очень толстая. Посоветуйте, пожалуйста, что-нибудь простое с большим количеством примеров :) Не посоветую. Слишком давно я интересовался этой темой. Но гугл, я уверен, вам легко поможет. :)Add: придумайте/найдите интересный для вас большой проект, не занимайтесь ерундой. ;) Название: Re: Передача координат вершин фигуры по сети Отправлено: 8Observer8 от Март 28, 2014, 07:17 Спасибо! Думаю, тему литературы по OpenGL действительно лучше здесь не развивать :)
Add: придумайте/найдите интересный для вас большой проект, не занимайтесь ерундой. ;) Я сейчас именно этим и занимаюсь :), то есть придумываю и ищу проект. Я хочу объединить OpenGL и сеть. Не знаю, во что это может выльеться. Мне интересна сеть, сбор данных и визуализация данных с помощью 3D графики. Если Вы мне подкинете пищу для размышлений - я буду только рад! Можно и в этой теме. Я её не буду закрывать :)Название: Re: Передача координат вершин фигуры по сети Отправлено: Igors от Март 28, 2014, 10:01 Координаты у него задаются один раз при создании пирамиды: Это часто называют "модельные" координаты. Вообще есть "система координат" - это 3 оси, часто взаимо-перпендикулярные (ортогональные) но не обязательно. Сами оси меряются в "мировой" системе координат, которая может быть левой или правой - как условились. Направление мировых осей тоже условно. Обычно Y идет вверх, но у AutoDesk это Z. Переход из одной системы координат в другую выполняется с помощью матрицы (даже фильм такой был :)). Все линейные операции (сдвиг, поворот, масштаб) описываются матрицей. OpenGL тоже понимает матрицы (хоть и сделано там через задницу). Поэтому не нужно всякий раз менять исходные координаты - достаточно изменить матрицу(ы) А вот как потом до них добраться? Есть ли способ получения координат в любой момент времени? Скорее всего, мне нужно будет передавать координаты, когда происходит событие mouseMoveEvent(). Нет. Исходные (модельные) координаты передаете 1 раз, а для каждого поворота - матрицу. Я сейчас именно этим и занимаюсь :), то есть придумываю и ищу проект. Я хочу объединить OpenGL и сеть. Не знаю, во что это может выльеться. Мне интересна сеть, сбор данных и визуализация данных с помощью 3D графики. Если Вы мне подкинете пищу для размышлений - я буду только рад! Можно и в этой теме. Я её не буду закрывать :) Сеть, OpenGL - все это популярно, но обычно это приложение/прибамбасы к задаче (пусть нужные). А задач 3D у меня море, до многого руки не доходят. Вот только вряд ли Вы будете рады таким задачам - там работать надо, это не в СУБД керосин заливать :)Название: Re: Передача координат вершин фигуры по сети Отправлено: carrygun от Март 28, 2014, 10:16 Если Вы мне подкинете пищу для размышлений - я буду только рад! Можно и в этой теме. Я её не буду закрывать :) Сделать такое же (http://blog.qt.digia.com/blog/2014/03/26/qt-data-visualization-1-0-released/), только LGPL. Название: Re: Передача координат вершин фигуры по сети Отправлено: 8Observer8 от Март 28, 2014, 14:44 Если Вы мне подкинете пищу для размышлений - я буду только рад! Можно и в этой теме. Я её не буду закрывать :) Сделать такое же (http://blog.qt.digia.com/blog/2014/03/26/qt-data-visualization-1-0-released/), только LGPL.Igors, спасибо большое! Где про эти матрицы хорошо написано? Не попадалось Вам хорошей литературы для новичков? Я думаю, ничего плохого не будет если Вы в этой теме поделитесь ссылками на ресурсы и названиями книг :) Я, конечно, гуглил. NeHe, например, нашёл. С чего начать? Мне очень интересна тема OpenGL. Название: Re: Передача координат вершин фигуры по сети Отправлено: Igors от Март 28, 2014, 15:15 Где про эти матрицы хорошо написано? Не попадалось Вам хорошей литературы для новичков? Я думаю, ничего плохого не будет если Вы в этой теме поделитесь ссылками на ресурсы и названиями книг :) А я их никогда и не читал. Когда-то (давно) мне попались исходники SDK с объяснениями типа тех что я дал выше, вот и все.С чего начать? Мне очень интересна тема OpenGL. Одна из самых гнусных вещей которой мне не удается избежать. Творчества ноль, тупое запоминание огромного числа ф-ций и столь же тупое переписывание примеров. OpenGL - всего лишь "визуализация" и то "с оглядкой на железо". Что бум визуализировать? И зачем? Откуда возьмутся модели, анимации, шейдинг и многое другое? Увлекающиеся OpenGL обычно не знают ответа на эти простые вопросыНазвание: Re: Передача координат вершин фигуры по сети Отправлено: kamre от Март 28, 2014, 21:17 С чего начать? Мне очень интересна тема OpenGL. Например, с вот этого tutorial (http://www.arcsynthesis.org/gltut/index.html).Название: Re: Передача координат вершин фигуры по сети Отправлено: 8Observer8 от Март 28, 2014, 21:22 С чего начать? Мне очень интересна тема OpenGL. Например, с вот этого tutorial (http://www.arcsynthesis.org/gltut/index.html).Спасибо большое! А есть ли туториалы для новичков с ориентацией на Qt? Название: Re: Передача координат вершин фигуры по сети Отправлено: Old от Март 28, 2014, 21:25 Спасибо большое! А есть ли туториалы для новичков с ориентацией на Qt? Зачем?От Qt требуется создать окно (контекст opengl), все остальное делается средствами opengl. Название: Re: Передача координат вершин фигуры по сети Отправлено: 8Observer8 от Март 28, 2014, 21:31 Пожалуй, Вы правы. Классы-обёртки Qt можно по Qt-примерам и Qt-документации посмотреть.
Я бы себе вот эту книжку купил, если бы умел заказывать на amazon.com и были бы деньги) В сети её не нашёл: http://www.amazon.com/OpenGL-Tutorials-using-Omid-Sakhi-ebook/dp/B00DHR9S9C Название: Re: Передача координат вершин фигуры по сети Отправлено: Old от Март 28, 2014, 21:38 В сети есть ответы на любые вопросы. :)
Не занимайтесь собирательством книг, лучше начинайте делать программу: придумайте идею, проектируйте, пишите код. Заглядывайте в книги за ответами на конкретные вопросы, а не читайте их от корки до корки. Вам нужна интересная тема, для вас интересная. Название: Re: Передача координат вершин фигуры по сети Отправлено: 8Observer8 от Март 28, 2014, 21:54 Спасибо огромное! Очень дельные советы! Буду придерживаться :)
Название: Re: Передача координат вершин фигуры по сети Отправлено: OKTA от Март 28, 2014, 22:03 Может находил, на мало ли
http://www.gamedev.ru/code/articles/OpenGL_Qt4 http://habrahabr.ru/post/132674/ Название: Re: Передача координат вершин фигуры по сети Отправлено: 8Observer8 от Март 28, 2014, 22:11 Большое спасибо! Первую ссылку находил, а вторую нет :) Первую находил ещё летом, просто скопировал код, запустил, работало. Читал описание, но почти ничего не понял. Завтра попробую отдалять и приближать пирамиду (с помощью колёсика мыши) и чтобы в другом окне тоже менялось. С вращением нормально работает:
(http://i7.pixs.ru/storage/8/6/2/160png_4833834_11448862.png) Название: Re: Передача координат вершин фигуры по сети Отправлено: kamre от Март 28, 2014, 22:15 А есть ли туториалы для новичков с ориентацией на Qt? Про использование OpenGL в Qt можно почитать:http://qt-project.org/doc/qt-5/qtgui-openglwindow-example.html http://www.kdab.com/opengl-in-qt-5-1-part-1/ Выше уже написали, что ориентации на Qt особо нет в OpenGL tutorials, т.к. это независимые вещи. В Qt есть некоторые классы для удобства, но их совсем не обязательно использовать. Название: Re: Передача координат вершин фигуры по сети Отправлено: 8Observer8 от Март 28, 2014, 22:28 Спасибо большое! :)
Я ещё такие примеры нашёл: - примеры NeHe (на панели справа): http://nehe.gamedev.net/ - примеры NeHe на русском: http://pmg.org.ru/nehe/ - примеры NeHe на Qt: - http://www.digitalfanatics.org/projects/qt_tutorial/chapter14.html - http://qt-project.org/wiki/NeHe_in_Qt P.S. Пока не знаю насколько эти примеры могут пригодиться :) Название: Re: Передача координат вершин фигуры по сети Отправлено: 8Observer8 от Март 29, 2014, 06:53 Если пользователь у себя в программе приближает (отдаляет) фигуру, то зачем другому пользователю видеть у себя эти изменения? Не представляю где бы нужна была такая функциональность.
Но зато здесь появляется вопрос: при увеличении фигуры в клиенте мы не можем просто передать серверу только лишь: xRotate и yRotate или матрицу ориентации. Нам нужно передавать положение наблюдателя (камеры). Как в OpenGL узнать координаты наблюдателя относительно начала координат? Название: Re: Передача координат вершин фигуры по сети Отправлено: Old от Март 29, 2014, 07:35 Но зато здесь появляется вопрос: при увеличении фигуры в клиенте мы не можем просто передать серверу только лишь: xRotate и yRotate или матрицу ориентации. Нужно будет передать еще дистанцию, которую и устанавливать на сервере в glTranslatef.Но можно передавать и матрицу трансформации, там уже будут учтены все повороты и перемещения. Нам нужно передавать положение наблюдателя (камеры). Как в OpenGL узнать координаты наблюдателя относительно начала координат? Почитать документацию. :)По умолчанию камера находится в центре системы координат. Мы можем двигать фигуру относительно статичной камеры или двигать камеру относительно статичной фигуры или двигать и то и другое. В вашем примере, камера статична, находится в центре системы координат, а двигается фигура. Название: Re: Передача координат вершин фигуры по сети Отправлено: 8Observer8 от Март 29, 2014, 07:52 Что там относительно чего двигается, я пока не понимаю :)
Про матрицу трансформации попытаюсь найти что-нибудь доходчивое. Спасибо! :) Название: Re: Передача координат вершин фигуры по сети Отправлено: Old от Март 29, 2014, 07:55 Попробуйте это: http://u3d.agava.ru/doc/theory/matrix_ops.shtml
Название: Re: Передача координат вершин фигуры по сети Отправлено: 8Observer8 от Март 29, 2014, 08:00 Спасибо огромное! Ох, уж эти матрицы :)
Название: Re: Передача координат вершин фигуры по сети Отправлено: Igors от Март 29, 2014, 09:54 Завтра попробую отдалять и приближать пирамиду (с помощью колёсика мыши) и чтобы в другом окне тоже менялось. С вращением нормально работает: Не будем притворяться, понимания это не добавляет, дело сводится к запоминанию вызова glXXX который "это делает" :) А если действительно хотите понять, то вот задачкаЕсть фигура (хоть та же пирамида) матрица которой известна (т.е. она уже как-то смещена/повернута). Написать 2 ф-ции 1) Вращения фигуры вокруг мировой оси Y 2) Вращения фигуры вокруг локальной оси Y Полагаем что ось вращения проходит через центр фигуры, а угол поворота - аргумент ф-ций [OFF]Не, не потянет [/OFF] Название: Re: Передача координат вершин фигуры по сети Отправлено: 8Observer8 от Март 29, 2014, 09:59 Спасибо большое за упражнение! Но я пока не знаю, чем отличаются локальная и мировая ось. Точнее, не знаю, что такое локальная ось. Мировая ось связана с началом системы координат.
Название: Re: Передача координат вершин фигуры по сети Отправлено: Old от Март 29, 2014, 10:35 Igors, насколько я помню, вы сами только недавно открыли для себя вращение объектов вокруг мировых осей. Вам для этого понадобились десятилетия. :)
А вы хотите, что бы человек осилил, который про матрицы только услышал. Название: Re: Передача координат вершин фигуры по сети Отправлено: Igors от Март 29, 2014, 10:52 Спасибо большое за упражнение! Но я пока не знаю, чем отличаются локальная и мировая ось. Точнее, не знаю, что такое локальная ось. Мировая ось связана с началом системы координат. Я так и знал: "не знаю", "не могу", лапки кверху. Зато как к дусту тянется! А ведь программист без владения предметной частью немногого стоит.Локальная ось Y идет от центра основания пирамиды в ее верхнюю точку. Мировая идет "снизу вверх". Как уже говорилось, эти соглашения условны - можно выбирать любые, пусть выбраны наиболее популярные. Название: Re: Передача координат вершин фигуры по сети Отправлено: 8Observer8 от Март 29, 2014, 10:56 Программа должна сама вращать фигуру? То есть плавно поворачивать (по таймеру) вокруг собственной оси Y и мировой осью Y?
Название: Re: Передача координат вершин фигуры по сети Отправлено: Igors от Март 29, 2014, 11:01 Программа должна сама вращать фигуру? То есть плавно поворачивать (по таймеру) вокруг собственной оси Y и мировой осью Y? Как хотите - хоть по кнопке. Название: Re: Передача координат вершин фигуры по сети Отправлено: 8Observer8 от Март 29, 2014, 11:10 У меня в списке дел есть создание примера с программным вращением пирамиды. Попытаюсь сделать так, как Вы описали. Потом, когда делать начну, то уточню детали :)
Название: Re: Передача координат вершин фигуры по сети Отправлено: Old от Март 29, 2014, 11:27 Зато как к дусту тянется! "Хулиган! А еще очки надел!.. " (с) Иван Васильевич меняет профессию ;DВас самого раздражает ваше незнание и вы язвите об этом по поводу и без. Все что не смогли осилить сами вы считаете враждебным. А ведь программист без владения предметной частью немногого стоит. Ваш пример доказывает обратное. Вы еще и кичитесь незнанием.Название: Re: Передача координат вершин фигуры по сети Отправлено: Igors от Март 29, 2014, 13:41 "Хулиган! А еще очки надел!.. " (с) Иван Васильевич меняет профессию ;D Вот решили Вы взять человека и рассматриваете кандидатов1) Знает std, дуст, мульен опций командной строки и.т.п. Но повернуть фигуру не может. Ладно, человек не работал с этим, пусть разберется. Результат - нечто нагугленное причем через неск дней и с выражением недовольства на лице. 2) Программирует еле-еле, об std лишь немного слышал. Зато выписывает матрицу поворота за неск минут по ходу дела объясняя нюансы о которых я и не подозревал. Соотношение сил здесь несоразмеримое :) Вся эта лабуда, которой так гордятся мальчики-зайчики, и которую Вы пытаетесь мне тыкать в нос - она и близко не лежала с основательными знаниями/пониманием, и цена ей "рупь ведро". Название: Re: Передача координат вершин фигуры по сети Отправлено: Old от Март 29, 2014, 13:58 3 вариант. Это человек, который может рассказать вам про матрицы, то что вы и не знали и прекрасно знающий С++, std, boost, opengl, ...
Вот к этому нужно стремиться, а не к тем двум калекам, про которых вы писали. И вы так и не объяснили, чем вас так возбуждает тот же boost, что вы его почти в каждой теме поминаете? Своей не доступностью? :) Название: Re: Передача координат вершин фигуры по сети Отправлено: Bepec от Март 29, 2014, 14:18 4) человек знающий о матрицах только то, что они существуют и умеющий hello world на С++. Но через неделю с возможностью спрашивать и получать ответы у вас, поворачивает фигуру в любом направлении, трансформирует и преобразовывает с помощью пары написанных им программ.
5) "Мне нужен ученик, который не знает ничего, но знает где об этом можно посмотреть" © какой-то мудрец ( Энштейн что ли :) ). Название: Re: Передача координат вершин фигуры по сети Отправлено: Igors от Март 29, 2014, 14:59 И вы так и не объяснили, чем вас так возбуждает тот же boost, что вы его почти в каждой теме поминаете? Своей не доступностью? :) Если человек "активно" его изучает, то как правило на предметную/содержательную часть у него не остается ни времени, ни желания. Поэтому давно уже выработался рефлекс: если лепит в каждой строчке boost:: (std::, template) - результата не жди, будет только бесконечное само-совершенствование, на работу он болт положит. Нередко это сопровождается банальным зазнайством, человек мнит что он "в круге избранных", "знает язык" и все такое. Его не смущает что его код падает и глючит, ведь там такая крутизна, такой уровень обобщений! А нужно это в задаче или нет - мало волнует.Да, а сам по себе boost хорош, просто "чреват". Это как водка - ну принял стакан-другой, но зачем же нажираться как свинья? 4) человек знающий о матрицах только то, что они существуют и умеющий hello world на С++. Но через неделю с возможностью спрашивать и получать ответы у вас, поворачивает фигуру в любом направлении, трансформирует и преобразовывает с помощью пары написанных им программ. Ну hello world Вы умеете и знаете что матрицы существуют - прошу доказать свои тезисы на деле :)Название: Re: Передача координат вершин фигуры по сети Отправлено: Bepec от Март 29, 2014, 16:28 Вы упускаете делать, которую вы не сможете сделать - отвечать на вопросы :D Не отмахиваться и пулять, а отвечать :)
Название: Re: Передача координат вершин фигуры по сети Отправлено: Old от Март 29, 2014, 16:28 Если человек "активно" его изучает, то как правило на предметную/содержательную часть у него не остается ни времени, ни желания. Откуда вам это знать? :) Вы никогда активно "его" не изучали.Поэтому давно уже выработался рефлекс: если лепит в каждой строчке boost:: (std::, template) - результата не жди, будет только бесконечное само-совершенствование, на работу он болт положит. Это не рефлекс - это комплекс. На самом деле это самый обычный язык С++.Нередко это сопровождается банальным зазнайством, человек мнит что он "в круге избранных", "знает язык" и все такое. Большинство программистов на С++ знают С++, а "илиткой" себя считают, как раз неосиляторы. Которые, придумывая надуманные причины, что бы оправдать свою некомпетентность.Это как у школьников. На вопрос: "Ты сколько раз подтягиваешся?", он начинает рассказывать, что подтягиваться, плохо и это делают только лохи, а нормальные парни обходятся без подтягиваний. :) Его не смущает что его код падает и глючит, ведь там такая крутизна, такой уровень обобщений! А нужно это в задаче или нет - мало волнует. Ну тут только руки. Хреновый код можно писать и с шаблонами и без. Ну вам ли это не знать. :)Да, а сам по себе boost хорош, просто "чреват". Это как водка - ну принял стакан-другой, но зачем же нажираться как свинья? С чего вы взяли? P.S. Я не пытаюсь вас переубедить. Вы выбрали себе C++ Lite, делаете там что-то за деньги, это ваше дело. Мне наплевать. Я не понимаю, для чего вы пытаетесь отговаривать молодежь от полноценного изучения С++? Причем, чье-то желание изучить непознанное вами, вызывает у вас истерику, вы начинаете придумывать обидные прозвища инструментам, называть их уничижительно. Откуда такие комплексы? :) Название: Re: Передача координат вершин фигуры по сети Отправлено: Igors от Март 30, 2014, 09:59 Вы упускаете делать, которую вы не сможете сделать - отвечать на вопросы :D Не отмахиваться и пулять, а отвечать :) Так Вы ничего и не спрашивали :) Задайте хороший вопрос - и я постараюсь дать хороший ответ.Откуда вам это знать? ... И.т.п - Вы раздражены, пытаетесь задеть собеседника, не удается - раздражаетесь еще больше. Зачем? Отдохните, выпейте чаю или водочки, не скандальте. Это как у школьников. На вопрос: "Ты сколько раз подтягиваешся?", он начинает рассказывать, что подтягиваться, плохо и это делают только лохи, а нормальные парни обходятся без подтягиваний. :) Так и естьЦитировать - ты сколько вызовов std:: знаешь? Но это же глупо :) - ну... 200 - а я 300! Я не понимаю, для чего вы пытаетесь отговаривать молодежь от полноценного изучения С++? То что Вы считаете полноценным - по мне прямая дорога к слабоумию :) И есть "изучение" и "работа/задача", это вещи разные. И есть "знать" и "сделать" - тоже разныеНазвание: Re: Передача координат вершин фигуры по сети Отправлено: Igors от Март 30, 2014, 10:03 Ладно, вернемся к теме. Вот такой мини-вопросик, который может быть полезным
А как можно "увидеть" матрицу? Ну или визуализировать, ведь по набору чисел ничего не ясно Название: Re: Передача координат вершин фигуры по сети Отправлено: Old от Март 30, 2014, 12:04 Вы раздражены, пытаетесь задеть собеседника, не удается - раздражаетесь еще больше. Зачем? А где вы видите раздражение? :)Это констатация факта, или вы активно изучали boost? Вот и выходит, вы этого не пробовали, а мнение свое с видом эксперта высказываете. :) Но это же глупо :) Конечно глупо, так же глупо, как и говорить о ненужности/вредности технологий, о которых не имеет представления/знаете по наслышке. А уж отговаривать их изучать, по моему, вообще идиотизм. :)То что Вы считаете полноценным - по мне прямая дорога к слабоумию :) Да, C++ сложный язык, поэтому я и не предлагаю вам его освоить. :)Я выше писал уже, мне все равно. Название: Re: Передача координат вершин фигуры по сети Отправлено: Old от Март 30, 2014, 19:26 Ладно, вернемся к теме. Ладно, давайте.А как можно "увидеть" матрицу? Ну или визуализировать, ведь по набору чисел ничего не ясно Вот так сразу, в следующем же предложении, предлагаете по оффтопить? :) |