MASM.OpenGL.0.Introduction — Архив WASM.RU

Все статьи

MASM.OpenGL.0.Introduction — Архив WASM.RU

Немного истории

Много тысяч лет тому назад наш прапрапрадедушка собрал травы и минералы и сделал из них краски. Рисовал он пальцами или использовал некое подобие кисти неизвестно. Но то, что создал этот первобытный Мастер до сих пор поражает воображение. Стремление человека выразить себя, рассказать о том, как прекрасен мир в котором он живет, до сих пор обитает во многих из нас. Времена изменились, появились новые технологии, но все еще не перестают удивлять нас звездное небо и краски восходящего солнца.

Почти сразу с первой вычислительной машиной появились настоящие произведения виртуального искусства. Картины рисовались на мониторах при помощи ASCII символов вручную. Уже потом появились программы, которые могли преобразовывать графическое изображение в ASCII-Art.

Появление мониторов с примитивным цветным графическим режимам, подняло виртуальное искусство на качественно новый уровень. Среди компьютерных фанатов появились художники, способные буквально из нескольких десятков байт создать нетривиальные анимированные графические изображения. У команд - "исследователей" коммерческих программ стали появляться визитные карточки - программы, рисовавшие оригинальные графические сцены. Они распространялись вместе с "патчами" (например, посмотрите файл protocols.com в архиве mental_klutt_by_psikorp.zip в конце этого текста).

Следующим этапом стало появление графических карт способных изображать достаточно убедительный 3D в реальном времени. Современная Demo Scene это виртуальное искусство, которое объединило в себе творчество художников и композиторов, людей с хорошей математической подготовкой, владеющих передовыми вычислительными технологиями.

Эти известные демо используют API OpenGL. Продолжайте чтение после просмотра h7-final.zip и mental_klutt_by_psikorp.zip

Как работать с этим текстом, чтобы хоть чему-нибудь научится

Этот текст предназначен для тех, кто впервые серьезно взялся за изучение художественного 3D моделирования с помощью API OpenGL. Прежде всего включите свое воображение, голову и поисковую систему www.google.com. Вам будут предложены задания в каждой главе, которые звучат примерно так "Постарайтесь понять в течении 10 минут как можно больше oб использовании функции 'wglCreateContext'". Не пренебрегайте этим - знаний много никогда не бывает, а добывать их эффективно нужно учится. Без этого не стоит браться за вдумчивую работу с этим текстом.

Мы будем работать в MASM32v7 из пакета пропагандиста ассемблера под Windows - Hutch'a. Знание основ ассемблера - обязательно, а изучение Уроков Win32API от Iczelion - необходимо. Неплохо иметь представление об языке С/C++, иначе будет трудно понимать описание параметров функций API OpenGL. Мы постараемся научится творчески программировать, старайтесь внести в исходник урока что-нибудь свое, не бойтесь экспериментировать, изобретать свои "эффекты". Читатели с чрезмерной тягой к "copy-paste" подходу будут отчислены от занятий.

Лучше всегда иметь под рукой следующие мануалы:

  1. Microsoft MASM v6.1 Assembly-Language Development System (Описание языка МASM)
  2. MSDN Library Visual Studio (входит в пакет Visual Studio)
  3. Сальвадор Дали "Дневник одного гения"
  4. OpenGL Programming Guide aka "The Red Book"

Почему MASM и что такое API OpenGL?

Единственная причина выбора МАSM - эстетическое удовольствие. Да, именно так. Кодировать на нем сложнее, он требует от Вас знаний намного более глубоких, чем язык Си. Хотя ассемблер и собирает программы меньшие по размеру (если сравнивать с VC) - не факт, что они будут всегда быстрее. Какой код (MASM или C/C++) будет выполнятся за меньшее время - зависит от Вас, от Вашего мастерства в нахождении самых быстрых алгоритмов - медленные алгоритмы на MASM с большой вероятностью проиграют в скорости хорошему коду на С.

Что же такое API OpenGL? Давайте договоримся, что под API (Application Programming Interface) мы будем понимать некий набор подпрограмм, которые cможем вызывать/исполнять из нашей программы. Тогда фраза "API OpenGL" будет звучать менее пугающе - это всего лишь набор подпрограмм для работы с 3D графикой. Теперь мы можем без труда понять, например, что означает фраза "Win32 API" - это просто набор подпрограмм для работы в операционной системе Windows. Рассмотрим следующий рисунок.

Художник очень упрощенно изобразил самую суть понятия API: его программа в машинном коде запускает/вызывает подпрограмму "MessageBox" из библиотеки "User32" (входит в состав Win32 API), которая показывает на экране небольшое диалоговое окно с кнопкой. Потом Художник заставил компьютер издать звуковой сигнал - просто запустил подпрограмму "Beep" из библиотеки "Kernel32" (также входит в Win32 API) Затем он обратился к API "AudioFM", которую написал его друг Музыкант. Художник разбирается в музыке плохо, а все-таки сумел воспроизвести вальс Шуберта (а затем и хруст французской булки). Как? Он просто вызвал подпрограмму из API "AudioFM".

Затем Художник мастерски изобразил на мониторе белый круг и белый же квадрат, используя API "ОpenGL". Постойте-ка, а как он это сделал? Просто вызвал пару подпрограмм из библиотеки (=API) "OpenGL"!

Почему Художник написал на схеме "программа в машинном коде"? Чтобы особо подчеркнуть - и Asm и C/C++ сгенерируют машинный код, который будет работать с одним и тем же набором подпрограмм API "OpenGL". Так или иначе, но программы на ассемблере и программы С/C++ будут обращаться к одним и тем же функциям API "ОpenGL", а как быстро будет выполнятся код "ОpenGL" зависит только от Вашей видеокарты. (Ассемблер или С++ - выбирать Вам, на скорость выполнения API OpenGL не влияет).

Все API (и API OpenGL в том числе) очень удобная штука. Попробуйте представить себе как работает ... например, телевизор. Что нужно сделать из транзисторов, ЭЛТ и электричества, чтобы телевизор включить, настроить каналы, подстроить цвета? Нам на спасенье к телевизору прилагается АPI "Пульт Дистанционного Управления". Нажал кнопку (вызвал подпрограмму) - включил телевизор, нажал другую кнопку - переключил на другой канал. Пульт работает с "железом" телевизора самостоятельно! А что будет если мы купим новую видеокарту? API OpenGL позаботится о "железе" (обратите внимание на связь API OpenGL и видеокарты на рисунке), а название ее подпрограмм и способ их вызова останутся прежними. Наша программа будет работать везде, где установлена API OpenGL и даже без помощи современных видеокарт (работать будет медленно, но работать будет :))

Итак, нам любезно предоставили дистанционный пульт управления (API "OpenGL") от наших видеокарт - на любом современном компьютере с операционной системой Windows уже установлена API OpenGL. А где у них та самая главная кнопка - "ВКЛ" мы увидим в следующей главе.

PS: Автор сознательно опустил некоторые, на его взгляд, несущественные нюансы - для облегчения понимания. Для любознательного читателя это не будет большой проблемой. В качестве разминки постарайтесь выяснить, верно ли это утверждение "API OpenGL доступен только на компьютерах с ОС Windows!", а также "Почему MASM не такой хороший язык для написания 3D редакторов на API OpenGL по сравнению, например, с Си".

2002-2013 (c) wasm.ru