Создание 3D Engine. Часть 2.
В этой части рассмотрим еще один алгоритм формирования 3Д сцен, так же выложу исходники первых версий движка, 2 написаны под DirectX, 3-я под OpenGL, правда в этих проектах не будет множества эффектов, которые написаны для последней версии, нет в версиях столкновения со сценами, но они проще в разборе, т.к. нет того объема кода что в последней версии.
struct Map_Object
{
int chrome; //применяется или нет эффект хрома
int n_tex_chrome; //номер текстуры для хрома
int f_blend_chrome; //прозрачность
float color_chrome[4]; //RGBA значения
int Visible; //видим или нет полигон
int ntexture; //номер текстуры для полигона
float x1,x2,x3; //координаты вершин полигона
float y1,y2,y3;
float z1,z2,z3;
float t_x1,t_x2,t_x3; //координаты текстуры (x-t,y-s)
float t_y1,t_y2,t_y3;
float nx1,nx2,nx3; //нормали для вершин
float ny1,ny2,ny3;
float nz1,nz2,nz3;
};
Разбиение сцены на сектора хранится в динамически выделяемом массиве структур:
struct Portal{
…
int polygon_begin; //номер 1-го полигона
int polygon_end; //номер последнего полигона
int nsv; //кол-во порталов
float *x1, *x2, *x3, *x4; //описание портала
float *y1, *y2, *y3, *y4;
float *z1, *z2, *z3, *z4;
int *type; //тип портала
…
};
Структура хранения обектов сцены
В каждом секторе могут находиться различные обекты, которые могут содержать в себе анимацию. Обекты загружаются в программу из файлов формата 3DS, созданных в 3D StudioMax. Для хранения этих обектов была создана следующая структура:
struct G_Object
{
…
kfmesh3ds *obj; //ключи анимации
int length_anim; //длина анимации
float cur_key; //текущий ключ
int num_obj; //кол-во подобъектов
G_Object *Object; //подобъекты
IA3dSource *a3dsrc ; //хранится звук (A3D)
char sound_name[250]; //имя звука
float sound_length; //дальность звучания
int f_blend; //прозрачность есть/нет
int type; //тип объекта
int nVertex; //кол-во вершин
float *Vertex; //вершины
float *VColor; //цвет вершин
int Visible; //видим или нет объект
int nportal; //принадлежность сектору
int texture; //номер текстуры
…
};
В рубрике: Программирование » Свои разработки » Софт
Теги: алгоритм исходники портал разработка растовая графика сектор сцена трассировка лучей
Вы можете следить за комментариями к этой записи поRSS
Оставьте комментарий