logo
СТП, ПРОГР,СПОО / Курсовая

Разработка классов программы

Особенностью jPCT является то, что он поддерживает software рендер и OpenGL.

Создание фреймбуфера:

final FrameBuffer buffer = new FrameBuffer(800, 600, FrameBuffer.SAMPLINGMODE_NORMAL); buffer.disableRenderer(IRenderer.RENDERER_SOFTWARE); buffer.enableRenderer(IRenderer.RENDERER_OPENGL);

Загрузка базовой сцены во фреймбуфер:

buffer.clear(java.awt.Color.BLUE); // цвет фона

theWorld.renderScene(buffer); theWorld.draw(buffer); buffer.update(); buffer.displayGLOnly();

Рисунок 4. Базовая сцена

Как видно на рисунке 4, сцена вцелом представляет из себя синий фон, так-как модели и текстуры еще не загружены, а источники освещения не предусмотрены.

После создания объектов их нужно добавить в мир с помощью метода addObject класса World. В программе может быть несколько объектов World, но при этом каждый объект может принадлежать только одному из них. Перед тем как отображать объекты их нужно «построить», при этом вычисляются нормали, ограничивающий прямоугольник и др.

Это можно сделать вызовом метода buildAllObjects() класса World. Создали мир, теперь как говорится да будет свет!

Свет добавляем методом addLight при этом указав его координаты и интенсивность красного зеленого и голубого цвета. Все координаты в jPCT задаются в основном в виде SimpleVector(класс jPCT), хотя сохранилась и «старая» форма с тремя координатами float. То, как мы все это увидим определяет камера (Рис. 5).

Рисунок 5. Финальная визуализация

Камеру можно двигать, поворачивать, направлять на объект и направлять параллельно оси z объекта(align).

Помимо собственно рендера в jpct есть классы для обработки пользовательского ввода. Для ввода с клавиатуры это класс KeyMapper. Вы просто создаете новый объект KeyMapper а потом можете в любое нужное время получить состояние клавиш с помощью вызова poll().

Также есть детектор столкновений. В нашей игре мышь будет стукаться об стенки а в конце столкновение мыши и сыра вызовет конец игры. Поэтому для объекта мыши вызовем метод:

setCollisionMode( Object3D.COLLISION_CHECK_SELF ).

А для сыра и стенок:

setCollisionMode( Object3D.COLLISION_CHECK_OTHERS ).

Сыр еще будет нас оповещать о столкновении чтобы мы знали что игра закончилась:

( addCollisionListener(this) ).

Теперь каждый раз когда мышь двигается нужно вызывать метод класса Object3D:

checkForCollisionEllipsoid

(

SimpleVector //перемещение,

SimpleVector //эллипсоид приблизительно описывающий мышь,

).

Помимо еллипсоида можно использовать сферу и куб — соответственно методы

checkForCollisionSpherical(...),

checkForCollision(...).