|
Библиотеки Сторонние библиотеки для Blitz |
10.06.2013, 20:54
|
#1
|
Принтер
Регистрация: 21.04.2013
Адрес: Больше не РФ
Сообщений: 570
Написано 342 полезных сообщений (для 1,242 пользователей)
|
Туториал по "Devil Shadow System"
Всем привет! Я, хоть и начинающий форумчанин, хочу блеснуть своим остроумием и написать свой первый тутор по сие прекрасной либе от Devil’а:D
Так как это мой первый тутор, прошу "не судить строго" и все в таком роде
И вообще, лучше в этой теме совсем не писать
В общем начнем. А начнем мы с теории. Я думаю, все знают, что такое «Тень» и что такое «Shadow», про них я говорить не буду.
Первое, что нужно знать – что из себя представляет данная либа. Напомню Вам, что Blitz3D не Unreal Engine 3, поэтому о графике выше Half-Life 2 можно забыть. А для того, чтобы держать графоун на уровне Halfы Вам понадовятся либы. Много либ. «Devil Shadow System» – одна из них. Она поможет Вам сделать крутые реалтайм тени, реалистичную воду, зеркала, лужицы и т.д.
Один из главных недостатков – она жутко теряет производительность и стабильность при высоких нагрузках. Поэтому полигонами и крутыми текстурами «50000 на 50000 пикселав» спамить категорически запрещается. Масштабами тоже.
Второе – хотя бы основы BlitzBasic и какой-никакой опыт работы с ним. Это самое важное, иначе Вы не поймете ни строчки предложенного кода.
Ознакомиться с мускулатурой либы позволят исходники из основной папки.
Ладно, все с теорией. Теперь нужно установить либу.
DLL и Decl файлы из папки «Userlibs» кидаем в аналогичную папку в директории Blitz3D. Все, что из «Includes», понадобится нам при самой разработке. Кидаем все три файла в папку будущего проекта.
Ниже сразу же вторая часть
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
10.06.2013, 20:59
|
#2
|
Принтер
Регистрация: 21.04.2013
Адрес: Больше не РФ
Сообщений: 570
Написано 342 полезных сообщений (для 1,242 пользователей)
|
Основы основ
Между первой и второй перерывчик небольшой, да-да-да? :D
А теперь продолжим. Во 2-ой части тутора я познакомлю Вас с самыми что ни на есть основами данной либы. А именно я Вам разберу первый туториал из одноименной папки.
А разберу я Вам его построчно.
Include "..\Includes\DevilShadowSystem.bb"
Include "..\Includes\ShadowVolumes.bb"
Include "..\Includes\UserInterface.bb"
Тут мы вызываем все нужные инклюды для проекта.
Graphics3D 1024, 768, 32, 2
SetBuffer BackBuffer()
Известное клише. Разъяснять не вижу смысла.
Cam = CreateCamera()
PositionEntity Cam, 0, 3, -8
Создаем и ставим камеру.
А вот это уже интересно. Тут мы включаем тени на камеру.
Предупреждение: не рекомендуется включать тени более чем на одну камеру.
Light = CreateLight()
PositionEntity Light, 10, 10, 0
PointEntity Light, CreatePivot()
Первые две строчки: создаем и ставим на позицию свет.
Извините за «нубство» - я не понял, зачем наводить лайт на пустую точку.
Вот тут мы включаем тени для данного источника света.
c = CreateCube()
ScaleEntity c, 5, 1, 5
EntityColor c, 0, 0, 255
Делаем пол из куба. Масштабируем его, затем красим.
Это уже посложнее. Вот краткое объяснение в стиле родного справочника B3D:
SetShadowMesh([Entity], [True or False])
Включаем тени для данного [Entity].
True – разрешаем отбрасывать тень(по умолчанию).
False – запрещаем отбрасывать тень.
Caster = CreateSphere()
PositionEntity Caster, 3, 3, 0
EntityColor Caster, 255, 0, 0
Делаем сферку по имени «ролик» . Ставим «ролик», затем красим «ролик».
Аналогичная команда, что и для пола. Только без да-нет.
Теперь цикл:
While Not KeyHit(1)
TurnEntity Caster, 1, .5, 1.5
Render(1)
Flip
Wend
Первая строчка: вращаем «ролик».
Для второй строчки у меня справочное объяснение:
Render([0-2], [anim_speed#])
Некая замена клише рендер-апдейт ворлд
Параметры:
0 – стандартный B3D рендер.
1 – рендер с тенями.
2 – дебаг рендер(Для адвенсед юзерс:D)
[anim_speed#] – заменяет аналогичный в UpdateWorld.
Ни в коем случае не использовать UpdateWorld и RenderWorld!
А флип он и есть флип.
Уффф… Последние две строчки:
Первой мы удаляем тени, а второй заканчиваем часть тутора.
Надеюсь, Вам понравилось:D
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо KCEPOKC за это полезное сообщение:
|
|
10.06.2013, 21:01
|
#3
|
Быдлокодер
Регистрация: 05.07.2009
Адрес: Проспит
Сообщений: 5,024
Написано 2,313 полезных сообщений (для 5,350 пользователей)
|
Ответ: Туториал по "Devil Shadow System"
Юзал когда-то, ашадов лучше, ИМХО.
|
(Offline)
|
|
10.06.2013, 21:05
|
#4
|
Принтер
Регистрация: 21.04.2013
Адрес: Больше не РФ
Сообщений: 570
Написано 342 полезных сообщений (для 1,242 пользователей)
|
Словарик начинающего
И снова здравствуйте! Из за того, что несколько следующих обучающих исходников особо не отличаются от первого, я решил составить так называемый словарь с командами.
Render([0-2], [anim_speed#])
Некая замена клише рендер-апдейт ворлд
Параметры:
0 – стандартный B3D рендер.
1 – рендер с тенями.
2 – дебаг рендер(Для адвенсед юзерс:D)
[anim_speed#] – заменяет аналогичный в UpdateWorld.
Не в коем случае не использовать UpdateWorld и RenderWorld!
SetShadowMesh([Entity], [True or False],[ cache$])
Включаем тени для данного [Entity].
True – разрешаем отбрасывать тень(по умолчанию).
False – запрещаем отбрасывать тень.
Также есть возможность кэшировать тени в файл [ cache$]. Это нужно для того, чтобы ускорить следующие запуски программы. Рекомендуется использовать формат .shw
Включение теней на камеру [cam]
Предупреждение: не рекомендуется включать тени более чем на одну камеру.
CreateShadowSphere([True])
CreateShadowCylinder([True])
CreateShadowCone([True])
CreateShadowCube([True])
CreateShadowPlane([True])
Примитивы со сразу включенными тенями.
True – включить отбрасывание теней(по умолчанию)
False – отключить отбрасывание теней
Примечание: лучше использовать классические команды и только затем включать на них тени.
LoadShadowMesh([Mesh],[True])
LoadAnimShadowMesh([Mesh], [True])
Загрузить [Mesh] сразу со включенными тенями
True – включить отбрасывание теней(по умолчанию)
False – отключить отбрасывание теней
Примечание: лучше использовать классические команды и только затем включать на них тени.
А пока все. Позже я расскажу про бампмаппинг
Последний раз редактировалось KCEPOKC, 11.06.2013 в 13:14.
|
(Offline)
|
|
10.10.2013, 17:36
|
#5
|
Принтер
Регистрация: 21.04.2013
Адрес: Больше не РФ
Сообщений: 570
Написано 342 полезных сообщений (для 1,242 пользователей)
|
Ответ: Туториал по "Devil Shadow System"
Вообщем да. Сидел я себе да пёк, да вдруг вспомнил, что тутор то я не дописал. Вот теперь то да, дописал.
Как жи эта, карту висот рисовать!
Итак, начнем. В первую очередь я хочу вам сказать, мои дорогие немногочисленные читатели, что бампмаппинг тут хз как сделан, а точнее тут только environmental bump mapping(зеркала, вода, зеркальные поверхности ) , но сама суть присутствует - это все же позволяет нам уменьшить кол-во полигонов. Приступим к делу.
Чтобы привязать бампу к мешу, нам нужно начеркать нехитрый код.
SetENBMMesh(entity, tex, bump, bump_frame = 0)
где "Entity" - наш подопытный меш, "Tex" - к.-л. текстура, "Bump" - бамп мапа. Также есть "Bump_Frame" - ограничивает кол-во кадров бампы, само собой необязательно, и мне вообще данный параметр не пригодился.
Теперь код.
Разберем пример "Tutorial4 - ENBM.bb"
Весь я его затрагивать не буду, да и не надо, я так думаю. Смотрим самое важное.
Include "SampleFunctions.bb"
InitGraphics()
;Camera
PositionEntity Cam, 4, 5, 4
PointEntity Cam, CreatePivot()
;Shadows
SetENBMHeight(1)
;Sky
c = CreateShadowSphere(5, False)
ScaleEntity c, -1000, -1000, -1000
EntityTexture c, LoadTexture("Media\Island\Skybox.jpg", 385)
EntityFX c, 9
;Light
Light = CreateShadowLight()
PositionEntity Light, 5, 5, 0
PointEntity Light, CreatePivot()
;Floor
floor_bump = LoadTexture("Media\Rock_Bump.jpg")
ScaleTexture floor_bump, 20, 20
c = CreateWater(floor_bump, 100)
ScaleEntity c, .2, 1, .2
floor_tex = LoadTexture("Media\Rock.jpg")
ScaleTexture floor_tex, 20, 20
EntityTexture c, floor_tex, 0, 3
;Columns
tex = LoadTexture("Media\Wood.jpg")
ScaleTexture tex, 1.5, .5
s = 2
For x = -s To s Step 2
For z = -s To s Step 2
If Abs(x) = s Or Abs(z) = s Then
c = CreateShadowCylinder(16, False)
ScaleEntity c, .5, 1.5, .5
PositionEntity c, x * 3, 1.5, z * 3
EntityTexture c, tex
EndIf
Next
Next
;Beethovens
CubeTex = LoadTexture("Media\Cubemap.png", 128)
t1 = LoadTexture("Media\WoodPanel.jpg")
t2 = LoadTexture("Media\WoodPanel_Bump.jpg")
cnt = -1
Dim Beethoven(3)
For x = -1 To 1 Step 2
For z = - 1 To 1 Step 2
cnt = cnt + 1
c = LoadShadowMesh("Media\Beethoven.b3d", False)
ScaleEntity c, .25, .25, .25
PositionEntity c, x * 3, 3, z * 3
EntityTexture c, t1, 0, 3
SetENBMMesh(c, CubeTex, t2)
Beethoven(cnt) = c
Next
Next
;Guy
Global Guy = LoadShadowMesh("Media\Hellknight.b3d", False)
ScaleEntity Guy, .03, .03, .03
PositionEntity Guy, 0, 3.2, 0
EntityTexture Guy, LoadTexture("Media\Hellknight.jpg"), 0, 3
SetENBMMesh(Guy, CubeTex, LoadTexture("Media\Hellknight_Bump.jpg"))
;Ball
c = CreateShadowSphere(16, False)
ScaleEntity c, 2.5, 1.25, 2.5
t1 = LoadTexture("Media\Metal.jpg")
ScaleTexture t1, .25, .25
t2 = LoadTexture("Media\Metal_Bump.jpg")
ScaleTexture t2, .25, .25
EntityTexture c, t1, 0, 3
SetENBMMesh(c, CubeTex, t2)
StartProgram(True)
While Not KeyHit(1)
UpdateWater()
UpdateProgram(Cam, .1)
Wend
FreeShadows()
End
Function UpdateSample()
frame = frame + 1
For i = 0 To 3
RotateEntity Beethoven(i), frame * .1, frame * .1, frame * .1
Next
TurnEntity Guy, 0, .1, 0
End Function
А именно вот эти строчки:
;Ball
c = CreateShadowSphere(16, False)
ScaleEntity c, 2.5, 1.25, 2.5
t1 = LoadTexture("Media\Metal.jpg")
ScaleTexture t1, .25, .25
t2 = LoadTexture("Media\Metal_Bump.jpg")
ScaleTexture t2, .25, .25
EntityTexture c, t1, 0, 3
SetENBMMesh(c, CubeTex, t2)
Начну с конца, там интересней.
Командой "SetENBMMesh(c, CubeTex, t2)" мы говорим библиотеке привязать к сфере "c" бампмаппу "CubeTex", причем сфера у нас будет иметь стандартную текстуру "t2". Ясно? Наверное да.
Далее стоило бы поговорить про эти строчки:
floor_bump = LoadTexture("Media\Rock_Bump.jpg")
ScaleTexture floor_bump, 20, 20
c = CreateWater(floor_bump, 100)
ScaleEntity c, .2, 1, .2
floor_tex = LoadTexture("Media\Rock.jpg")
ScaleTexture floor_tex, 20, 20
EntityTexture c, floor_tex, 0, 3
Тут еще интересней. Появилась некая команда "CreateWater()"
Вот она вкратце:
CreateWater(bumpmap, size = 100, round = False)
bumpmap - бампмапа воды
size - размер плоскости воды
round - если принимает значение "Правда", то создается округлая плоскость, вместо квадратной
Этой командой мы создаем плоскость просто с бампмапой и зеркалом, что само собой подразумевает воду. Для достижения большего эффекта текстуру можно постоянно двигать. Получается прикольно
Далее необходимо в цикле добавить команду "UpdateWater()". Команда неинтересная, про нее говорить не буду.
Ну и все, вернемся к коду:
floor_bump = LoadTexture("Media\Rock_Bump.jpg")
ScaleTexture floor_bump, 20, 20
c = CreateWater(floor_bump, 100)
ScaleEntity c, .2, 1, .2
floor_tex = LoadTexture("Media\Rock.jpg")
ScaleTexture floor_tex, 20, 20
EntityTexture c, floor_tex, 0, 3
В данном случае вода используется несколько не по назначению, чисто для прикольного зеркала.
Здесь мы командой "c = CreateWater(floor_bump, 100)" говорим блитцу, что нам надобно создать квадратную "воду" по имени "c" с размером 100, причем имеющую бампмапу по имени "floor_bump".
Ну вроде все. В планах - переведенный хелп. Удачи вам в познании блитца, господа!
Таки да, узнал я зачем же свет на пустую точку наводить - без этого теней вы не увидите!
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо KCEPOKC за это полезное сообщение:
|
|
11.10.2013, 00:15
|
#6
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: Туториал по "Devil Shadow System"
Дык а скрин с тенями можно?
|
(Offline)
|
|
11.10.2013, 05:10
|
#7
|
Быдлокодер
Регистрация: 05.07.2009
Адрес: Проспит
Сообщений: 5,024
Написано 2,313 полезных сообщений (для 5,350 пользователей)
|
Ответ: Туториал по "Devil Shadow System"
Сообщение от moka
Дык а скрин с тенями можно?
|
Такие же как в ашадове - юзается dx7.dll
|
(Offline)
|
|
11.10.2013, 15:01
|
#8
|
Принтер
Регистрация: 21.04.2013
Адрес: Больше не РФ
Сообщений: 570
Написано 342 полезных сообщений (для 1,242 пользователей)
|
Ответ: Туториал по "Devil Shadow System"
Сообщение от moka
Дык а скрин с тенями можно?
|
Оки Доки
|
(Offline)
|
|
11.10.2013, 15:28
|
#9
|
Принтер
Регистрация: 21.04.2013
Адрес: Больше не РФ
Сообщений: 570
Написано 342 полезных сообщений (для 1,242 пользователей)
|
Ответ: Туториал по "Devil Shadow System"
Решил запилить примерчик. Вот держите. Модель танчика и все текстуры скачаны. Приятного просмотра
Управление:
w-вперед
a-влево
s-назад
d-вправо
Мышка - поворот
Код в комплекте. Бампмаппинг не юзал, да и смысла не вижу.
Я надеюсь, либа уже установлена
|
(Offline)
|
|
11.10.2013, 16:22
|
#10
|
Принтер
Регистрация: 21.04.2013
Адрес: Больше не РФ
Сообщений: 570
Написано 342 полезных сообщений (для 1,242 пользователей)
|
Ответ: Туториал по "Devil Shadow System"
Перевел хелп. Наконец. Было трудно, но я сделал это.
На этом мое повествование почти закончилось - осталось только написать свой пример с ENBM. Ждемс.
|
(Offline)
|
|
17.10.2013, 16:31
|
#11
|
Принтер
Регистрация: 21.04.2013
Адрес: Больше не РФ
Сообщений: 570
Написано 342 полезных сообщений (для 1,242 пользователей)
|
ENBM
Вот и все. Наконец я доделал тутор.
Пример с Бамп Маппингом. Все сурово, немного рябит в глазах, но главное смысл отражает: ОНО РАБОТАИТ!
Извините, код не прокомментирован. Делал в в попыхах.
Впрочем там все ясно.
Затем, я так думаю, напишу тутор по ашадову, затем сравню его с девилом в отдельной теме.
Последний раз редактировалось KCEPOKC, 17.10.2013 в 20:33.
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо KCEPOKC за это полезное сообщение:
|
|
17.10.2013, 16:53
|
#12
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Ответ: Туториал по "Devil Shadow System"
Честно сказать - молодец за труды. Но если ты ожидаешь что это кому-то понадобиться, зря надеешься.
Вот на шейдерах чегонить - понадобиться кому-то, даже не столько сам код, сколько вдохновление и т.п.
Я заметил что много кого шейдеры прикалывают, и друг-дружку вдохновляют.
Вон на гд.ру есть темка с шейдерами, народ выкладывает картинки, и всем приятно, вдохновляет.. А вот ковыряя и так мёртвый труп - доставит только олдфагам.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
17.10.2013, 17:04
|
#13
|
Быдлокодер
Регистрация: 05.07.2009
Адрес: Проспит
Сообщений: 5,024
Написано 2,313 полезных сообщений (для 5,350 пользователей)
|
Ответ: ENBM
Сообщение от XoreX
Вот и все. Наконец я доделал тутор.
Пример с Бамп Маппингом. Все сурово, немного рябит в глазах, но главное смысл отражает: ОНО РАБОТАИТ!
Извините, код не прокомментирован. Делал в в попыхах.
Впрочем там все ясно.
Затем, я так думаю, напишу тутор по ашадову, затем сравню его с девилом в отдельной теме.
|
Скриншот ты не сделал =/
Бампмапинг извините, говняный:
На чистом блице всё намного симпатичнее:
P. S. Жду когда изучишь ашадов и сравнишь библиотеки.
P. P. S. По краям сферы борьба полигонов.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
17.10.2013, 20:25
|
#14
|
Принтер
Регистрация: 21.04.2013
Адрес: Больше не РФ
Сообщений: 570
Написано 342 полезных сообщений (для 1,242 пользователей)
|
Ответ: ENBM
Сообщение от Arton
P. P. S. По краям сферы борьба полигонов.
|
Борьба полигонов происходит при разрешении выше 1024 на 768. Сам охреневаю.
А так то да, бампмаппинг там хреново реализован. Честно. Так что ашадов меня ждет
p.s. Извиняйте за скрин. Ща будет!
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
17.10.2013, 20:50
|
#15
|
Быдлокодер
Регистрация: 05.07.2009
Адрес: Проспит
Сообщений: 5,024
Написано 2,313 полезных сообщений (для 5,350 пользователей)
|
Ответ: ENBM
Сообщение от XoreX
Борьба полигонов происходит при разрешении выше 1024 на 768. Сам охреневаю.
А так то да, бампмаппинг там хреново реализован. Честно. Так что ашадов меня ждет
p.s. Извиняйте за скрин. Ща будет!
|
Про разрешение грустно, смысл тогда использовать
С ашадовым такая тем, на старой версии библиотеки работали все примеры. Однако же как только автор пофиксил либу для висты и выше (до этого тени работали только на XP), начались проблемы, прежние примеры некорректно работают, например: нету мягких теней (хотя может это я не нашёл), прежние примеры бампмапинга перестали работать, есть бамп но нету тени и т. п.
Понять в чём дело мне так и не удалось
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 14:21.
|