Функции D3D в Game Maker - Game Maker - Конструкторы игр, системы разработки игр
Навигация по сайту
Сайт:

Дополнительно:

Файловый архив:

Каталог статей:

Форум:


Категории раздела
Game Maker [27]
Flash [3]
FPS Creator X9, X10 [1]
Scirra Construct [14]
Multimedia Fusion [0]
001 Game Maker, Map 001 [0]
3D RAD [16]
3D Game Studio [1]
Silent Walk FPS Creator [0]
Blender (Блендер) [1]
Game Editor [0]
Остальное [1]
Все остальное, что не попадает ни под одну категорию.

Мини-Опрос
Вы следите за обновлениями конструкторо игр, движков?
Всего ответов: 377

Партнеры сайта
....

Функции D3D в Game Maker

20:13
Эта тема создана для ответов на вопросы по d3d_game_maker)
Так же кроме ответов на ваши вопросы я буду писать уроки. (А возможно и видео уроки  )


в Create obj_player
Code
zdirection = 0
z=5

в Draw того же объекта под комментарием
Code
  // set the projection

удаляем код до следующего комментария, то есть до
Code
// set color and transparency

за место удаленного кода пишем
Code
d3d_set_projection(x,y,z+10, x+cos(direction*pi/180),y-sin(direction*pi/180),z+zdirection+10, 0,0,1);

в Step того же объекта прописываем
Code

change_x=(display_mouse_get_x()-(display_get_width()/2))/16    
obj_player.direction-=change_x    
display_mouse_set(display_get_width()/2,display_get_height()/2)


Уроки пока в разработке!

Как подгрузить 3D моделль Формат OBJ
Сначала в папку Scripts создадим скрипт с именем MakeObject
В него запишем


// © 2006. Zoltan Percsich. - это можно и не писать, это автор скрипта.

filename=argument0;
flipnormals = 1;
if (argument1>0) flipnormals=-1;
vertex_list1=ds_list_create();ds_list_clear(vertex_list1);ds_list_add(vertex_list1,0);
vertex_list2=ds_list_create();ds_list_clear(vertex_list2);ds_list_add(vertex_list2,0);
vertex_list3=ds_list_create();ds_list_clear(vertex_list3);ds_list_add(vertex_list3,0);
normal_list1=ds_list_create();ds_list_clear(normal_list1);ds_list_add(normal_list1,0);
normal_list2=ds_list_create();ds_list_clear(normal_list2);ds_list_add(normal_list2,0);
normal_list3=ds_list_create();ds_list_clear(normal_list3);ds_list_add(normal_list3,0);
texture_list1=ds_list_create();ds_list_clear(texture_list1);ds_list_add(texture_list1,0);
texture_list2=ds_list_create();ds_list_clear(texture_list2);ds_list_add(texture_list2,0);
faces_list=ds_list_create();ds_list_clear(faces_list);
fp=file_text_open_read(filename);

for (i=0;file_text_eof(fp)==false;i+=1) {

row=file_text_read_string(fp);row=string_replace_all(row," "," ");

if (string_char_at(row,1)=="v" && string_char_at(row,2)==" ") {
row=string_delete(row,1,string_pos(" ",row));
vx=real(string_copy(row,1,string_pos(" ",row)));
row=string_delete(row,1,string_pos(" ",row));
vy=real(string_copy(row,1,string_pos(" ",row)));
row=string_delete(row,1,string_pos(" ",row));
vz=real(string_copy(row,1,string_length(row)));
ds_list_add(vertex_list1,vx);
ds_list_add(vertex_list2,vy);
ds_list_add(vertex_list3,vz);
}

if (string_char_at(row,1)=="v" && string_char_at(row,2)=="n") {
row=string_delete(row,1,string_pos(" ",row));
nx=real(string_copy(row,1,string_pos(" ",row)));
row=string_delete(row,1,string_pos(" ",row));
ny=real(string_copy(row,1,string_pos(" ",row)));
row=string_delete(row,1,string_pos(" ",row));
nz=real(string_copy(row,1,string_length(row)));
ds_list_add(normal_list1,nx);
ds_list_add(normal_list2,ny);
ds_list_add(normal_list3,nz);
}

if (string_char_at(row,1)=="v" && string_char_at(row,2)=="t") {
row=string_delete(row,1,string_pos(" ",row));
tx=real(string_copy(row,1,string_pos(" ",row)));
row=string_delete(row,1,string_pos(" ",row));
ty=real(string_copy(row,1,string_length(row)));
ds_list_add(texture_list1,tx);
ds_list_add(texture_list2,ty);
}

if (string_char_at(row,1)=="f" && string_char_at(row,2)==" ") {
row=string_replace_all(row," "," ");
row=string_delete(row,1,string_pos(" ",row));
if (string_char_at(row,string_length(row))==" ") row=string_copy(row,0,string_length(row)-1);
face_num=string_count(" ",row);
face_division=1;
temp_faces[0]=0;

for (fc=0;fc f=string_copy(row,1,string_pos(" ",row));
row=string_delete(row,1,string_pos(" ",row));
temp_faces[face_division]=f;
face_division+=1;
}

f=string_copy(row,1,string_length(row));temp_faces[face_division]=f;
if (face_division==3) {
f1=temp_faces[2];
f2=temp_faces[3];
f3=temp_faces[1];
ds_list_add(faces_list,f1);
ds_list_add(faces_list,f2);
ds_list_add(faces_list,f3);
} else {
f1=temp_faces[2];
f2=temp_faces[3];
f3=temp_faces[1];
ds_list_add(faces_list,f1);
ds_list_add(faces_list,f2);
ds_list_add(faces_list,f3);
for (t=0;t f1=temp_faces[4+t];
f2=temp_faces[1];
f3=temp_faces[3+t];
ds_list_add(faces_list,f1);
ds_list_add(faces_list,f2);
ds_list_add(faces_list,f3);
}
}
}

file_text_readln(fp);
}
file_text_close(fp);

tm=d3d_model_create();
tsn=0;
d3d_model_primitive_begin(tm,pr_trianglelist);

for (fc=0;fc
sub_face=ds_list_find_value(faces_list,fc);

if (string_count("/",sub_face)==0) {
f_index=sub_face;
t_index=-1;
n_index=-1;
}

if (string_count("/",sub_face)==1) {
f_index=string_copy(sub_face,1,string_pos("/",sub_face)-1);
sub_face=string_delete(sub_face,1,string_pos("/",sub_face));
t_index=string_copy(sub_face,1,string_length(sub_face));
n_index=-1;
}

if (string_count("/",sub_face)==2 && string_count("//",sub_face)==0) {
f_index=string_copy(sub_face,1,string_pos("/",sub_face)-1);
sub_face= string_delete(sub_face,1,string_pos("/",sub_face));
t_index=string_copy(sub_face,1,string_pos("/",sub_face)-1);
sub_face= string_delete(sub_face,1,string_pos("/",sub_face));
n_index=string_copy(sub_face,1,string_length(sub_face));
}

if (string_count("/",sub_face)==2 && string_count("//",sub_face)==1) {
sub_face=string_replace(sub_face,"//","/");
f_index=string_copy(sub_face,1,string_pos("/",sub_face)-1);
sub_face= string_delete(sub_face,1,string_pos("/",sub_face));
t_index=-1;
n_index=string_copy(sub_face,1,string_length(sub_face));
}

vx=ds_list_find_value(vertex_list1,floor(real(f_index)));
vy=ds_list_find_value(vertex_list2,floor(real(f_index)));
vz=ds_list_find_value(vertex_list3,floor(real(f_index)));

if (floor(real(n_index))!=-1 && ds_list_size(normal_list1)>=1) {
nx=flipnormals*ds_list_find_value(normal_list1,floor(real(n_index)));
ny=flipnormals*ds_list_find_value(normal_list2,floor(real(n_index)));
nz=flipnormals*ds_list_find_value(normal_list3,floor(real(n_index)));
} else {
nx=0;
ny=0;
nz=0;
}

if (floor(real(t_index))!=-1 && ds_list_size(texture_list1)>=1) {
tx=ds_list_find_value(texture_list1,floor(real(t_index)));
ty=ds_list_find_value(texture_list2,floor(real(t_index)));
} else {
tx=0;
ty=0;
}

d3d_model_vertex_normal_texture(tm,vx,vy,vz,nx,ny,nz,tx,ty);

tsn+=1;
if (tsn==999) {
tsn=0;
d3d_model_primitive_end™;
d3d_model_primitive_begin(tm,pr_trianglelist);
}
}

d3d_model_primitive_end™;
return tm;

Теперь сохраняем и можно считать что уже моделли можно подгружать.
Теперь скомпилируем на Максимке любую моделль, или на блендере!(Важно - сохраните моделль в формате obj!)
Через программу UVMapperClassic0.30а конвертируем моделль в читабельный гамаку формат obj.
Перейдем непосредственно к загрузке самой моделли, да и еще, если вы делаете текстурированную моделль, развертка должна быть умещена строго в среднее окошечко с текстурой!(Это я пользователям Максимки!).
Так-с. Загружаем текстуру в Backgrounds или Sprites(Для двух и более текстур на моделль, под тип анимации!)
Создаем объект моделли.
в Create пишем
Code
****_texture = background_get_texture(название текстуры) //В случае со спрайтом sprite_get_texture(название текстуры,image_index)
****_model = MakeObj('имя моделли.obj',1)

Примечание - вместо звездочек указывается любое английско-буквенное имя.
В Draw пишем
Code
d3d_model_draw(****_model,x,y,z,****_texture) //x,y,z - положение моделли.(Ставьте все ноль, если это не оружие для перса!)

Дальше вы пишите если хотите трансформировать моделль;
d3d_transform_set_identity() // обязательно в начало
d3d_transform_add_rotation_x(angle) //angle - поворот моделли в градусах;
d3d_transform_add_rotation_y(angle)
d3d_transform_add_rotation_z(angle)
d3d_transform_add_translation(x,y,z) // РАСПОЛОЖЕНИЕ НА КАРТЕ! Оставьте x и y что расставлять по разным координатам, а z (Высоту) - правьте на свое усмотрение!
d3d_transform_add_scaling(xs,ys,zs) // растяг по осям x,y,z
d3d_transform_set_identity()// обязательно в конец
На этом думаю можно окончить с добавкой 3д моделлей!
Примечание (Текстуру перевернуть сверху - вниз)!

Работа с освещением
В Draw постоянного объекта
Code
d3d_set_lighting(enable)

Code
d3d_set_shading(smooth)
- это можно и не писать, это просто эффект плавного затемнения;
Дальше в Draw объекта осветителя:
Если солнце
Code
d3d_light_define_direction(ind,dx,dy,dz,col)

ind - номер осветителя
dx - поворот по x
dy - поворот по y
dz - поворот по z
col - цвет освещения (c_*****);

Если освещение по типу свечи
Code
d3d_light_define_point(ind,x,y,z,range,col)

ind - номер осветителя
x - положение по x
y - положение по y
z - положение по z
col - цвет освещения (c_*****)
range - дальность освещения;

Есть так же пример со светящимися объектами - якобы отражающими свет
Ну тут я просто сделаю copy-past.
d3d_vertex_normal(x,y,z,nx,ny,nz) Добавляет вершину (x,y,z) в примитив с обычным вектором (nx,ny,nz).

d3d_vertex_normal_color(x,y,z,nx,ny,nz,col,alpha) Добавляет вершину (x,y,z) в примитив с обычным вектором (nx,ny,nz) и с некоторым цветом и значением альфа.

d3d_vertex_normal_texture(x,y,z,nx,ny,nz,xtex,ytex) Добавляет вершину (x,y,z) в примитив с обычным вектором (nx,ny,nz) и с позицией (xtex,ytex) в текстуре, смешивающейся с цветом и с альфа значением, установленных прежде.

d3d_vertex_normal_texture_color(x,y,z,nx,ny,nz,xtex,ytex,col,alpha) Добавляет вершину (x,y,z) в примитив с обычным вектором (nx,ny,nz) с позицией (xtex,ytex) в текстуре, смешивающейся с некоторым цветом и альфа значением


Создание skysphere

Для начала создайте объект с имением obj_skysphere
Загрузите в background текстуру неба с разверткой под 360 градусов.
Назовите ее любым коротким именем.
Теперь перейдет к недавно созданному объекту obj_skysphere
В Draw объекта впишите код
Code
d3d_draw_ellipsoid(x+290 ,y+290 , -370, x-290, y-290, 370, background_get_texture (тут название загруженной текстуры неба), 1, 1, 24);

написания кода идет в таком порядке d3d_draw_ellipsoid(x1 ,y1 , z1, x2, y2, z2, texid, hrepeat, vrepeat, steps);
x1, x2, y1, y2 - координаты сферы в пространстве;
z1, z2 - высоты сферы;
texid - id текстуры;
hrepeat - повтор текстуры по горизонтали;
vrepeat - повтор текстуры по вертикали;
steps - число сторон сферы;
Теперь сделаем сферу движимую за игроком, дабы не убежать за пределы
В Step
Code
x=obj_player.x; y=obj_player.y;

Сохраняйте объект и выставляйте на карту.

Категория: Game Maker | Просмотров: 5096 | Добавил: DerToteWolf_ (15.10.2012) | Рейтинг: 5.0/1
HTML ссылка на материал:
BB ссылка на материал:
Похожие материалы :
Возможно вам будет интересно:
Урок для начинающих по Game Maker v8 (платформенная игра) (1)
Уроки по C/C++ (Части с 21 по 40) (0)
Учебник по Blitz 3D (0)
3d Rad - Как добавить свою модель (6)
3d RAD . Урок 4 - Подсчет путей и движения (0)
Создание многопользовательской(online) игры на Game Maker. (часть 5) (1)
Пингуем (Ping) под Delphi (1)
Создание РПГ (0)
Создаем танчики (0)
Создание многопользовательской(online) игры на Game Maker. (часть 4) (1)
Немного о секретах озвучки. (2)
Создаем 2-х битный теннис на двоих без программирования (0)
Экономика в ммо (2)
Инветарь на Game Maker (0)
24 совета по программированию в Delphi (Дельфи) часть 2 (0)
Всего комментариев: 2
1 Dr@gN(ScorpyZ)   (08.01.2013 15:18) [Материал]
Через Ultimate 3D разве не легче?

2 ZiP   (09.01.2013 21:54) [Материал]
Здесь рассматривается работа стандартной функции 3D. smile

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Поиск
Поиск по всему сайту:
Поиск по разделу:

Панель пользователя
Здравствуйте, Гость


Ник:
Пароль:
Запомнить :

Ваш IP: 18.224.39.32

Случайные конструкторы

Случайные движки

Случайные статьи

Статистика
Онлайн всего: 1
Гостей: 1
Пользователей: 0

На сайте были:

При полном или частичном копировании материалов сайта ссылка на Make-Games.ru обязательна. Make-Games.ru © 2008 - 2024 Хостинг от uCoz
Топ Разработка игр