Основы Xtreme3D Всем привет. Сегодня я расскажу вам основы Xtreme3D.dll в Game Maker. Xtreme3D использует OpenGL, что делает его мощным 3D движком для GM. На этом уроке мы реализуем: - 3D пространство; - возможность передвижения по нему игроком от первого лица; - добавление примитивов и моделей, а также, загрузку текстур для них. Итак, приступим. Для начала нам потребуются скрипты для работы с библиотекой. Скачать их можно здесь: http://gcup.ifolder.ru/29502625. Теперь создаем отдельную папку для будущего проекта. Копируем в папку Xtreme3D.dll. Импортируем скрипты из архива. Создаем новый объект - o_main. Код в Create большой, поэтому, чтобы не было путаницы, буду объяснять код по частям. Первая часть: 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. Переходим ко второй части кода: 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. И, наконец, переходим к третьей части кода: 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): Update(); ViewerRender(view1); ObjectTurn(MyCube,1); Данный код выполняет следующее: - обновляет столкновения, изображение на экране, сцену и т.д.; - назначает вид для, используемый для рендера, чтобы отображать 3D сцену; - медленно вращает модель MyCube. С объектом o_main разобрались. Создаем объект o_cam. В событии создания пишем такой код: 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; Переходим к событию шага: 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 комнату. Спасибо за внимание. До новых встреч!