Opengl для чайников

Elena31

Недавно начал изучать Opengl и взялся за так называемую ред бук, но вот освоение как-то быстро пошло на нет. Не очень мне нравится, как сея книга написана, а конкретнее следующее:
1. Уж очень много в этой книге лишних и, на мой взгляд, туманящих сознание вещей написано. Например: читал я про команду glTranslate(аргументы) и понял, что она тупо сдвигает нарисованный объект, а вот зачем туда вставили долгий и ни разу не понятный аналог с матрицами и их перемножение, я так и не усек... Полезно, конечно, мозг поразмять, но вот зачем? Пока я это читал, забыл, про что предыдущая глава была!
2. Книга построена таким образом, что когда ты видишь пример программы, то ты понимаешь из нее только ту часть кода, которая отвечает тематически той главе, которую ты читаешь(тут для пафосности я применил преувеличение, но тем не менее и такое бывает а все остальное для тебя остается таинственной кухней... Смотришь, значит, ты на три понятные тебе строчки кода и охереваешь потихоньку.
3. Нередко бывает такое, что одна функция описана несколько раз, в разных главах и с разных точек зрения. Неприятно.
В целом книга оставила после себя очень плохое впечатление. В общем, мне бы очень хотелось, что бы кто-нибудь посоветовал бы мне книгу "для чайников", или что-нибудь в духе Шилдта. Из Шилдта я читал и С++, и С#(.NET 2.0 но как ни странно все понимал, да еще и с первого раза, а вот с opengl касяк какой-то...
Спасибо всем заранее, жду ответов!

Elena31

Ну, на самом деле я ни такой тупой, как может показаться и пример с матричным аналогом команды транслейт я понял, но многих вещей все равно не могу понять. :(

Olenenok

Мб просто потому, что про непосредственно про язык рассказывать проще, чем про предметную область (в данном случае про 3д графику на опен гл)?

Elena31

Мб просто потому, что про непосредственно про язык рассказывать проще, чем про предметную область (в данном случае про 3д графику на опен гл)?
Вполне может быть, но тем не менее, хотелось бы знать, лучшее ли это из того, что человечество придумало для opengl, или есть книги, где все это разбирается подробнее.

degro

 
долгий и ни разу не понятный аналог с матрицами и их перемножение
это как раз не аналог, а описание того, что делает glTranslate ;) читай внимательнее.
Если red book плохо идет, почитай что-нибудь другое - материалов в сети валяется множество;
оптимально, на мой взгляд, использовать одновременно несколько книг/мануалов
не уверен, что мои рекомендации тебе помогут - но, например, можешь взять еще "OpenGL SuperBible" и, собсно, спеки OpenGL :grin:
Книги, где все разбирается подробнее, очевидно, есть. Уверен, чуть позже кто-нибудь даст стоящий совет

Dimon89

Ну можно для начала поботать методичку Баяковского (препод кафедры машинной графики ВМиК).
Да и вообще: http://courses.graphicon.ru/ для начала - мне понравилось.

0000

Эх, повторюсь :D
Для разбега - http://nehe.gamedev.net (код + пояснения для многих языков; имеется перевод а потом начинать курить шейдеры - без них сейчас никуда.

kruzer25

это как раз не аналог, а описание того, что делает glTranslate
Представляешь, в описании функции pow(x,y) тебе бы долго рассказывали, что сначала по такому-то ряду тейлора мы считаем логарифм x, затем умножаем его на y, и по такому-то ряду тейлора возводим e в степень того, что получилось - вместо того, чтобы просто сказать "функция pow(x,y) возводит x в степень y"?
Как оно реализовано, тебе в большинстве случаев не то, что ненужно знать - нельзя знать, потому что, если ты будешь знать не то, что делает функция, а то, как она это делает - всё, что ты напишешь, перестанет работать с выходом следующей версии api, где, при прежнем интерфейсе, реализация будет чуть-чуть другая.

kokoc88

функция pow(x,y) возводит x в степень y
Дело в том, что "умножение на матрицу трансляции" и "перенос" в этом случае абсолютно эквивалентны. Ты же описываешь один из многих алгоритмов возведения в степень.
Кроме того, матрицы предназначены для описания любого преобразования. И ещё надо объяснить, что перенос-поворот вовсе не тоже самое, что поворот-перенос. Так что, на мой взгляд, в книгах подход более-менее правильный. Автору просто хочется всё и сразу, и лень разбираться.

kruzer25

Ты же описываешь один из многих алгоритмов возведения в степень.
Умножение на матрицу - это тоже алгоритм... разве не так?
И ещё надо объяснить, что перенос-поворот вовсе не тоже самое, что поворот-перенос
Мне жаль тебя и тех, кого ты учишь (если ты кого-то учишь если ты не знаешь, как объяснить это без матриц.

kokoc88

Умножение на матрицу - это тоже алгоритм... разве не так?
Ты не учёл, что в книгах не пишут, как именно умножают OpenGL-ные функции: через расширения процессоров, руками, на ассемблере, и т.п. Там рассказывают о результате: вектор при таком умножении транслируется.
В некотором роде, описание базовой математики - это и есть описание того, что происходит при вызове функции: x возводится в степень y, вектор умножается на матрицу и его координаты меняются на определённые значения и т.п.

kruzer25

Тем не менее.
Я предпочёл бы видеть в учебнике по OpenGL что-нибудь вроде:
Функция *** поворачивает arg1 объект на arg2 градусов вокруг arg3 оси (как именно происзодит такой поворот, читатель может прочитать в учебнике по линейной алгебре/аналитической геометрии [123])
, а не
Функция *** принимает на вход три аргумента - объект, число и вектор, после чего к каждой точке объекта применяется формула **десять страниц формул с матрицами

kruzer25

x возводится в степень y,
...вектор как-то там переносится.
Заметь, там, где x возводится в степень y, нету описания того, что же это такое - возведение в степень.

kokoc88

Функция *** принимает на вход три аргумента - объект, число и вектор, после чего к каждой точке объекта применяется формула **десять страниц формул с матрицами
В учебниках обычно написано и первое, и второе. Просто их обычно пишут не для полных идиотов. Тем более, все преобразования в OpenGL основаны на матрицах. Какой смысл называть их "абстрактными структурами, которые предназначены для преобразования векторов", которые надо создавать "с вызова identity, а затем последовательными вызовами translate, rotate, scale"?

kokoc88

Заметь, там, где x возводится в степень y, нету описания того, что же это такое - возведение в степень.
Ну и что? Если бы это была математическая библиотека, то было бы как описание того, что такое возведение в степень, так и точное описание алгоритма, как это происходит.
Кроме того, в описании математики по матрицам будут другие плюсы: вместо того, чтобы каждый раз строить матрицы с нуля, запоминая отдельно координаты переноса, поворота и пр., человек будет строить и запоминать одну матрицу. В твоём случае придётся делать отдельную главу: "Запоминание преобразований".

kruzer25

Кажется, всё-таки кто-то из нас что-то не понимает.
OpenGL - это библиотека для работы с матрицами или с трёхмерными объектами и векторами?

0000

Со всем этим и не только, разумеется.

bleyman

Человеку, которому не хочется знать, что команда glTranslate умножает текущую матрицу на матрицу переноса, не следует изучать OpenGL, только и всего. Не нужно это. Такому человеку лучше изучить ексель, там, или ворд. Потому что иначе он "изучит" опенГл, а потом применит свои "знания" на практике и луна налетит на земную ось.

kokoc88

OpenGL - это библиотека для работы с матрицами или с трёхмерными объектами и векторами?
Это библиотека для работы с примитивами. Вся работа основана на матрицах и векторах. Это довольно низкоуровневая библиотека, где ты сам должен заботиться о деталях рендеринга твоей трёхмерной сцены, но не должен заботиться о конкретной реализации математических преобразований: они могут быть как аппаратными, так и программными с различными алгоритмами.

Elena31

В принципе, я полностью разделяю мнение пользователя и понимаю что неплохо знать, как оно все происходит на достаточно низком уровне, но меня смущает скорее не детальное описание команды glTranslate(.. а то, что остальные команды тебе никто не осветит, а в итоге тебе придеца глядеть в непонятный код и гадать: "Нахер вот эта строчка, а вот эта то на хер?". К тому же достаточно интересно построена книга в отношении последовательности изложения. Глава "Вид" за нумером три, расположена на 67(!) странице, то бишь нам уже показали как надо рисовать, разбивать фигуры на примитивы, нормали ставить, полигоны шаблонировать и еще там всякие вещи, а потом уже в выше упомянутой главе "Вид" нам рассказали, как там все в opengl устроено, рассказали, что есть 4 матрицы(видовые, модельные, ... которые отвечают за соответствующие преобразования, что такое трансформация порта просмотра(которая до этого в каждом примере использовалась да и вообще достаточно неплохо изъяснили, что opengl не хуй собачий... Не кажется ли вам, господа, что эту главу надо было поставить где-то в начале, что бы человек понимал, как все устроено, а не начинал рисовать, а затем воскликал: "Батюшки, а я даже и не знал, что я до этого делал!".
Мне гравятся книги, где все построено последовательно, а именно - сначала экскурс в саму проблематику, а затем азы, далее уже вещи посложнее и в конце, так сказать мастер класс. Тут же мы видим, что сначала вам дают азы, а затем рассказывают, что такое opengl и как оно устроено. Мда, печально на мой взгляд... Мне бы хотелось видеть книгу, по которой можно было бы последовательно изучать предмет, где для всех примеров был бы комментарий, причем не для одной строчки, а для всех и сразу, пусть даже такого вида:"...а вот эта команда делает то и то, но мы подробнее рассмотрим ее в такой то главе." Пожалуйста, на спорьте друг с другом, как нужно излагать, и что объяснять, а что нет, просто подскажите книгу, где все было бы последовательно и подробно описано! Еще раз спасибо всем.
Оставить комментарий
Имя или ник:
Комментарий: