Opengl для чайников
Ну, на самом деле я ни такой тупой, как может показаться и пример с матричным аналогом команды транслейт я понял, но многих вещей все равно не могу понять.
Мб просто потому, что про непосредственно про язык рассказывать проще, чем про предметную область (в данном случае про 3д графику на опен гл)?
Мб просто потому, что про непосредственно про язык рассказывать проще, чем про предметную область (в данном случае про 3д графику на опен гл)?Вполне может быть, но тем не менее, хотелось бы знать, лучшее ли это из того, что человечество придумало для opengl, или есть книги, где все это разбирается подробнее.
долгий и ни разу не понятный аналог с матрицами и их перемножениеэто как раз не аналог, а описание того, что делает glTranslate читай внимательнее.
Если red book плохо идет, почитай что-нибудь другое - материалов в сети валяется множество;
оптимально, на мой взгляд, использовать одновременно несколько книг/мануалов
не уверен, что мои рекомендации тебе помогут - но, например, можешь взять еще "OpenGL SuperBible" и, собсно, спеки OpenGL
Книги, где все разбирается подробнее, очевидно, есть. Уверен, чуть позже кто-нибудь даст стоящий совет
методичку Баяковского (препод кафедры машинной графики ВМиК).
Да и вообще: http://courses.graphicon.ru/ для начала - мне понравилось.
Ну можно для начала поботать Да и вообще: http://courses.graphicon.ru/ для начала - мне понравилось.
Для разбега - http://nehe.gamedev.net (код + пояснения для многих языков; имеется перевод а потом начинать курить шейдеры - без них сейчас никуда.
это как раз не аналог, а описание того, что делает glTranslateПредставляешь, в описании функции pow(x,y) тебе бы долго рассказывали, что сначала по такому-то ряду тейлора мы считаем логарифм x, затем умножаем его на y, и по такому-то ряду тейлора возводим e в степень того, что получилось - вместо того, чтобы просто сказать "функция pow(x,y) возводит x в степень y"?
Как оно реализовано, тебе в большинстве случаев не то, что ненужно знать - нельзя знать, потому что, если ты будешь знать не то, что делает функция, а то, как она это делает - всё, что ты напишешь, перестанет работать с выходом следующей версии api, где, при прежнем интерфейсе, реализация будет чуть-чуть другая.
функция pow(x,y) возводит x в степень yДело в том, что "умножение на матрицу трансляции" и "перенос" в этом случае абсолютно эквивалентны. Ты же описываешь один из многих алгоритмов возведения в степень.
Кроме того, матрицы предназначены для описания любого преобразования. И ещё надо объяснить, что перенос-поворот вовсе не тоже самое, что поворот-перенос. Так что, на мой взгляд, в книгах подход более-менее правильный. Автору просто хочется всё и сразу, и лень разбираться.
Ты же описываешь один из многих алгоритмов возведения в степень.Умножение на матрицу - это тоже алгоритм... разве не так?
И ещё надо объяснить, что перенос-поворот вовсе не тоже самое, что поворот-переносМне жаль тебя и тех, кого ты учишь (если ты кого-то учишь если ты не знаешь, как объяснить это без матриц.
Умножение на матрицу - это тоже алгоритм... разве не так?Ты не учёл, что в книгах не пишут, как именно умножают OpenGL-ные функции: через расширения процессоров, руками, на ассемблере, и т.п. Там рассказывают о результате: вектор при таком умножении транслируется.
В некотором роде, описание базовой математики - это и есть описание того, что происходит при вызове функции: x возводится в степень y, вектор умножается на матрицу и его координаты меняются на определённые значения и т.п.
Я предпочёл бы видеть в учебнике по OpenGL что-нибудь вроде:
Функция *** поворачивает arg1 объект на arg2 градусов вокруг arg3 оси (как именно происзодит такой поворот, читатель может прочитать в учебнике по линейной алгебре/аналитической геометрии [123]), а не
Функция *** принимает на вход три аргумента - объект, число и вектор, после чего к каждой точке объекта применяется формула **десять страниц формул с матрицами
x возводится в степень y,...вектор как-то там переносится.
Заметь, там, где x возводится в степень y, нету описания того, что же это такое - возведение в степень.
Функция *** принимает на вход три аргумента - объект, число и вектор, после чего к каждой точке объекта применяется формула **десять страниц формул с матрицамиВ учебниках обычно написано и первое, и второе. Просто их обычно пишут не для полных идиотов. Тем более, все преобразования в OpenGL основаны на матрицах. Какой смысл называть их "абстрактными структурами, которые предназначены для преобразования векторов", которые надо создавать "с вызова identity, а затем последовательными вызовами translate, rotate, scale"?
Заметь, там, где x возводится в степень y, нету описания того, что же это такое - возведение в степень.Ну и что? Если бы это была математическая библиотека, то было бы как описание того, что такое возведение в степень, так и точное описание алгоритма, как это происходит.
Кроме того, в описании математики по матрицам будут другие плюсы: вместо того, чтобы каждый раз строить матрицы с нуля, запоминая отдельно координаты переноса, поворота и пр., человек будет строить и запоминать одну матрицу. В твоём случае придётся делать отдельную главу: "Запоминание преобразований".
OpenGL - это библиотека для работы с матрицами или с трёхмерными объектами и векторами?
Со всем этим и не только, разумеется.
Человеку, которому не хочется знать, что команда glTranslate умножает текущую матрицу на матрицу переноса, не следует изучать OpenGL, только и всего. Не нужно это. Такому человеку лучше изучить ексель, там, или ворд. Потому что иначе он "изучит" опенГл, а потом применит свои "знания" на практике и луна налетит на земную ось.
OpenGL - это библиотека для работы с матрицами или с трёхмерными объектами и векторами?Это библиотека для работы с примитивами. Вся работа основана на матрицах и векторах. Это довольно низкоуровневая библиотека, где ты сам должен заботиться о деталях рендеринга твоей трёхмерной сцены, но не должен заботиться о конкретной реализации математических преобразований: они могут быть как аппаратными, так и программными с различными алгоритмами.
Мне гравятся книги, где все построено последовательно, а именно - сначала экскурс в саму проблематику, а затем азы, далее уже вещи посложнее и в конце, так сказать мастер класс. Тут же мы видим, что сначала вам дают азы, а затем рассказывают, что такое opengl и как оно устроено. Мда, печально на мой взгляд... Мне бы хотелось видеть книгу, по которой можно было бы последовательно изучать предмет, где для всех примеров был бы комментарий, причем не для одной строчки, а для всех и сразу, пусть даже такого вида:"...а вот эта команда делает то и то, но мы подробнее рассмотрим ее в такой то главе." Пожалуйста, на спорьте друг с другом, как нужно излагать, и что объяснять, а что нет, просто подскажите книгу, где все было бы последовательно и подробно описано! Еще раз спасибо всем.
Оставить комментарий
Elena31
Недавно начал изучать Opengl и взялся за так называемую ред бук, но вот освоение как-то быстро пошло на нет. Не очень мне нравится, как сея книга написана, а конкретнее следующее:1. Уж очень много в этой книге лишних и, на мой взгляд, туманящих сознание вещей написано. Например: читал я про команду glTranslate(аргументы) и понял, что она тупо сдвигает нарисованный объект, а вот зачем туда вставили долгий и ни разу не понятный аналог с матрицами и их перемножение, я так и не усек... Полезно, конечно, мозг поразмять, но вот зачем? Пока я это читал, забыл, про что предыдущая глава была!
2. Книга построена таким образом, что когда ты видишь пример программы, то ты понимаешь из нее только ту часть кода, которая отвечает тематически той главе, которую ты читаешь(тут для пафосности я применил преувеличение, но тем не менее и такое бывает а все остальное для тебя остается таинственной кухней... Смотришь, значит, ты на три понятные тебе строчки кода и охереваешь потихоньку.
3. Нередко бывает такое, что одна функция описана несколько раз, в разных главах и с разных точек зрения. Неприятно.
В целом книга оставила после себя очень плохое впечатление. В общем, мне бы очень хотелось, что бы кто-нибудь посоветовал бы мне книгу "для чайников", или что-нибудь в духе Шилдта. Из Шилдта я читал и С++, и С#(.NET 2.0 но как ни странно все понимал, да еще и с первого раза, а вот с opengl касяк какой-то...
Спасибо всем заранее, жду ответов!