Функции 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]
Все остальное, что не попадает ни под одну категорию.

Мини-Опрос
Какой ОС Вы пользуетесь?
Всего ответов: 1208

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

Функции 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 | Просмотров: 4965 | Добавил: DerToteWolf_ (15.10.2012) | Рейтинг: 5.0/1
HTML ссылка на материал:
BB ссылка на материал:
Похожие материалы :
Возможно вам будет интересно:
Молодому игроделу (5)
Серия уроков по 3d Rad (0)
Полезные функции и процедуры: часть 1 (0)
Создание многопользовательской(online) игры на Game Maker. (часть 1) (0)
Работа с файлами. Открытие файла и чтение из него (0)
Создание Платформенной Игры Copyright 2001 by Mark Overmars (0)
Создание рикошета пуль от стены (4)
Создание света (освещение уровня) (0)
Урок про скелетную анимацию (0)
Звуки и музыка (0)
Сохранение и чекпоинты (0)
Создание многопользовательской(online) игры на Game Maker. (часть 3) (0)
Уроки по C/C++ (Части с 1 по 20) (0)
Урок по PaintNET (1)
О игрострое, движках и людях (1)
Всего комментариев: 2
1 Dr@gN(ScorpyZ)   (08.01.2013 15:18) [Материал]
Через Ultimate 3D разве не легче?

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

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

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


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

Ваш IP: 18.206.48.243

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

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

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

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

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

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