[к содержанию] [назад] [далее] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Создание изображений огня, воды, неба
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
[к содержанию] [назад] [далее] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Онлайн-комикс Костя Коробкин - В гостях у тёти Светы - интерактивный комикс (kk as).
А теперь нам Светлана скажет при помощи чего передвигаются половые клетки животных.
[страница 1][страница 2] [страница 3] [страница 4] [страница 5] [страница 6] [страница 7] [страница 8] [страница 9] [страница 10] [страница 11] [страница 12] [страница 13] [страница 14]
![]() |
||
Как создать игру ? - Программируем сами. Рассмотрение программирования игр под DirectX 9c на C++ с использованием среды разработки MSVS 2005 или выше. |
||
[содержание] [назад] [страница 1] [далее] | ||
Vertices - Вершины - страница 1 | ||
Итогом вставки новой созданной иконки должно стать для Вас сохранение изменений в проект (кнопка Save All на панели инструментов MSVS) и выполнением сборки проекта - по клавише [F7]. Еще раз напомню, что для сборки отладочной версии Debug нужно выбрать соответствующую конфигурацию проекта - в панели инструментов есть соответствующий выпадающий список. Release - конфигурация отличается отсутствием отладочной информации, поэтому отлаживать приложение в таком режиме сборки нельзя. Зато когда Вы отловите все ошибки в коде, тогда можно создать окончательный релиз. |
||
Если Вы уже вдоволь наигрались с проектом CreateDevice - сохраняем все внесенные изменения и закрываем проект File > Close Solution. Переходим к примерам Vertices, Matrices, Lights, Textures, Meshes |
||
Все настойки в этих проектах нужно делать абсолютно аналогично, как это описывалось на протяжении наших предыдущих уроков, а более конкретно в уроке - Самый первый шаг - страница 3 | ||
В примере Vertices рассматривается как работать с вершинами в 3d-пространстве. Теперь уже наше приложение будет выполнять более полезную работу - выведет на экран разноцветный треугольник. |
||
![]() |
||
По сравнению с предыдущим примером CreateDevice здесь уже рассматривается как создается и инициализируется вершинный буфер для модели треугольника. Треугольник хоть и плоский, но это уже модель, в примере Matrices показано как создать его вращение вокруг своей оси (по оси Y). | ||
Функция wWinMain включает использование новой функции - //
Create the vertex buffer //... } другое важное отличие - видоизменен цикл обработки сообщений, теперь он выглядит как //
Enter the message loop Т. е. если сообщения поступают в приложение, они обрабатываются, если нет - выполняется функция Render - другими словами отрисовка выполняется во время нахождения приложения в состоянии бездействия Idle - это и есть то состояние, когда нет системных сообщений, адресованных Вашему приложению. |
||
Функция InitVB HRESULT
InitVB() //заметьте, что цвет каждой вершины в формате AARRGGBB задается именно здесь! //о
формате задания цвета и определении конкретного цвета мы говорили в уроке
- CreateDevice страница 2
// Создаем вершинный буфер. Здесь мы выделяем достаточно
памяти для вершин
// Теперь мы заполняем вершинный буфер. Для этого
вызываем Lock() для VB
return S_OK; |
||
Функция Cleanup теперь включает освобождение объекта вершинного буфера. Функция Render включает новый код для рисования модели треугольника - //
начало сцены //
шагов. Мы передаем вершины в поток, поэтому первое - это определение
// Полнофункциональные, настраиваемые вершинные шейдеры - это //
выполняет фактическое рисование
// конец сцены |
||
Функция MsgProc не включает обработки сообщения WM_PAINT, потому что все d3d-приложения должны выполнять отрисовку находясь в состоянии Idle. | ||
Обратите внимание также на начало модуля Vertices.cpp //----------------------------------------------------------------------------- //
структура определяющая собственный тип вершин // наш настраиваемый тип вершин FVF, который определяет какой тип вершин
// используется для их описания |
||
Чтобы проверить насколько Вам ясно как работать с вершинами - попробуйте вывести вместо треугольника - квадрат. Цвета вершин также измените. | ||
![]() |
||
Сначала посмотрите на приведенный рисунок и определите как были описаны координаты для треугольника: 150.0f, 50.0f - это вершина, отмеченная на рисунке цифрой 1, 250.0f, 250.0f - вершина номер 2 и 50.0f, 250.0f - вершина номер 3. Заметьте, что вершины определены в порядке обхода по-часовой стрелке. Это правило для определения видимых граней модели. Если вершины оказываются повернуты к экрану той гранью, где они следуют против часовой стрелки, то такая грань считается невидимой для зрителя стороной и не отрисовывается ! |
||
Теперь можно легко определить вершины для нашего квадрата - CUSTOMVERTEX
vertices[] = { 250.0f, 50.0f, 0.5f, 1.0f, 0xff00ff00, }, { 250.0f, 250.0f, 0.5f, 1.0f, 0xff00ffff, }, {
50.0f, 250.0f, 0.5f, 1.0f, 0xff00ffff, }, |
||
Однако даже правильно изменив количество вершин с 3 на 4 и правильно указав это число в строке кода if(
FAILED( g_pd3dDevice->CreateVertexBuffer( 4 * sizeof( CUSTOMVERTEX
), И указав количество отрисовываемых примитивов в функции Render в строке - g_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLELIST, 0, 2 ); в количестве 2 вместо 1 |
||
Результатом будет - | ||
![]() |
||
А всё дело в том, что D3D-приспособлен понимать только треугольные грани - состоящие из треугольников. Это сделано из-за того, что три вершины образующие треугольную грань всегда находятся в одной плоскости и следовательно так проще обсчитывать прорисовку сложных моделей. | ||
Значит нам, для создания модели квадрата, состоящего из 2х треугольных граней нужно использовать не 4, а 6 вершин - | ||
CUSTOMVERTEX
vertices[] = { 250.0f, 50.0f, 0.5f, 1.0f, 0xff00ff00, }, { 250.0f, 250.0f, 0.5f, 1.0f, 0xff0000ff, }, { 250.0f, 250.0f, 0.5f, 1.0f, 0xff00ffff, }, { 50.0f, 250.0f, 0.5f, 1.0f, 0xffffff00, }, { 50.0f, 50.0f, 0.5f, 1.0f, 0xff0000ff, },
|
||
![]() |
||
Важен и порядок, в котором определена вторая тройка вершин. Если они будут определены в другом порядке, то вторая грань (второй треугольник) выведен не будет. Попробуйте изменить порядок второй тройки вершин и убедитесь в этом сами. | ||
На рисунке также отчетливо видно какая из вершин в какой цвет окрашена, так что будет более понятно где и какая вершина. На первых порах задайте для каждой из вершин свой цвет - тогда легче будет увидеть где нужная вершина. | ||
[содержание] [назад] [страница 3] [далее] | ||
![]() |
||
Как создать игру ? - Программируем сами. Рассмотрение программирования игр под DirectX 9c на C++ с использованием среды разработки MSVS 2005 или выше. |
||
[содержание] [назад] [страница 3] [далее] | ||
Самый первый шаг - страница 3 | ||
В процессе компиляции примера CreateDevice почти наверняка у Вас будут ошибки. Ошибки эти связаны не с правильностью написанного кода, если Вы конечно сами его пока не изменяли, а с подключением заголовочных и библиотечных файлов. |
||
Устраним этот важный и существенный недочет, который доставляет так много хлопот новичкам, готовым к созданию игр, но новые и новые трудности никак не дают достичь желаемого и встают на пути. | ||
Выполним настройки проекта CreateDevice | ||
В окне Solution Explorer выберите строку CreateDevice | ||
Далее выберите пункт меню Project > Properties | ||
В открывшемся окне CreateDevice Property Pages в левой его части найдите и нажмите на "+" около наименования Configuration Properties | ||
Нам будут нужны всего 2 узла: C/C++ и Linker | ||
![]() |
||
раскрываем эти узлы и прописываем внутри них - для C/C++ / General в поле Additional Include Directories - ..\..\..\..\..\Include\;..\..\..\DXUT\Core |
||
![]() |
||
для Linker / General Additional Library Directories - ..\..\..\..\..\Lib\x86; |
||
![]() |
||
возможно еще придется указать имена файлов библиотек - Linker / Input для Configuration Debug Additional Dependencies - d3dxof.lib dxguid.lib d3dx9d.lib d3d9.lib winmm.lib и Linker / Input для Configuration Release Additional Dependencies - d3dxof.lib dxguid.lib d3dx9.lib d3d9.lib winmm.lib Обратите внимание красным цветом я отметил имена файлов библиотек, которые отличны для отладочной Debug и окончательной Release сборки проекта. |
||
![]() |
||
После таких настроек и нажатия кнопки OK или Применить, с последующей сборкой проекта в режиме конфигурации Debug или Release ошибок быть не должно. | ||
Ну и наконец последний, и самый волнительный момент - открываем папку C:\DXSDK_Aug2008\Samples\C++\Direct3D\Tutorials\Tut01_CreateDevice\Debug или C:\DXSDK_Aug2008\Samples\C++\Direct3D\Tutorials\Tut01_CreateDevice\Release в зависимости от того, что Вы собирали - отладочную или окончательную версию проекта и запускаем файл CreateDevice.exe двойным кликом по нему. |
||
![]() |
||
Как видим - перед нами небольшое окно, вся рабочая область которого заполнена синим цветом. Окно имеет заголовок D3D Tutorial 01: Create Device, именно тот самый текст, который был указан в качестве второго параметра функции CreateWindow в коде функции wWinMain. Окно ведет себя как самое типичное Windows-приложение - его можно перемещать по экрану, менять в размере, сворачивать, увеличивать во весь экран. При выборе кнопки X в правой части заголовка окна приложение завершит работу. |
||
Итак, подведем итоги: 1) Мы посмотрели кое-что из того, как работать в среде MSVS, если Ваш опыт в этом деле недостаточен - тренируйтесь и еще раз тренируйтесь - и мы это будем делать на протяжении всех последующих уроков; 2) Создали самое что-ни-на-есть простейшее DirectX-приложение, конечно Вам тут нужно еще попрактиковаться, разобраться что к чему, почитать в конце концов справочное руководство по DirectX и MSVS. Но кое-что я думаю Вы уже должны усвоить, например, как сменить цвет заполнения рабочей области окна с синего на какой-то другой, или как изменить название заголовка окна. Если Вы знаете ответ на эти вопросы - значит можно с уверенностью сказать что кое в чем Вы уже разобрались ! 3) Нам нужно еще попробовать модифицировать наше приложение для проверки и отладки, а также усвоения выданной Вам порции информации для размышления. Этим мы и займемся в следующем нашем уроке - далее |
||
[содержание] [назад] [страница 3] [далее] | ||