12.07.2015 Views

Февраль

Февраль

Февраль

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

codingидут расстояния до ближней и дальней плоскостей отсечения.Вполне логично будет задавать параметры проекции по событиюизменения размеров окна, ведь от этого зависят и параметрыотображения. Идем в функцию WndProc и добавляем туда обработчиксобытия WM_SIZE, код которого можно увидеть в листинге2. В этом примере мы будем использовать параллельноепроецирование. Чтобы превратить его в перспективу, замени вызовglOrtho следующей строкой:gluPerspective(45.0f, width/height, 1.0f, 100.0f);Эта перспектива будет иметь следующие характеристики:1. Угол обзора в высоту равен 45 градусам.2. Соотношение сторон просмотра соответствует соотношению сторонокна.3. Все вершины/объекты ближе 1 и больше 100 не будут видны.Перед установкой необходимой проекции требуется выбрать режимматрицы GL_PROJECTION, а после этого загрузить единичную матрицус помощью функции glLoadIdentity().ОтображениеДля отображения сцены по событию WM_PAINT мы добавим вызовфункции DrawScene (ты найдешь ее на диске). Гигантский размерэтой функции, обусловленный генерацией в ней сферы математическимметодом, не позволяет мне привести ее здесь (еслибы я загружал сферу из файла, то кода получилось бы несколькоменьше). Впрочем, если ты умеешь работать с файлами, адаптироватьпример не составит труда.Кстати, в процессе изучения исходника обрати внимание, чтодля каждого треугольника я определяю нормали, без которыхосвещение станет невозможным. Просто сформироватьполигон мало, необходимо нормализовать его, чтобы OpenGLзнал, как должен вести себя источник освещения. Помимоэтого, объекту назначается материал. В зависимости отматериала поверхности изменяется и освещение. Глянцевыеповерхности должны отбрасывать блики, а матовые — просторавномерно рассеивать свет. Размер блика также может отличатьсяв зависимости от поверхности.Полный код примера ты найдешь на DVD. Что в нем не хватает? Пространственныхпреобразований и выреза. Вырез сделать программноне так уж и сложно, а вот преобразования — достаточно интереснаятема, и для ее раскрытия нужна отдельная статья. Про DirectX-преобразованияя писал в своих книгах «Искусство программирования игрна C++» и «Direct и С++. Искусство программирования». Вторая книгаимеет вариант и для Delphi.Зачет!Исходный код готового примера — это, конечно, хорошо, но нужно ещеуметь объяснить этот код (а еще лучше — знать предмет :)). Существуетмножество вариантов тестов глубины, алгоритмов освещений, и, плаваяв этой теме, будь готов к тому, что знающий препод может легко поставитьтебя в тупик. Так что, если ты прогулял целый семестр и не знаешьOpenGL, лучше купи книгу и наверстай упущенное. Это необходимоне только для сдачи экзаменов, но и просто для себя, ведь мы учимсяне ради оценок, а ради знаний, без которых после окончания институтадиплом не стоит ничего. zxàêåð 02 /98/ 07/129

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!