Форум программистов, компьютерный форум, киберфорум
Наши страницы
Бета-тестирование
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.90/10: Рейтинг темы: голосов - 10, средняя оценка - 4.90
infobos
Строитель
455 / 72 / 4
Регистрация: 18.06.2010
Сообщений: 499
1

Игра Лабиринт. 3D движок от первого лица (WinAPI C++ OpenGL) + исходник кода

27.04.2017, 09:10. Просмотров 2039. Ответов 34
Метки нет (Все метки)

Здравствуйте!

Игра Лабиринт. 3D движок от первого лица

Кто будет участвовать в тестировании, и давать полезные советы получит исходник этой игры.

Игра написана на Visual Syudio Win32 API пустой проект. 3D графика OpenGL.
Пришлось самому выпиливать трехмерный движок, так как в интернете не мог найти 3D игры с открытым кодом написанные на WinAPI+OpenGL.

Игру писал не ради того, чтобы в нее играли, а ради того, чтобы получить опыт в программировании и протестировать возможности OpenGL. Цель была понять границы скорости рисования.
На новых видеокартах скорость впечатляет.

На новых видеокартах работать будет. А на старых могут быть тормоза.

Приготовил несколько файлов Test1, Test2, Test3, Test4, Test5.
Прошу протестировать каждый на работоспособность и указать FPS для каждого файла.
Пройти игру на test5.exe
Также укажите, какая у Вас видеокарта и свойства ПК.

Постарайтесь занять одно сообщение.
Тем, кто помогал, пишите мне в личку E-mail и на него будет выслан исходник этой игры.
0
Вложения
Тип файла: rar Test.rar (394.8 Кб, 71 просмотров)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.04.2017, 09:10
Ответы с готовыми решениями:

Игра "Лабиринт" в 2D openGL
Есть следующий код: #include "stdafx.h" using namespace std; struct object {GLdouble x; GLdouble...

Игра лабиринт. ИИ в лабиринте. Как задать лабиринт
У меня есть следующее задание: Дано: - робот - лабиринт Задание: - Нужно реализовать...

OpenGL рисование с VBO пример кода на голом WinAPI
Изучение VBO оказалось муторным занятием, хотя опытные программисты говорят, что от массива вершин...

Нужен исходник пограммы, создающей случайный лабиринт
Очень нужен исходник пограммы, создающей случайный лабиринт. Даны размеры матрицы: SxD (если можно...

Лабиринт для мыши. C++ и WinAPI
Доброго времени суток! Нужна помощь в написании небольшой игры "Лабиринт для мыши" с использованием...

34
infobos
Строитель
455 / 72 / 4
Регистрация: 18.06.2010
Сообщений: 499
27.04.2017, 09:12  [ТС] 2
Вот картинка старта игры
0
Миниатюры
Игра Лабиринт. 3D движок от первого лица (WinAPI C++ OpenGL) + исходник кода  
8Observer8
2613 / 1630 / 288
Регистрация: 05.10.2013
Сообщений: 5,055
Записей в блоге: 86
27.04.2017, 10:12 3
Конфигурация компьютера
Asus K53SV; 8 ГБайт RAM, i3 2.2 ГГц (2 ядра); Intel HD Graphics 3000; Nvidia Geforce GT 540M (1 ГБайт); Windows 10

Результат с запуском с интегрированной картой ноутбука Intel HD Graphics 3000 (запускается поумолчанию, OpenGL 3.1)
Test1: 103
Test2: 102
Test3: 101
Test4: 133
Test5: 135

Результат с запуском с дискретной картой ноутбука Nvidia Geforce GT 540M (запускаю принудительно, OpenGL 4.5)
Test1: 60
Test2: 60.1
Test3: 60.1
Test4: 61
Test5: 60

Добавлено через 5 минут
В итоге получается, что с более мощной видеокартой выдаёт примерно 60 FPS на всех тестах.
1
Pro_grammer
Модератор
6181 / 2265 / 443
Регистрация: 24.04.2011
Сообщений: 4,019
Записей в блоге: 10
27.04.2017, 13:57 4
Видео -Sapphire Radeon HD 6770, win7, x64
по FPS, все в среднем +-100:
1- 540
2- 530
3- 530
4- 1100
5- 1200
1
infobos
Строитель
455 / 72 / 4
Регистрация: 18.06.2010
Сообщений: 499
27.04.2017, 14:29  [ТС] 5
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Test1: 60
Test2: 60.1
Test3: 60.1
Test4: 61
Test5: 60
Тут конечно мысли появились на то, что система специально подгоняет под 60 fps. Есть над чем задуматься. Стоит защита от бессмысленной перегрузки видеокарты более 60 fps. Мои два ПК этого не делают. Мой стационарный ПК приближается к 1050 fps. В таком режиме мы сильно грузим видеокарту. Я специально пошел на такой шаг ради тестирования производительности. На будущее будем считать время прорисовки по другому.
0
dimcoder
Полярный
471 / 443 / 158
Регистрация: 11.09.2011
Сообщений: 1,153
27.04.2017, 16:08 6
Цитата Сообщение от infobos Посмотреть сообщение
Тут конечно мысли появились на то, что система специально подгоняет под 60 fps. Есть над чем задуматься. Стоит защита от бессмысленной перегрузки видеокарты более 60 fps.
Вертикальная синхронизация. Можно менять в графических настройках. Из приложения тоже можно вкл/выкл, если что, но только если эти графические настройки это позволяют.
1
Fulcrum_013
1547 / 1194 / 139
Регистрация: 14.12.2014
Сообщений: 10,234
Завершенные тесты: 3
27.04.2017, 16:26 7
Цитата Сообщение от 8Observer8 Посмотреть сообщение
В итоге получается, что с более мощной видеокартой выдаёт примерно 60 FPS на всех тестах.
т.е упирается в VSinc монитора.

Добавлено через 2 минуты
Цитата Сообщение от infobos Посмотреть сообщение
Тут конечно мысли появились на то, что система специально подгоняет под 60 fps.
Она подгоняет под рефреш рейт монитора. Если у монитора рефреш 60Hz то считать больше фреймов просто не имеет смысла. Т.е. после просчета очередного кадра GL или DX ждет до нового цикла рефрша монитора после чего меняет местами бэк и фронт буфера.
1
_Develop
264 / 173 / 28
Регистрация: 24.01.2013
Сообщений: 534
27.04.2017, 18:35 8
CPU - Intel Core2Duo E8400 @ 3.0 GHz
Видео - AMD Radeon R9 280X
Система - win7, x64

1 - 250
2 - 245
3 - 250
4 - 380
5 - 390 (после того как вышел из лабиринта стало 320)
http://www.cyberforum.ru/attachment....1&d=1493307438

Не по теме:

З.Ы. у меня не сбалансированный компьютер, слабый проц для такой видеокарты. Плюс старая материнка поддерживает только шину PCI Express 1.0, хотя карта рассчитана на 3.0, отсюда малый прирост фпс. Думаю если запихнуть все вершины в VBO, что-бы не гонять их по шине, то фпс будет больше 500.

1
Миниатюры
Игра Лабиринт. 3D движок от первого лица (WinAPI C++ OpenGL) + исходник кода  
Evg
Эксперт CАвтор FAQ
19789 / 7429 / 560
Регистрация: 30.03.2009
Сообщений: 20,705
Записей в блоге: 30
27.04.2017, 20:07 9
core i5-3570
gtx 660 ti
16G
Win7-64

1 - 1550
2 - 1550
3 - 1550
4 - 2500
5 - 2700

Цитата Сообщение от dimcoder Посмотреть сообщение
Вертикальная синхронизация. Можно менять в графических настройках
У меня тоже было 60. Полез в настройки, стам стоял вариант по умолчанию "Использовать настройку 3d-приложения"

Цитата Сообщение от dimcoder Посмотреть сообщение
Из приложения тоже можно вкл/выкл, если что, но только если эти графические настройки это позволяют
Это уже повод ТС'у поискать, как всё это делается программно. Негоже пользователю самому ковыряться в настройках

Кстати, при отключенной синхронизации я услышал свист видеокарты. Впервые за несколько лет. В играх такого свиста не было. На первый взгляд кажется, что это из-за того, что выдаётся слишком много fps. Но когда я играл в TF2, у меня графические настройки стояли сравнительно низкие (ибо летающие перед глазами руки-ноги-головы мешали играть), и в игре выдавалось в отдельных местах под 500-600-700 fps. При этом свиста точно не было
1
8Observer8
2613 / 1630 / 288
Регистрация: 05.10.2013
Сообщений: 5,055
Записей в блоге: 86
27.04.2017, 20:11 10
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Она подгоняет под рефреш рейт монитора. Если у монитора рефреш 60Hz то считать больше фреймов просто не имеет смысла. Т.е. после просчета очередного кадра GL или DX ждет до нового цикла рефрша монитора после чего меняет местами бэк и фронт буфера.
Вы не знаете, почему тогда на моём ноутбуке с первой интегрированной картой (которая запускается поумолчанию) выдаёт на данных тестах 100-130 FPS, а с второй дискретной более мощной - 60 FPS?
0
Evg
Эксперт CАвтор FAQ
19789 / 7429 / 560
Регистрация: 30.03.2009
Сообщений: 20,705
Записей в блоге: 30
27.04.2017, 21:22 11
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Вы не знаете, почему тогда на моём ноутбуке с первой интегрированной картой (которая запускается поумолчанию) выдаёт на данных тестах 100-130 FPS, а с второй дискретной более мощной - 60 FPS?
Вертикальная синхронизация - это свойство видеокарты. В твоём случае на интегрированной она выключена, а на дискретной включена. Покопайся в настройках дискретной карты
2
dimcoder
Полярный
471 / 443 / 158
Регистрация: 11.09.2011
Сообщений: 1,153
27.04.2017, 22:17 12
Цитата Сообщение от Evg Посмотреть сообщение
У меня тоже было 60. Полез в настройки, стам стоял вариант по умолчанию "Использовать настройку 3d-приложения"
У меня на "Использовать настройки 3d-приложения" выдает 200 фпс. Видюха только встроенная. А Вас есть внешняя, может не те настройки смотрели? Если те, то я хз почему такая разница.
1
Evg
Эксперт CАвтор FAQ
19789 / 7429 / 560
Регистрация: 30.03.2009
Сообщений: 20,705
Записей в блоге: 30
27.04.2017, 23:17 13
У меня только одна видеокарта. Возможно, что у OpenGL дефолтные настройки в приложении как-то по разному выставляются в зависимости от чего-то (может от железа, может от винды, может от конкретной версии драйвера)
0
Fulcrum_013
1547 / 1194 / 139
Регистрация: 14.12.2014
Сообщений: 10,234
Завершенные тесты: 3
27.04.2017, 23:36 14
i32120 GeForce GT 730
Цитата Сообщение от Evg Посмотреть сообщение
Возможно, что у OpenGL дефолтные настройки в приложении как-то по разному выставляются в зависимости от чего-то (может от железа, может от винды, может от конкретной версии драйвера)
У NVidea выставляется для всех API сразу. Причем 5 вариантов - настрока приложения, включен, выключен, адаптивный, адаптивный на половине частоты обновления монитора. т.е. из 5 вариантов приложение управляет только в одном.

Добавлено через 14 минут
i3-3120@3.3Ghz RAM 12GB DDR3
Geforce 730 2GB DDR5
Windows-10 64 Bit
В исходном окне:
Test1 - 1300 FPS
Test2 - 1330 FPS
Test3 - 1375FPS
Test4 - 1670FPS
Test5- 2000FPS
В окне развернутом на полный экран FullHD 1920x1080
Test1 - 1200Fps
Test2 - 958Fps
Test3 - 900FPS
Test4- 1000FPS
Test5- 1000FPS

Ну а вообще стоило бы сделать реально полноэкранный режим. Он обычно пошустрее оконного и имеет поддержку стерео.
1
infobos
Строитель
455 / 72 / 4
Регистрация: 18.06.2010
Сообщений: 499
28.04.2017, 06:29  [ТС] 15
Цитата Сообщение от Evg Посмотреть сообщение
Это уже повод ТС'у поискать, как всё это делается программно. Негоже пользователю самому ковыряться в настройках
Это наверно тяжелый путь. Наверно нужно будет собирать базу настроек для каждой видеокарты. Можно на первых порах выкрутится другими способами по стабилизации fps например, использовать SetTimer(hWnd,1,16,NULL); или еще что-нибудь. Для 3D редактора пойдет, а вот для игр может оказаться малоскоростной. Читал где-то в инете, что SetTimer() имеет плохую точность. при высоких скоростях передвижения мы видим ряб-дискрет, который ухудшает восприятие кадра, потому что предмет сдвигается скажем не на один пиксель, а на два-три пикселя через кадр. Ну это надо будет протестировать.

Спасибо за мнения, сам бы я на 4 ПК до таких вещей не додумался.

На разработку игры я наверно потратил 3-5 дня.
Скелет общей программы окна, разрабатывался ранее.
Движок камеры от первого лица 1-2 дня. (знание синусов и косиносов очень пригодились)
Схема лабиринта 1 день.
Логика ограничения передвижения камеры в лабиринте 1.5 дня.
Оптимизация кода под массивы вершин 1 день.
Все остальное время, это поиск операций в OpenGL. (С OpenGL плотно начал знакомиться месяца 2 назад. Знакомился по многим источникам: Книги, статьи, исходники, были платные заказы, консультации). Я к тому, что без платной помощи можно было потратить на много больше времени.
Самым сложным в программировании - это тупо найти и заставить работать код OpenGL.

Следующим этапом попробую VBO подключить, может еще даже попробую DirectX подключить к этой игре.

Выкладываю исходник игры, надеюсь новичкам будет полезно. Написан на Visual Studio 2012. Запускайте файл (Win32Project1.sln) Там ошибок много(в плане построения кода), если хотите прокомментировать ошибки, то пишите почитаю. А ошибки я не убирал даже потому, чтобы протестировать ошибки при запуске. И вроде никто на ошибки не пожаловался. Значит внешне ошибок нет. В последний момент оптимизации, сильно не старался украшать код под ООП. Меняя часть кода появятся ошибки, так как я не стал тратить время на связи значений. Например, если поменяете лабиринт через матрицу, то нужно подогнать количество полигонов для массива, расчет полигонов не ведется и многое потом писалось на скорую руку.

Хотелось бы услышать мнения о 3D движке. Как сделан 3D движок? У него есть свое название? Есть другие способы реализации? Может есть какие-то шаблоны на 3D движки от первого лица, дайте ссылку.
1
Вложения
Тип файла: rar Лабиринт Исходник.rar (8.17 Мб, 37 просмотров)
8Observer8
2613 / 1630 / 288
Регистрация: 05.10.2013
Сообщений: 5,055
Записей в блоге: 86
28.04.2017, 07:21 16
Может информация вам такая пригодится. Как я писал, на некоторых (а может на всех) ноутбуках ставят две видео карты: маломощная и более мощная. Поумолчанию все программы запускаются с маломощной. Это делается для экономии энергии. И так работает программа Optimus от NVidia. Я, например, сейчас изучаю и использую OpenGL 3.3 и более высокие версии и мне нужно чтобы мои программы активировали более мощную видео карту, так как на маломощную максимально можно поставить драйвера с OpenGL 3.1. В общем, как написано здесь https://docs.nvidia.com/gameworks/co...op/optimus.htm нужно в начале программы (там где #indude'ы и #define'ы) добавить такую строку:
C++
1
extern "C" _declspec(dllexport) DWORD NvOptimusEnablement = 0x00000001;
Это только на случай если вы используете версию OpenGL 3.3 и более и хотите, чтобы ваша программа запускалась со второй более мощной видео картой.
1
Fulcrum_013
1547 / 1194 / 139
Регистрация: 14.12.2014
Сообщений: 10,234
Завершенные тесты: 3
28.04.2017, 08:27 17
Цитата Сообщение от infobos Посмотреть сообщение
Это наверно тяжелый путь.
Для DirectX это выставление значений двух полей в структуре инициализации. Для GL примерно так же должно быть.

Добавлено через 2 минуты
Цитата Сообщение от infobos Посмотреть сообщение
У него есть свое название?
Ну внешне издали похоже на Wolfenstain 3D. Но у того правда совсем другой метод отрисовки стен на рейкастинге был а не на Z Buffer со всеми вытекающими (типа взгляда строго параллельно полу). Ну и железо тогда совсем другое было.

Добавлено через 24 минуты
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Поумолчанию все программы запускаются с маломощной. Это делается для экономии энергии.
Маломощная она вообще в сам проц интегрирована и соответственно стартует первой по умолчанию. Отсюда и дефаултная. Если в биосе переставить Init Display First то можно и с дискретки стартовать.
Цитата Сообщение от 8Observer8 Посмотреть сообщение
и использую OpenGL 3.3 и более высокие версии и мне нужно чтобы мои программы активировали более мощную видео карту, так как на маломощную максимально можно поставить драйвера с OpenGL 3.1.
Странно однако. У меня интегрированная более древняя Intel HD 2000, стартовала сколько жила с контекстом GL 4.5 пока ее дрова поддерживали. D3D11 feature level 11 тоже без проблем работала. Жаль дров для процов без AVX2 больше не выпускают.

Добавлено через 21 минуту
Цитата Сообщение от infobos Посмотреть сообщение
SetTimer(hWnd,1,16,NULL); или еще что-нибудь.
У SetTimer точность плюс минус лапоть в лучшем случае. Не менее 4 в среднем 16мс задержки если винда в это время ничем другим заняться не решила. Лучше вертикальной синхронизации для этих целей под виндой скорее всего ничего не придумать.

Добавлено через 2 минуты
Цитата Сообщение от infobos Посмотреть сообщение
Следующим этапом попробую VBO подключить, может еще даже попробую DirectX подключить к этой игре.
Лучше сначала DirectX а потом уже думать нужен ли VAO и прочие заморочки с OpenGL если таргет винда.
1
8Observer8
2613 / 1630 / 288
Регистрация: 05.10.2013
Сообщений: 5,055
Записей в блоге: 86
28.04.2017, 09:52 18
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Маломощная она вообще в сам проц интегрирована и соответственно стартует первой по умолчанию. Отсюда и дефаултная. Если в биосе переставить Init Display First то можно и с дискретки стартовать.
Есть ещё несколько способов, чтобы программа стартовала с более мощной:
  • Либо правой кнопкой по EXE и выбрать "Run with graphics processor" -> "High performance NVidia"
  • Либо в настройках "Geforce NVidia Control Panel" поставить для конкретного EXE старт с более мощной
  • Либо там же для всех EXE поставить, но тогда ноут будет немного шуметь и аккамулятор будет быстрее садиться, если не от сети
Правда, всё это сложно объяснить в ReadMe конечному пользователю моих программ, поэтому я добавляю ту одну строчку кода из документации NVidia.
1
Fulcrum_013
1547 / 1194 / 139
Регистрация: 14.12.2014
Сообщений: 10,234
Завершенные тесты: 3
28.04.2017, 18:13 19
Цитата Сообщение от 8Observer8 Посмотреть сообщение
равда, всё это сложно объяснить в ReadMe конечному пользователю моих программ, поэтому я добавляю ту одну строчку кода из документации NVidia.
Чтобы не объяснять пользователю можно проэнумить адаптеры и создавать девайc на нужном. Вплоть до что у DX при создании девайса задается два хендла - девайса на котором считать и окна/монитора в которое выводить. Нечто подобное должно быть и у GL.
1
8Observer8
2613 / 1630 / 288
Регистрация: 05.10.2013
Сообщений: 5,055
Записей в блоге: 86
28.04.2017, 19:19 20
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Чтобы не объяснять пользователю можно проэнумить адаптеры и создавать девайc на нужном. Вплоть до что у DX при создании девайса задается два хендла - девайса на котором считать и окна/монитора в которое выводить. Нечто подобное должно быть и у GL.
Проблему с программой Optimus от NVidia я решил, так как они советуют в своей документации для разработчиков: https://docs.nvidia.com/gameworks/co...op/optimus.htm

А именно путём копирования в свой код одной строчки кода:
C++
1
extern "C" _declspec(dllexport) DWORD NvOptimusEnablement = 0x00000001;
Добавлено через 2 минуты
То есть этот вопрос для меня не актуален. Давайте не будет отвлекаться от темы.
1
28.04.2017, 19:19
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.04.2017, 19:19

Камера от первого лица
В который раз, вечер добрый, очередная проблема, хотя не решились еще предыдущие) Необходимо...

Игра лабиринт!
Необходимо создать программу-игру лабаиринт!! на форме!! очень срочно нужно у кого есть исходники...

Игра Лабиринт
Кто-нибудь может помочь написать игру "Лабиринт" на Си? Или может у Вас есть исходники?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru