3D Engineering

...Лучшее из общего.

  • Увеличить размер шрифта
  • Размер шрифта по умолчанию
  • Уменьшить размер шрифта

Матрица проекций обекта изначально

О чем?

Теперь мы создадим класс объекта сцены и научимся его отображать, а так же крутить. Сделаем что-то такое, тут планета и вокруг нее, по орбите, крутятся корабли:

Объектное ориентирование.

Для дальнейшего изучения вы должны разобраться, что такое классы и указатели и как с ними работать! Так же я надеюсь вы знаете что такое вектора матрицы и операции над ними.

Для отображения множества объектов в сцене я решил создать класс объектов. В программе будет создан массив указателей на объекты созданные в памяти. Сам файл примера берите >тут

Переменные:

LPDIRECT3DDEVICE9              *pd3dDevice;   // Our rendering device

D3DXMATRIXA16                          GOMatrix;   // матрица проекций обекта, изначально клон мировой матрицы

D3DXMATRIX GOMatrixDef;

LPD3DXMESH                                       pMesh;   // собственно сетка объекта

D3DMATERIAL9*                  pMeshMaterials;   // материалы объекта

LPDIRECT3DTEXTURE9*     pMeshTextures;   // текстуры объекта

DWORD                                  dwNumMaterials;  // число материалов объекта

Функции:

InitGeometry(LPCSTR filename) не претерпела изменений, она только стала получать параметр – имя файла. У меня он сразу с путем. То как подставить путь к имени файла видно из примера с загрузкой текстуры.

GORender() вобрала в себя код  отображения объекта и его частей с нанесением текстур уже знакомый нам.

rotateYL(float timeFactor) просто поворачивает матрицу объекта, для привнесения некоторой динамики в сцену. Функцией D3DXMatrixRotationY( &GOMatrix, timeGetTime()/timeFactor ); мы устанавливаем угол на timeGetTime()/timeFactor, при этом значение timeGetTime() обеспечивает увеличение угла с течением времени.

Обратим внимание на конструктор:

CGObject_static(LPDIRECT3DDEVICE9 *Device,D3DXMATRIXA16* matrix)

//нам при создании объекта нужно передать в него мировую матрицу и 3d девайс

{              pd3dDevice = Device;                       // получаем 3д девайс

    GOMatrix = *matrix;                                  // получаем мировую матрицу проекции

                D3DXMatrixIdentity(&GOMatrix);  // обрабатываем созданную матрицу

};

Создаем объекты.

Так как это первый пример, я не буду создавать массива объектов. В graphic_dx.cpp вам должно быть все понятно, если вы следовали моим инструкциям. Обратим внимание на то, что теперь мы можем легко добавлять объекты:

 

//прописав новую переменную

CGObject_static object(d3dDevice,&matWorld);

//Инициализировав в объекте геометрию (в функции InitGeometry())

object.InitGeometry("models\\модель.x");

//отрисовав объект(в Render())

object.GORender();

//возможно включив ему вращение

object.rotateYL(8500.0f);

Не забывайте убирать из памяти объекты и переменные созданные в процессе работы программы через указатели, например через деструктор (в Cleanup()) иначе вы можете потом удивляться странным результатам работы программы или полюбоваться на экстренную перезагрузку компа :)

object.~CGObject_static();

Клавиатура и мышь.

В принципе можно было использовать directinput, однако, чтобы не заморачиваться, я использовал более простой подход взятый из примера с opensource.net

Кажется, тут все понятно и не вижу смысла подробно объяснять, учитывая, что впереди еще много чего я объясню, а если бы я стал останавливаться здесь, то укоротилась бы другая тема, а она вам надо?)

Иллюзия освещения.

В моем примере (пример 5) создается ощущение, что на планете тень, однако это не так, просто я установил у источника света дальность освещения, а ambient-свет сделал темно синем и слабым. Вообщем эффектно, но просто)

Итог.

Сцена, конечно, получилась не великая, но когда я сам ее сделал, то я был в шоке! Ведь то, что я делал раннее было не так прикольно, а ведь все писалось мной самим, а не чьими-то библиотеками, когда делаешь что то своими руками это всегда приятно). Еще интересен тот момент, что объекты можно позиционировать в 3dsMax и использовать его как редактор карт, как и делают многие, что будет описано далее, в соответствующей части.

 

Архив статей

 май   Июнь 2019   июл

ВПВСЧПС
   1
  2  3  4  5  6  7  8
  9101112131415
16171819202122
23242526272829
30 
Julianna Willis Technology

Случайная новость

Здесь я применил ту же самую технику, с той лишь разницей, что использовал больше картинок “dirt masks”, примерно шесть, и вновь с диска “TOTAL TEXTURES CDs”. Кроме того, я изготовил собственную “dirt mask”, которая будет имитировать дополнительные царапины. Для этого самой тонкой кистью я нанес несколько штрихов сверху вниз. После этого я сохранил полученную текстуру в .JPEG файл. Открыв его снова, я преобразовал его из RGB в Grayscale. С помощью фильтра “Brightness/ Contrast” я быстро изготовил собственные карты “Bump” и “Glossiness”.

далее