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

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

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

Функции 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 | Просмотров: 2675 | Добавил: DerToteWolf_ (15.10.2012) | Рейтинг: 5.0/1
HTML ссылка на материал:
BB ссылка на материал:
Похожие материалы :
Возможно вам будет интересно:
Создаем искусственный интеллект (1)
Создание наземного врага в платформере (2)
Работа с инифайлами (*.ini) (0)
Подробности о Unreal Engine 3.0 (3)
Borland Assembler (BASM) уроки для начинающих (урок 7 часть 1) (0)
Полиморфизм, Инкапсуляция и Наследование (0)
Урок для начинающих по Game Maker v8 (платформенная игра) (1)
Создание света (освещение уровня) (0)
Создаем танчики (Урок 2) (0)
Серия уроков по 3d Rad (0)
Создание Платформенной Игры Copyright 2001 by Mark Overmars (0)
Немного о секретах озвучки. (2)
Создание базового движка для игры. Часть 1. Графика и клавиатура (0)
Создание TDS (0)
Что с чем едят - 3d Rad (0)
Всего комментариев: 2
1 Dr@gN(ScorpyZ)   (08.01.2013 15:18)
Через Ultimate 3D разве не легче?

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

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

Поиск
Поиск по всему сайту:
Поиск по разделу:

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


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

Ваш IP: 54.204.185.160

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

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

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

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

На сайте были:
Конструктор , ZiP , FireOfSteel , devbond007 , NeoCoda

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