Суббота, 27 Апреля 2024, 06:04

Приветствую Вас Гость

Меню сайта
Категории каталога
Создание игр [355]
Статьи об общих понятиях связанных с созданием игр.
Программирование [82]
Гайды по программированию на разных ЯП.
Движки и Гейммейкеры [145]
Статьи о программах для создания игр, уроки и описания.
Софт [43]
Различные программы, в том числе в помощь игроделам.
2D-графика [14]
Уроки по рисованию, растр, пиксель-арт, создание спрайтов и пр.
3D-графика [16]
Уроки по моделированию, ландшафт, модели, текстурирование и пр.
Моддинг игр [5]
Модификация компьютерных игр, создание дополнений, перевод, хакинг.
Игры [161]
Статьи об играх, в том числе и сделанных на гейммейкерах.
Разное [129]
Статьи, которые не вошли в определённые разделы.
Наш опрос
Какой вид используется в ваших играх?
Всего ответов: 10338
Главная » Статьи » Движки и Гейммейкеры

Основы "Xtreme3D"
Всем привет.
Сегодня я расскажу вам основы Xtreme3D.dll в GameMaker.
Xtreme3D использует OpenGL, что делает его мощным 3D движком для ГМ.

На этом уроке мы реализуем:

  • 3D пространство;
  • возможность передвижения по нему игроком от первого лица;
  • добавление примитивов и моделей, а также, загрузку текстур для них.

    Итак, приступим. Для начала нам потребуются скрипты для работы с библиотекой. Скачать их можно здесь.
  • Теперь создаём отдельную папку для будущего проекта. Копируем в папку Xtreme3D.dll.
    Импортируем скрипты из архива. Создаём новый объект – o_main. Код в Create большой, поэтому, чтобы не было путаницы, буду объяснять код по частям. Первая часть:
    Code
    X = 1;
    Y = 2;
    Z = 4;
    dll_init();
    EngineCreate(window_handle());
    view1 = ViewerCreate(0,0,640,480);
    ViewerEnableVSync(view1,true);
    ViewerSetLighting(view1,true);
    ViewerSetBackgroundColor(view1,c_yellow);

  •  объявляем переменные, отвечающие за координаты модели, которую потом будем загружать;
  • подключаем dll первой функцией, чтобы использовать потом все остальные функции;
  • создаём 3D движок;
  • создаём первый вид, в котором будет отображаться пространство в 3D;
  • включаем вертикальную синхронизацию в пределах вида view1;
  • включаем освещение в пределах того же вида;
  • выбираем цвет фона для вида view1.

    Переходим ко второй части кода:
    Code
    scene = DummycubeCreate(0);
    Light = LightCreate(1,scene);
    ObjectSetPosition(Light,-10,20,50);
    matlib=MaterialLibraryCreate();
    MaterialLibraryActivate(matlib);

    MaterialCreate('texture','Dirt.jpg');

    Пояснение:

  • создаём сцену;
  • создаём свет на для сцены;
  • устанавливаем свету позицию (20,20,50);
  • создаём библиотеку материалов и записываем её индекс в переменную;
  • активируем созданную библиотеку материалов;
  • создаём материал (текстуру) из файла Dirt.jpg с именем texture.

    И, наконец, переходим к третьей части кода:
    Code
    MaterialCreate('texCube','BoxWalls.png');
    MaterialAddTextureEx('texCube','texCube');

    plane = PlaneCreate(1,40,40,8,8,scene);
    ObjectPitch(plane,90);
    ObjectSetMaterial(plane,'texture');

    MyCube = FreeformCreate('cube.obj',scene);
    ObjectSetMaterial(MyCube,'texCube');
    ObjectSetPosition(MyCube,X,Y,Z);

    Пояснение:

  • так же, как и создавали предыдущий материал, создаём следующий, только изменяем название материала и имя файла;
  • добавляем материал texCube как текстуру texCube;
  • создаём плоскость (пол) в координатах (1,40,40) размером 8х8;
  • поворачиваем плоскость так, чтобы она была перпендикулярна игроку;
  • выбираем текстуру texCube для плоскости;
  • загружаем модель cube.obj на сцену и записываем её индекс в переменную;
  • выбираем для загруженной модели MyCube текстуру texCube;
  • перемещаем модель в координаты, равные переменным – X,Y,Z.

    Всё, с событием создания закончили. Теперь нужно написать пару строк в событии шага (Step):

    Code
    Update();
    ViewerRender(view1);
    ObjectTurn(MyCube,1);


    Данный код выполняет следующее:

  • обновляет столкновения, изображение на экране, сцену и т.д.;
  • назначает вид для, используемый для рендера, чтобы отображать 3D сцену;
  • медленно вращает модель MyCube.

    С объектом o_main разобрались.
    Создаём объект o_cam. В событии создания пишем такой код:

    Code
    CamSpeed = 0.5;
    MouseSetPosition(room_width/2,room_height/2);
    CamPos = DummycubeCreate(o_main.scene);
    TheCam = CameraCreate(CamPos);
    ObjectSetPosition(CamPos,-4,2,3)
    ViewerSetCamera(o_main.view1,TheCam);


    Объясняю записанный код:

  • устанавливается скорость передвижения камеры;
  • смещаем курсор мыши в центр комнаты;
  • создаём основу для камеры и записываем её индекс в переменную;
  • создаём камеру для основы CamPos и, так же, записываем её индекс в переменную;
  • помещаем камеру в координаты (-4,2,3);
  • назначаем обзор в пределах первого вида (view1) камерой TheCam;

    Переходим к событию шага:

    Code
    MouseLook(CamPos,TheCam);
    if keyboard_check(ord('A')) ObjectStrafe(CamPos,CamSpeed);
    if keyboard_check(ord('D')) ObjectStrafe(CamPos,-CamSpeed);
    if keyboard_check(ord('S')) ObjectMove(CamPos,CamSpeed);
    if keyboard_check(ord('W')) ObjectMove(CamPos,-CamSpeed);

    Здесь первая строка отвечает за обзор мышью, а остальные – за управление.
    Со всеми объектами мы закончили.

    Создаём комнату, помещаем в неё созданные объекты, сохраняем проект в папку, которую мы создали в начале урока, запускаем и получаем такой результат:

    Вы создали 3D комнату. Спасибо за внимание. До новых встреч!
  • Категория: Движки и Гейммейкеры | Добавил: GameMix (27 Августа 2011)
    Просмотров: 13974 | Комментарии: 7 | Рейтинг: 5.0/7 |
    Теги: 3D, Game Maker 8, Xtreme3D, движок, GML, dll, GM, OpenGl, Урок, гм
    Дополнительные опции:
    Также если вы считаете, что данный материал мог быть интересен и полезен кому-то из ваших друзей, то вы бы могли посоветовать его, отправив сообщение на e-mail друга:

    Игровые объявления и предложения:
    Если вас заинтересовал материал «Основы "Xtreme3D"», и вы бы хотели прочесть что-то на эту же тему, то вы можете воспользоваться списком схожих материалов ниже. Данный список сформирован автоматически по тематическим меткам раздела. Предлагаются такие схожие материалы: Если вы ведёте свой блог, микроблог, либо участвуете в какой-то популярной социальной сети, то вы можете быстро поделиться данной заметкой со своими друзьями и посетителями.

    Всего комментариев: 7
    +2-
    7 Gavolot   (03 Августа 2012 09:12) [Материал]
    GavolotЭх когда я сидел за гм, статьи про 3D были тогда сложными, не мог осилить помню, потому-что туда все пихали игру уже какую-нибудь и объясняли мало.

    +1-
    6 GameMix   (25 Марта 2012 14:18) [Материал]
    GameMixЕсли у вас нет скриптов для работы с Xtreme3D, тогда качайте здесь.

    +2-
    5 Make_gamer   (01 Сентября 2011 14:47) [Материал]
    Make_gamerОтличный урок!

    +3-
    4 AGENTX001   (29 Августа 2011 14:14) [Материал]
    AGENTX001хорошо, пиши дальше.

    +2-
    3 GameMix   (28 Августа 2011 17:37) [Материал]
    GameMixУказал модель и текстуры, но забыл выложить их. Вот. В архиве 2 текстуры и 1 модель. smile

    +2-
    2 GameMix   (28 Августа 2011 16:09) [Материал]
    GameMixСпасибо, буду стараться.

    +4-
    1 Морриарте   (28 Августа 2011 15:14) [Материал]
    МорриартеОтлично, пиши дальше.

    Добавлять комментарии могут только зарегистрированные пользователи.
    [ Регистрация | Вход ]
    Поиск по сайту
    10 случ. движков
  • GAGE
  • Ren'Py
  • Polycode
  • Supertuxkart
  • Stride
  • RPG Maker VX ACE
  • Open RPG Maker
  • IrrRPG Builder
  • EDuke32
  • HPL1 Engine
  • Друзья сайта
    Игровой форум GFAQ.ru Перевод консольных игр
    Все права сохранены. GcUp.ru © 2008-2024 Рейтинг