Сегодня
15 сентября 2026
13:50

Теги

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

Статьи сайта

СОЗДАНИЕ ПРЕДМЕТОВ ОБСТАНОВКИ ПОМЕЩЕНИЯ

Моделирование обстановки помещения

Создание модели автомобиля

Создание текстурной развертки для модели автомобиля

Создание анимации вращающихся колес автомобиля

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

Основы 3D-анимации, экспорт скелетной анимации

Подготовка модели к использованию скелетной анимации

Продолжаем Создание скелета для данной модели

Построение ирерархических связей между объектами и основы 3d анимирования

Особенности экспорта моделей и анимации экспортером kWXPort080719 из 3ds max 2009 

Создание модели броневика (Хэд)

megainformatic cms e-mailer

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

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

Бесплатная Система Управления Вашим Сайтом - megainformatic cms free

Путешествие в мир 3d

Путешествие в мир 3d - страница 2

Путешествие в мир 3d - страница 3

Путешествие в мир 3d - страница 4

Путешествие в мир 3d - страница 5

Путешествие в мир 3d - страница 6

Создание модели броневика (Хэд) - Анимация вращения колес

megainformatic cms express files

Моделируем девушку в 3ds max - Моделируем голову

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

Уроки Photoshop - Чудеса

megainformatic cms express files - Развертывание сайта на Вашем хостинге

Настольная игра "Веселый Буквоежка"

Уроки delphi directx 8.1

Уроки delphi directx 8.1 - Урок 1 - Введение в Delphi DirectX 8.1. Создание шаблона стартового приложения.

Уроки delphi directx 8.1 - Урок 1 - Введение в Delphi DirectX 8.1. Создание шаблона стартового приложения. Страница 2

Урок 2 Создаем и обрабатываем команды меню.

Урок 2 Создаем и обрабатываем команды меню. Страница 2

Урок 3 Оконный и полноэкранный режимы работы D3D-приложения. Управление игрой средствами DirectInput8

Урок 3 Оконный и полноэкранный режимы работы D3D-приложения. Управление игрой средствами DirectInput8 - Страница 2

Урок 3 Оконный и полноэкранный режимы работы D3D-приложения. Управление игрой средствами DirectInput8 - Страница 3

Урок 4 Построение класса приложения

Урок 4 Построение класса приложения - Страница 2

Урок 5 Построение классов игровых объектов и других необходимых классов

Урок 5 Построение классов игровых объектов и других необходимых классов - Страница 2

Урок 6 Игровая логика

Заметки по joomla - JFolder::create: Path not in open_basedir paths. Что это?

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

Урок 7 2D-анимация

Урок 8 Загрузка/Сохранение текущей игры, режим паузы, режимы часов/будильника, запуск браузера Internet Explorer для показа сайта разработчика и других интернет-ресурсов

Урок 9 Тестирование и отладка приложения

Мои Музыкальные Миры

уроки Photoshop free

Создание фотореалистичной текстуры травы

megainformatic cms express

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

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

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

Методы создания растровых изображений в Adobe Photoshop

Рабочее пространство Adobe Photoshop

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

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

Создание текстур горных пород и суши (урок 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

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

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

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

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

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