Никакой рекламы, только голые факты.
ОБЩЕЕ
1.Оптимизирован 3D и 2D двигатель. Теперь это 60-70 fps на PIII 850 MHz! Вот только не говорится сколько в этот момент на экране полигонов и эффектов. Но я им верю.
2. Детский редактор заменен на профессиональный (оконный в среде Windows) по типу Ms VB 6/7. В редакторе: Улучшены средства отладки програмы, добавлена фича Step как в VB.
3. Расширен язык. Помимо улучешенной поддержки DLL добавленны новые типы данных и в том числе очень нужные Byte и Boolean. И еще что-то. Шифрование файлов от ламаков и пиратов. И многое др.
3D двигатель (ща обалдеете)
1. Как известно (а кому то и нет), движок DB заточен под out-door игры. В DB Pro нам позвольт делать шутеры. Т.е. добавлена поддержка BSP (отсечение невидимых комнат), Деревьев (то же, но продвинутее)и PVS (то же метод оптимизации для room игр). И наконец: СКЕЛЕТНАЯ АНИМАЦИЯ!!!!! А в DB мы имеем только фреймовую (кстати отсюда у многих ламеров проблемы с разваливающейся анимацией) которая катит только для техники. В DB Pro нам позволят напрямую манипулировать векторами и матрицами (речь не о матрицах DB которые на самом деле terrains). К стати, эти матрицы/terrains тоже оптимизированы и добавлено несколько новых функций. Оптимизирован и улучшен полигональный алгоритм проверки на пересечение (в DB, кстати, есть все виды - кубическая, сферическая и полигональная и я не пойму что енто у вас там за траблы такие по энтому вопросу).
2. Новые эффекты: Bump (wow!). Тени (yes!). Истинные отражения (а не те в DB что мы получали путем различных ухищрений). Поддержка истинного маппинга неба (а то некоторые, пардон, дятлы нагружают DB полигонным шаром - детский сад) - Среда, Сфера, Куб (тем кто врубается, должно быть интересно). Поддержка всех типов мультитекстурирования (в DB один самый первый и простой метод). Поддержка Пиксельных и Вертексных шейдеров!!! Такое я видел пока только в движке DOOM III !!!!! Теперь вы легко создадите истинную радугу, объемный туман, шерсть животного, истинные тени - все как в 3D MAX только в реале! Правда для этого нужен GF4. Ну и в заключении о эффектах - добавлен генератор партиклов! Многие написали его сами, на DB, но в DB Pro он родной, на С++, а посему быстрее... намного быстрее.
НОВЫЕ ФОРМАТЫ
С приходом BSP и СКЕЛЕТНОЙ АНИМАЦИИ расширился набор поддержвиваемых форматов.
1. Теперь вы можете создавать уровни для своей игры в моем любимом редакторе от VALVE - WorldCraft. Это BSP уровни. А так же вы уже можете грузить готовые уровни из игр Half-Life, Квака 2 и 3!!!!!!!! WOW!
2. MDL (анимированные модели семейства Half-Life), MD2 (Квака 2), MD3 (Третья Квака). 100 раз WOW! Модели будите делать в максе, а потом конвертить такой классной вещью как MilkShape 3D ($30). Хотя, может, Бамбер даст нам что-то свое.
3. В аудио никаких нововведений т.к. ничего лучшего чем wav и mp3 человечество не придумало. Хотя, добавили формат SGT. Это то же что и MIDI только с доп. инфой благодаря которой ваша прога может делать что-то в такт музыке. Ну, тип. того.
4. В видео - добавлен формат mpeg. Енто будет по качественнее и надежнее чем avi со своими глючными кодеками.
Заключение. Как видим, уважаемый Ли Бамбер открыл для себя истину которую я знал давно - детишки не хотят писать проги они хотят играть в конструктор. Бамбер дал им этот конструктор - 3D Game Maker, а DB поставил на путь истинный - для профи. За бугром sharewar'щики уже вовсю косят капусту от игрушек написанных на DB (знаю из переписки с данным контингентом).
Основы программирования.
В предыдущей выпуске рассылки мы узнали о том, как быстро и
легко делать объемные примитивные фигуры, перемещать объект в трехмерном
пространстве, а также перемещать виртуальную "видеокамеру" в трехмерном пространстве.
Следующие три урока научат нас, как сделать вид "из глаз", а также,
как обнаружить столкновение нашего "Сэма" со стеной, например. :-))
Для более детальной и полной информации - рекомендую обратиться к
первоисточникам. А это компания "Медиахаус" и "Руководство пользователя",
которое вы получаете в коробке с лицензионным DarkBASIC-ом.
4. Вид от третьего лица
Цель урока: показать, как нужно вводить вид от третьего лица.
Rem Устанавливаем синхронизацию
Sync On
Sync Rate 30
Rem Создаем 5 кубиков и расставляем их в случайном порядке
For x = 1 to 5
Make object cube x,100
Position object x,Rnd(2000),0,Rnd(2000)
Next x
Rem Создаем сферу
Make object sphere 10,50
Rem Основной цикл
Do
Rem Сохраняем вертикальный угол объекта в переменной aY#
aY# = Object angle Y(10)
Rem Управление камерой с клавиатуры
If Upkey()=1 then Move object 10,10
If Leftkey()=1 then Yrotate object 10,Wrapvalue(aY#-5)
If Rightkey()=1 then Yrotate object 10,Wrapvalue(aY#+5)
Rem Устанавливаем положение игрока и сохраняем его в переменных X# и Z#
X# = Object position x(10)
Z# = Object position z(10)
Rem Получаем новое положение камеры и сохраняем его в переменных cZ# и cX#
cZ# = Newzvalue(Z#,aY#-180,100)
cX# = Newxvalue(X#,aY#-180,100)
Rem Устанавливаем положение камеры
Position Camera cX#,100,cZ#
Rem Направляем камеру на объект "Игрок"
Point camera X#,50,Z#
Rem Обновляем экран
Sync
Loop
В этом уроке мы познакомимся с тем, как применить в игре вид от третьего лица. Вид от третьего лица можно определить, как вид из камеры, которая находится позади игрока и чуть выше него. Большую часть кода этого урока, мы уже описывали в предыдущих уроках. Давайте сосредоточимся на новых строках кода и новых командах.
X# = Object position x(10)
Z# = Object position z(10)
Команды "Object Position X" и "Object Position Z" похожи на команду "Object Angle" за исключением того, что они возвращают не угол поворота объекта, а положение объекта в относительных координатах. В скобках ставится номер объекта, координаты которого нужно получить. Значения координат сохраняем в переменных X# и Z#.
cZ# = Newzvalue(Z#,aY#-180,100)
cX# = Newxvalue(X#,aY#-180,100)
Команды "NewZValue" и "NewXValue" помогают вам избежать сложных математических функций, таких как синус и косинус. Они вычисляют новое положение объекта на основании старого. Мы используем эти команды, чтобы вычислить точку, находящуюся в 100 единицах пространственных координат позади объекта "Игрок". Первый параметр - это относительная координата, в которой расположен игрок в данный момент. Помните, что мы сохранили положение этого объекта в переменных X# и Z#. Второй параметр - угол оси новых координат. Мы взяли значение вертикального угла объекта, сохранили значение в переменной Y# и вычли из него 180 градусов. Этот угол направлен точно за объект. Третий параметр обозначает точку, удаленную от объекта на указанное количество единиц пространственных координат. Мы задали значение 100. Другими словами, мы сделали следующее: нашли точку, находящуюся позади объекта "Игрок" и удаленную от него на 100 единиц, и сохранили ее координаты в переменных cZ# и cX#, обозначающих положение нашей камеры.
Position camera cX#,100,cZ#
Команда "Position Camera" работает так же, как и команда "Position Object", за исключением того, что не нужно указывать номер объекта - только значения координат. Для координат X и Z мы используем вновь созданные значения, а для координаты Y - значение 100. Поскольку вертикальная координата Y объекта-игрока равна 0, а его радиус 50, значение 100 координаты помещает камеру над объектом.
Point camera X#,50,Z#
Наша камера направлена поверх объекта-игрока. С помощью команды "Point Camera" мы направим камеру на объект. Параметры этой команды - это координаты X, Y и Z той точки, на которую нужно направить камеру. Мы используем переменные X# и Z#, хранящие значения положения объекта по осям X и Z. В качестве значения по оси Y будем использовать 50. Теперь камера направлена в центр нашего объекта-игрока.
Попробуйте изменить количество повторений цикла, чтобы создать больше кубиков. Не забудьте поменять номер объекта-игрока, чтобы это число было больше, чем число кубиков, иначе программа выведет сообщение об ошибке "Объект уже существует".
В командах "NewXValue" и "NewYValue" попробуйте поменять значение 180 на другое, меньше 360, чтобы посмотреть, как оно влияет на положение камеры. Измените также последний параметр в этих командах, чтобы переместить камеру ближе или дальше к объекту.
Попробуйте изменить значение 50 в команде "Point Camera", чтобы изменить высоту камеры.
5.Обнаружение столкновений
Цель урока: объяснить, как обнаруживать столкновения.
Rem Устанавливаем синхронизацию
Sync On
Sync Rate 30
Rem Создаем кубики в случайном порядке
For x = 1 to 5
Make object cube x,100
Position object x,Rnd(2000),0,Rnd(2000)
Set object collision to boxes x
Next x
Rem Создаем сферу
Make object sphere 10,50
Position object 10,-100,0,-100
Set object collision to spheres 10
Rem Основной цикл
Do
Rem Сохраняем значение вертикального угла в aY#
aY# = Object angle Y(10)
Rem Управление камерой с клавиатуры
If Upkey()=1 then Move object 10,10
If Leftkey()=1 then Yrotate object 10,Wrapvalue(aY#-5)
If Rightkey()=1 then Yrotate object 10,Wrapvalue(aY#+5)
Rem Обнаруживаем столкновение
If Object collision(10,0)>0 then position object 10,X#,0,Z#
Rem Сохраняем положение игрока в X# и Z#
X# = Object position x(10)
Z# = Object position z(10)
Rem Получаем новое положение камеры и сохраняем его в cZ# и cX#
cZ# = Newzvalue(Z#,aY#-180,100)
cX# = Newxvalue(X#,aY#-180,100)
Rem Устанавливаем камеру
Position Camera cX#,75,cZ#
Rem Направляем камеру на объект
Point camera X#,25,Z#
Rem Обновляем экран
Sync
Loop
В этом уроке мы покажем, как использовать команды DarkBASIC для обнаружения столкновений. Мы добавили их в исходный код предыдущего урока.
Set object collision to boxes x
В цикл, где создаются и размещаются кубические объекты, мы вставили команду "Set Object Collision To Boxes". Она устанавливает тип обнаружения столкновений с объектами в форме куба, то есть соответствующий форме наших объектов. Чтобы передать команде "Set Object Collision To Boxes" номера объектов, мы используем переменную цикла "х".
Set object collision to spheres 10
Эта команда тоже устанавливает тип обнаружения столкновений с объектами, но не в форме куба, а в форме сферы, такой, как у нашего объекта-игрока. Выбор типа столкновений зависит от вас. Старайтесь только, чтобы он лучше всего подходил для игры, которую вы создаете.
If Object collision(10,0)>0 then position object 10,X#,0,Z#
Эта строка кода определяет столкновение объектов. Если наш объект-игрок сталкивается с каким-либо другим объектом, он перемещается в место, где находился перед столкновением. Эти координаты хранятся в переменных X# и Z#. Обратите внимание, что мы определяем столкновение после перемещения объекта и перед тем, как сохраняем новые значения его координат. Этим мы обеспечиваем возвращение объекта-игрока на старое место, где он не может столкнуться с каким-нибудь другим объектом. Команда "Object Collision" используется для проверки столкновения. Первый параметр в скобках - это номер вашего объекта-игрока, для которого определяется столкновение. Второе значение - номер объекта, столкновение с которым вашего объекта-игрока нужно проверить. Здесь мы применяем значение 0, чтобы DarkBASIC обнаруживал столкновение с любым объектом. В этом случае команда "Object Collision" возвращает номер объекта, с которым столкнулся объект под номером 10, и значение 0, если столкновения не произошло. Если эта команда возвратит значение больше 0, то столкновение обнаружено, и мы помещаем объект-игрок в то место, где он находился перед столкновением.
Еще один тип столкновений - полигонный. Он используется при обнаружении столкновений с крупными объектами, такими как здания, построенными вами в 3D-сцене. Теперь, после знакомства с новыми командами, вы можете применять обнаружение столкновений в своих программах. Чтобы научиться свободно пользоваться ими, попробуйте внести в них следующие изменения.
Попробуйте поменять значение второго параметра в команде "Object Collision" на 3. Перемещаясь по 3D-сцене и сталкиваясь с кубическими объектами, попытайтесь найти объект под номером 3.
Измените тип столкновений, чтобы обнаруживать столкновения объекта-игрока с объектами не в форме сферы, а в форме куба, и посмотрите, как это отражается на столкновениях с объектами в форме куба.
6.Текстурирование объектов
Цель урока: научиться накладывать текстуры на объекты.
Rem Устанавливаем синхронизацию
Sync On
Sync Rate 30
Rem Загружаем текстуры
Load image "cottag02.bmp",1
Load image "barry.bmp",2
Rem Создаем кубики в случайном порядке
For x = 1 to 5
Make object cube x,100
Position object x,Rnd(2000),0,Rnd(2000)
Set object collision to boxes x
Texture object x,1
Next x
Rem Создаем сферу
Make object sphere 10,50
Position object 10,-100,0,-100
Set object collision to spheres 10
Texture object 10,2
Rem Основной цикл
Do
Rem Сохраняем вертикальный угол в aY#
aY# = Object angle Y(10)
Rem Управление камерой с клавиатуры
If Upkey()=1 then Move object 10,10
If Leftkey()=1
Yrotate object 10,Wrapvalue(aY#-5)
Endif
If Rightkey()=1
Yrotate object 10,Wrapvalue(aY#+5)
Endif
Rem Обнаруживаем столкновение
If Object collision(10,0)>0
Position object 10,X#,0,Z#
Endif
Rem Сохраняем положение объекта-игрока в X# и Z#
X# = Object position x(10)
Z# = Object position z(10)
Rem Получаем новое положение камеры и сохраняем его в cZ# and cX#м
cZ# = Newzvalue(Z#,aY#-180,100)
cX# = Newxvalue(X#,aY#-180,100)
Rem Устанавливаем камеру
Position Camera cX#,75,cZ#
Rem Направляем камеру на объект "Игрок"
Point camera X#,25,Z#
Rem Прокручиваем текстуру на кубических объектах
Scroll object texture 1,0.005,0
Scroll object texture 2,0,0.005
Rem Масштабируем текстуру на кубических объектах
Scale object texture 3,0.998,0.998
Scale object texture 4,1.001,1.001
Rem Обновляем экран
Sync
Loop
В этом уроке мы научимся текстурировать объекты. В DarkBASIC текстуры загружаются из файлов растровых изображений с расширением ".bmp". Советуем создавать текстуры с размерами кратными степени 2, так как некоторые графические карты не могут обрабатывать текстуры, размеры которых выражены нечетными числами и не кратны степени 2. Это означает, что размеры ваших изображений должны быть 256x256, 32x128, 256x16 или любых других размеров кратными степени 2. Можно загружать текстуры и большего размера, чем 256x256, но в этом случае убедитесь, что ваша графическая карта может обрабатывать такие большие текстуры.
Load image "cottag02.bmp",1
Load image "barry.bmp",2
Команда "Load Image" дает DarkBASIC указание загрузить изображение из файла растрового изображения. Первый параметр команды - это имя загружаемого файла растрового изображения. Имя файла нужно заключить в кавычки, иначе произойдет ошибка. В этом параметре можно использовать имена каталогов, например, "C:\Darkbasic\Images\mybitmap.bmp". Если вы храните изображения в подкаталоге проекта, в параметре необходимо указать его имя. Мы советуем создавать отдельный подкаталог, если в вашей программе много мультимедийных файлов. Второй параметр - это уникальный номер (или идентификатор) изображения, который используется так же, как при создании объекта. Нельзя присваивать один и тот же номер двум разным изображениям.
Texture object x,1
Texture object 10,2
Эти две строки стоят перед основным циклом. Первая строка находится в теле цикла "For Next" и служит для создания кубических объектов. Вторая внесена после того, как мы создали объект "Игрок". Команда "Texture Object" предназначена для наложения изображения на объект. Первый параметр - номер объекта, на который нужно наложить текстуру. Второй параметр - номер накладываемого на объект изображения.
Scroll object texture 1,0.005,0
Scroll object texture 2,0,0.005
Команда "Scroll Object Texture" перемещает (прокручивает) наложенную на объект или полигон текстуру вверх и вниз или вправо и влево. Первый параметр - номер объекта, чья текстура будет прокручиваться. Следующие два параметра - это U и V координаты. Вы можете представить их как координаты X и Y двумерной текстуры. Если присвоить этим параметрам значения, отличные от 0, текстура будет прокручиваться при каждом вызове этой команды. Можно использовать как положительные, так и отрицательные значения, в зависимости от того, в каком направлении вы хотите прокрутить текстуру на объекте. В нашем примере используется очень маленькое значение с плавающей точкой. Значения прокрутки U и V можно представить как процент от размера текстуры. Если бы мы установили значение, равное "0.5", что означает 50 процентов, текстура на кубе передвинулась бы ровно наполовину, а это - слишком быстро.
Scale object texture 3,0.998,0.998
Scale object texture 4,1.001,1.001
Команда "Scale Object Texture" похожа на предыдущую, только эта команда увеличивает или уменьшает масштаб текстуры на объекте. Первый параметр - это номер объекта, текстура которого изменяет масштаб (масштабируется). Следующие два параметра являются U и V координатами текстуры. Изменение этих значений на любую величину, кроме 0, увеличит или уменьшит размер текстуры. Когда эти значения равны 0, никакого изменения размеров не произойдет. Если присвоить параметрам значение меньше 1, масштаб текстуры уменьшится, и наоборот, если присвоить им значение больше 1, масштаб текстуры увеличится.
Теперь вы умеете загружать изображение из файла и накладывать его на объект, а также масштабировать и прокручивать текстуру объекта. Попробуйте внести следующие изменения, чтобы посмотреть, как они повлияют на текстурированные кубики.
Измените значения U и V в команде "Scroll Object Texture", чтобы посмотреть, как это повлияет на скорость прокрутки текстур объектов.
Измените значения U и V в команде " Scale Object Texture", чтобы посмотреть, как это отразится на масштабе текстур.