Сегодня
28 апреля 2024
17:17
Вход Sign In Регистрация Sign Up Забыли пароль ? Forgot password ?
VARVE - Рисование персонажей (урок 6)
        [к содержанию] [назад] [далее]      
подробнее...

Теги

сайты, игры, дизайн, продвижение, php, html, css, my sql, c++, delphi, photoshop, 3ds max, fl studio, трекерская музыка, уроки

Статьи сайта

Бесшовные (тайловые) текстуры

Создание изображений огня, воды, неба

Создание текстур горных пород и суши (урок 5)

Рисование персонажей (урок 6)

Рисование фона (урок 6 часть 2)

Рельефные изображения

Добавление статей на сайт под управлением megainformatic cms express

Воспроизведение файлов в форматах it, xm, s3m, mod

Воспроизведение файлов в форматах it, xm, s3m, mod - страница 2

Воспроизведение в игре музыки в формате XM

Воспроизведение файлов в формате OGG Vorbis

игра "Веселый Буквоежка" - инструменты разработки

Игра "Веселый Буквоежка" - история создания проекта

Как анимировать паука ?

Моделируем девушку в 3ds max - Текстурируем модель

Моделируем девушку в 3ds max - Текстурируем модель страница 2

Моделируем девушку в 3ds max - Текстурируем модель страница 3

Моделируем девушку в 3ds max - Текстурируем модель страница 4

Моделируем девушку в 3ds max - Текстурируем модель страница 5

Что нужно для создания собственного сайта ?

Моделируем девушку в 3d используя 3ds max

Уроки Fruity Loops Studio - пишем свою музыку

Уроки Fruity Loops Studio - пишем свою музыку - урок 1 - Быстрый старт

Сброник статей по дизайну и компьютерной графике. Обзор.

Уроки 3d на delphi directx - Вывод Заставки

Добро пожаловать в систему управления сайтом megainformatic cms

Создание эскиза и макета страницы сайта

Верстка созданного макета

Добавление модулей обеспечивающих минимально необходимый функционал

Основы добавления контента на сайт, управления и поддержки сайта

Проверка работы сайта, установка на хостинг

Основы продвижения созданного сайта

Создание шаблонов

Создание интернет-магазина

Музыкальные мир - композиция Морозное утро - 10 версий

ЛЕТО

Нечто Необъяснимое - пре релиз

megainformatic cms admin

megainformatic cms admin

Основы создания 3d игр - проект Тайны Морских Глубин

уроки delphi directx 8.1 3d - Основы Вращений и Управления камерой

megainformatic cms seo

Моделируем девушку в 3ds max - Создаем скелет для модели

Моделируем девушку в 3d - Подготовка 2d-эскиза тела человека

megainformatic cms stat kit

megainformatic cms seo

Теория и практика 3d игр - О Кватернионах

Теория и практика 3d игр - Основы теории векторов

Теория и практика 3d игр - Важные замечания

Моделируем девушку в 3d используя 3ds max - Подготовка к моделированию ноги - готовим ширму

Моделируем девушку в 3d используя 3ds max - Выполняем моделирование ноги

Моделируем девушку в 3d используя 3ds max - Улучшаем созданную модель женской ножки

megainformatic cms stat kit

Подводная лодка и подводный мир

megainformatic cms - Форма для смены шаблонов сайта - модуль template selector

megainformatic cms social

megainformatic cms social Руководство пользователя

megainformatic cms - Форма для смены шаблонов сайта - модуль template selector

модуль слайдера

ТЗ на сайт коллективных покупок

Моделируем девушку в 3ds max - Знакомимся с основами анимации созданного персонажа

Моделируем девушку в 3ds max - Знакомимся с основами анимации созданного персонажа страница 2

Поддержка сайтом нескольких языков - модуль multi lang

Моделируем девушку в 3ds max - Выполняем экспорт созданной модели в формат X

Моделируем девушку в 3d используя 3ds max - другие статьи сборника статей - обзор

установка нового шаблона в joomla 2.5.4

Описание продукта megainformatic cms social

Моделируем девушку в 3ds max - Рассматриваем особенности работы с анимированными персонажами в приложениях C++ DirectX 9

Моделируем девушку в 3ds max - Подводим общие итоги проделанной работы

megainformatic cms groupon

дизайн сайта строительной компании УЛЬТРА-СТРОЙ

Тестирование подключения платежной системы

Выпадающее окно регистрации на сайте

Тестирование подключения к платежной системе с использованием скрипта эмулятора

Модуль для регистрации пользователя на сайте

Код для модуля регистрации пользователя на сайте

Быстрый подсчёт ключевых слов в статье

Модуль подсчёта ключевых слов в статье

Онлайн-сервис для подсчёта статистики ключевых слов

Пишем слайдер на javascript с нуля

Логика работы слайдера на javascript

Пишем свою соц. сеть - модуль предложений для webjob

Пишем свою соц. сеть - модуль предложений для webjob - часть реализации для личного кабинета

Пишем свою соц. сеть - Реализация файлового хранилища предложений в csv-файле

Тестирование подключения к платежной системе ЕДИНЫЙ КОШЕЛЕК (w1.ru) с использованием скрипта эмулятора

Пишем свою cms - шаг 1

Пишем свою cms - шаг 2

Пишем свою cms - шаг 3

бесплатная флеш игра freeway fury 2 - разработчик Serius Games

бесплатные флеш игры сторонних разработчиков

Как я осваивал Flash

Список уроков на тему создания flash приложений и игр

Как я осваивал Flash - шаг 2 - Основы создания простейших flash - игр

проект портала Идеи Комфорта

игра Веселый Буквоежка

игра Веселый Буквоежка

Использование cron, crontab и планировщика задач

Совместное использование jquery и mootools или других js-фреймворков

Модуль content php performer для megainformatic cms

Пишем компактный слайдер

Что нужно знать для создания сайта ?

Что нужно знать для создания сайта ? Глава 2 - Кодировки и DOCTYPE

Что нужно знать для создания сайта ? Глава 3 - Идём дальше - нанизываем новый код - где объявляются стили css и код javascript

Что нужно знать для создания сайта ? Содержание

Что нужно знать для создания сайта ? css - стили

preg_match или Использование регулярных выражений в php

статьи Тимонина Андрея - Flash. Содержание

статья Тимонина Андрея - Flash. Подготовка к работе.

статья Тимонина Андрея - Flash. Hello world.

статья Тимонина Андрея - Flash. Экспорт SWC библиотеки.

Тимонин Андрей - Несколько слов о себе

статьи Тимонина Андрея - уроки из области веб программирования, создания казуальных игр

статья Тимонина Андрея - Обеспечиваем доступ к объекту из любой точки программы. Singleton

статья Тимонина Андрея - Хронология работы программы. Создаем Лог

статья Тимонина Андрея - Поиск файлов. Получаем список файлов каталога.

статья Тимонина Андрея - Исключения. Создаем класс обработки исключений.

     
  Набор разработчика игр - Нечто: Необъяснимое - в плену желаний  
     
 

Как создать игру ? - Программируем сами.

Рассмотрение программирования игр под 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-пространстве.

Теперь уже наше приложение будет выполнять более полезную работу - выведет на экран разноцветный треугольник.

 
     
  пример Vertices  
     
  По сравнению с предыдущим примером CreateDevice здесь уже рассматривается как создается и инициализируется вершинный буфер для модели треугольника. Треугольник хоть и плоский, но это уже модель, в примере Matrices показано как создать его вращение вокруг своей оси (по оси Y).  
     
 

Функция wWinMain включает использование новой функции -

// Create the vertex buffer
if( SUCCEEDED( InitVB() ) )
{

//...

}

другое важное отличие - видоизменен цикл обработки сообщений, теперь он выглядит как

// Enter the message loop
MSG msg;
ZeroMemory( &msg, sizeof( msg ) );
while( msg.message != WM_QUIT )
{
if( PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
else
Render();
}

Т. е. если сообщения поступают в приложение, они обрабатываются, если нет - выполняется функция Render - другими словами отрисовка выполняется во время нахождения приложения в состоянии бездействия Idle - это и есть то состояние, когда нет системных сообщений, адресованных Вашему приложению.

 
     
 

Функция InitVB

HRESULT InitVB()
{
// инициализируем вершины создаваемого треугольника

//заметьте, что цвет каждой вершины в формате AARRGGBB задается именно здесь!

//о формате задания цвета и определении конкретного цвета мы говорили в уроке - CreateDevice страница 2
CUSTOMVERTEX vertices[] =
{
{ 150.0f, 50.0f, 0.5f, 1.0f, 0xffff0000, }, // x, y, z, rhw, color
{ 250.0f, 250.0f, 0.5f, 1.0f, 0xff00ff00, },
{ 50.0f, 250.0f, 0.5f, 1.0f, 0xff00ffff, },
};

// Создаем вершинный буфер. Здесь мы выделяем достаточно памяти для вершин
// (из буфера по-умолчанию) для хранения 3 вершин в собственном формате. Мы также
// определяем FVF, так что вершинный буфер знает, какие данные он хранит.

if( FAILED( g_pd3dDevice->CreateVertexBuffer( 3 * sizeof( CUSTOMVERTEX ),
0, D3DFVF_CUSTOMVERTEX,
D3DPOOL_DEFAULT, &g_pVB, NULL ) ) )
{
return E_FAIL;
}

// Теперь мы заполняем вершинный буфер. Для этого вызываем Lock() для VB
// для получения доступа к вершинам. Этот механизм необходим, поскольку
// буферы могут располагаться в памяти графического адаптера.

VOID* pVertices;
if( FAILED( g_pVB->Lock( 0, sizeof( vertices ), ( void** )&pVertices, 0 ) ) )
return E_FAIL;
memcpy( pVertices, vertices, sizeof( vertices ) );
g_pVB->Unlock();

return S_OK;
}

 
     
 

Функция Cleanup теперь включает освобождение объекта вершинного буфера.

Функция Render включает новый код для рисования модели треугольника -

// начало сцены
if( SUCCEEDED( g_pd3dDevice->BeginScene() ) )
{
// Рисуем треугольник из вершин в буфере. Процесс включает несколько

// шагов. Мы передаем вершины в поток, поэтому первое - это определение
// источника для этого потока, это и есть наш вершинный буфер. Затем
// нам нужно позволить D3D узнать какой вершинный шейдер использовать.

// Полнофункциональные, настраиваемые вершинные шейдеры - это
// отдельная тема для разговора, но в большинстве случаев вершинный шейдер -
// просто FVF (Flexible Vertex Format), так что D3D узнает какой тип вершин
// мы применили. Наконец, Мы вызываем функцию DrawPrimitive() которая

// выполняет фактическое рисование
// нашей геометрии (в данном примере - всего лишь 1 треугольник).

g_pd3dDevice->SetStreamSource( 0, g_pVB, 0, sizeof( CUSTOMVERTEX ) );
g_pd3dDevice->SetFVF( D3DFVF_CUSTOMVERTEX );
g_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLELIST, 0, 1 );

// конец сцены
g_pd3dDevice->EndScene();
}

 
     
  Функция MsgProc не включает обработки сообщения WM_PAINT, потому что все d3d-приложения должны выполнять отрисовку находясь в состоянии Idle.  
     
 

Обратите внимание также на начало модуля Vertices.cpp

//-----------------------------------------------------------------------------
// Глобальные переменные
//-----------------------------------------------------------------------------

LPDIRECT3D9 g_pD3D = NULL; // используется для создания D3DDevice
LPDIRECT3DDEVICE9 g_pd3dDevice = NULL; // наше устройство отрисовки
LPDIRECT3DVERTEXBUFFER9 g_pVB = NULL; // буфер для хранения вершин

// структура определяющая собственный тип вершин
struct CUSTOMVERTEX
{
FLOAT x, y, z, rhw; // преобразованная позиция вершины
DWORD color; // цвет вершины
};

// наш настраиваемый тип вершин FVF, который определяет какой тип вершин

// используется для их описания
#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZRHW|D3DFVF_DIFFUSE)

 
     
  Чтобы проверить насколько Вам ясно как работать с вершинами - попробуйте вывести вместо треугольника - квадрат. Цвета вершин также измените.  
     
  изображение модели квадрата  
     
 

Сначала посмотрите на приведенный рисунок и определите как были описаны координаты для треугольника:

150.0f, 50.0f - это вершина, отмеченная на рисунке цифрой 1,

250.0f, 250.0f - вершина номер 2 и

50.0f, 250.0f - вершина номер 3. Заметьте, что вершины определены в порядке обхода по-часовой стрелке. Это правило для определения видимых граней модели. Если вершины оказываются повернуты к экрану той гранью, где они следуют против часовой стрелки, то такая грань считается невидимой для зрителя стороной и не отрисовывается !

 
     
 

Теперь можно легко определить вершины для нашего квадрата -

CUSTOMVERTEX vertices[] =
{
{ 50.0f, 50.0f, 0.5f, 1.0f, 0xffff0000, },

{ 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 ),
0, D3DFVF_CUSTOMVERTEX,
D3DPOOL_DEFAULT, &g_pVB, NULL ) ) )

И указав количество отрисовываемых примитивов в функции Render в строке -

g_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLELIST, 0, 2 );

в количестве 2 вместо 1

 
     
  Результатом будет -  
     
  попытка рисования квадрата 1  
     
  А всё дело в том, что D3D-приспособлен понимать только треугольные грани - состоящие из треугольников. Это сделано из-за того, что три вершины образующие треугольную грань всегда находятся в одной плоскости и следовательно так проще обсчитывать прорисовку сложных моделей.  
     
  Значит нам, для создания модели квадрата, состоящего из 2х треугольных граней нужно использовать не 4, а 6 вершин -  
     
 

CUSTOMVERTEX vertices[] =
{
{ 50.0f, 50.0f, 0.5f, 1.0f, 0xffff0000, },

{ 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, },


};

 
     
  попытка рисования квадрата 2  
     
  Важен и порядок, в котором определена вторая тройка вершин. Если они будут определены в другом порядке, то вторая грань (второй треугольник) выведен не будет. Попробуйте изменить порядок второй тройки вершин и убедитесь в этом сами.  
     
  На рисунке также отчетливо видно какая из вершин в какой цвет окрашена, так что будет более понятно где и какая вершина. На первых порах задайте для каждой из вершин свой цвет - тогда легче будет увидеть где нужная вершина.  
     
     
     
     
     
  [содержание] [назад] [страница 3] [далее]  
     
 

Оставленные комментарии



Рейтинг@Mail.ru
Время загрузки: 0,0398