[Quote]

    AZJIO
  • 17953
  • Longevity: 6 years 2 months
  • Posts: 1292
  • REPUTATION:127

    [+] [-]
3D-графика на PureBasic
Скачать (исходники в комплекте)
Три примера Ландшафт, Океан, Самолёт
В каждом исходнике ссылка на тему, где автор pf shadoko опубликовал код.

Из последних правок:
1. Оставил ранее вставленный ключ #PB_Engine3D_DebugLog, который принуждает библиотеку писать лог инициализации движка, то есть все ошибки, с которыми столкнётся движок напишет в лог.
2. Русифицировал меню в левом верхнем углу (горячие клавиши).
3. Добавил Linux-версию (океан), и в исходнике указал прямые пути на файл-движок-3D и текстуру, так как относительные не видит.
В ландшафт не отображается меню и пока не разгадал причину, в общем там должны отображаться следующие горячие клавиши:

Для Ландшафта

Перемещение : Стрелки + мышь
[F1]->[F5] Выбрать местность
[F11] Полёт/прогулка
[F12] Каркас, плоскости
[Esc] Выход
До кучи остальные:

Для океана

Перемещение: Стрелки, мышь, колесо
Волны:
[F1] / [F2] Поперечные: 100%
[F3] / [F4] Малые: 100%
[F5] / [F6] Продольные : 100%
[F7] / [F8] Пена: 100%
[F11] Полёт/прогулка
[F12] Каркас, плоскости
[Esc] Выход

Для самолёта

[Стрелки] / Мышь - Штурвал/ручка
[Pad 2-1] / ЛКМ-ПКМ - Руль
[Pad 0-1] / Колесо - Двигатель (задаёт в процентах)
[F1] Камера
[F2] Дым
[Esc] Выход
Двигатель 100%
Высота
Скорость

[Quote]

    Gvint64
  • 24573
  • Longevity: 4 years
  • Posts: 567
  • REPUTATION:65

    [+] [-]
AZJIO, aa
убрать квадратик методом удаления CreateSprite не совсем удачно, там же далее идёт обращение к спрайту, чтобы отобразить его (каждые 60 раз в секунду).
CreateSprite(0,0,0,#PB_Sprite_AlphaBlending)
Это не удаление - квадратик просто размером 0,0,0.

[Quote]

    AZJIO
  • 17953
  • Longevity: 6 years 2 months
  • Posts: 1292
  • REPUTATION:127

    [+] [-]
Gvint64, спрайт отображает вызов функции DisplayTransparentSprite(0,8,8). Если его убрать, то можно целиком убрать функцию menu() и её вызов. Но это же не игра а просто демонстрация.
Я не понял почему в ландшафте не отображается. Если сам спрайт отобразился, значит текст, нарисованный на нём заранее тоже должен отображаться, кроме как если проблема цвета и он совпал с фоном или проблема координат нарисованного текста - нарисовался за пределами квадрата. Я уже из океана подставлял функцию, пока не получилось.

[Quote]

    Gvint64
  • 24573
  • Longevity: 4 years
  • Posts: 567
  • REPUTATION:65

    [+] [-]
102711Я уже из океана подставлял функцию, пока не получилось
Да это я тоже пробовал - тоже самое. Собственно поэтому и подумал спрятать квадратик. Кнопки всё равно работают.

[Quote]

    qwea2005
  • 1759
  • Longevity: 8 years 7 months
  • Posts: 75
  • REPUTATION:3

    [+] [-]
102711Я не понял почему в ландшафте не отображается.
AZJIO, aa, может поможет разобраться в этом мои "эксперименты над ландшафтом". Вообщем случайно заметил, если на ноутбуке тачпадом перемещать ландшафт вверх-вниз, то можно поймать момент, когда в квадрате появится надпись... aa

[Quote]

    AZJIO
  • 17953
  • Longevity: 6 years 2 months
  • Posts: 1292
  • REPUTATION:127

    [+] [-]
qwea2005, да, у меня тоже ловится чуть выше горизонта и второй раз почти вверху.
Вообще как то странно на 3D движке поверх накладывается 2D изображение движком спрайтов. При чём в коде "самолёт" ещё и перерисовка спрайта, в то время как Fred (автор PureBasic) говорил что перерисовка спрайтов не должна производится во время уже работающей игры, так как сводит на нет всю скорость спрайтов, потому что выгружает спрайт из памяти видеокарты в память ОЗУ чтобы перерисовать спрайт. Советовал если нужны тексты и прочее, то заранее сгенерировать буквы в виде картинок-спрайтов и составлять из них текст, то есть счёт и прочие цифры. Видеокарта с высокой скоростью расставляет картинки в своей памяти в любые позиции, вращает их и т.д., но если их выгружать для перерисовки то это снизит FPS.
Для пробы я поставил отображение спрайта DisplayTransparentSprite() до отрисовки мира RenderWorld(), мир сразу стал без текстур, голые палки, как будто горевший лес.
Также поиграл параметрами OpenScreen() изменял глубину цвета, менял на OpenWindowedScreen(), увеличивал размеры спрайта в 4 раза. Иногда на спрайте какая то движуха, как будто кусок зеркала крутится. Пробовал удалить спрайт и пересоздавать прямо в цикле, перед его отображением, тоже не помогло.

[Quote]

    AZJIO
  • 17953
  • Longevity: 6 years 2 months
  • Posts: 1292
  • REPUTATION:127

    [+] [-]
Автор выпустил ещё код, добавлен Sprite в архив. Нажать пробел, чтобы переключаться между 4-мя демонстрациями.


Display posts:    

Current time is: 25-May 10:55

All times are UTC + 3


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You cannot download files in this forum