[Цитировать]

    AZJIO
  • 17953
  • Стаж: 6 лет 9 месяцев
  • Сообщений: 1325
  • Репутация: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%
Высота
Скорость

[Цитировать]

    Gvint64
  • 24573
  • Стаж: 4 года 7 месяцев
  • Сообщений: 626
  • Репутация:72

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

[Цитировать]

    AZJIO
  • 17953
  • Стаж: 6 лет 9 месяцев
  • Сообщений: 1325
  • Репутация:127

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

[Цитировать]

    Gvint64
  • 24573
  • Стаж: 4 года 7 месяцев
  • Сообщений: 626
  • Репутация:72

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

[Цитировать]

    qwea2005
  • 1759
  • Стаж: 9 лет 1 месяц
  • Сообщений: 75
  • Репутация:3

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

[Цитировать]

    AZJIO
  • 17953
  • Стаж: 6 лет 9 месяцев
  • Сообщений: 1325
  • Репутация:127

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

[Цитировать]

    AZJIO
  • 17953
  • Стаж: 6 лет 9 месяцев
  • Сообщений: 1325
  • Репутация:127

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


Показать сообщения:    

Текущее время: 14-Дек 12:28

Часовой пояс: UTC + 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы