Форум программистов, компьютерный форум, киберфорум
Программирование игр
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Just Do It!
 Аватар для XLAT
4219 / 2680 / 656
Регистрация: 23.09.2014
Сообщений: 9,235
Записей в блоге: 3

Давайте сделаем игру Columns

09.12.2025, 17:46. Показов 20875. Ответов 315
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Igor3D Посмотреть сообщение
Какие есть предложения?
давай лучше игру запилим
например, ТЗ https://disk.yandex.ru/d/l7-X5wW48Zn9Ig

так как тут все кодеры-одиночки, то каждый пилит сам - полностью всю игру, но есть другой вариант,

который гораздо прогрессивнее:

порезать игру на модули - каждый пилит свою часть.

затем части складываются в одно целое, которое и есть целевая программа - игра.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.12.2025, 17:46
Ответы с готовыми решениями:

Господа программисты есть идея создать игру. Давайте объединимся
Итак есть идея создать онлайн игру. Игра платная, приносящая доход владельцам. Предложение такое:...

Может соберемся и сделаем игрушку?
Вообщем. Предлогаю отписаться здесь всем энтузиастам и желающим. Не спрашивайте про диздоки и всё...

Может соберемся и сделаем что-нибудь вместе?
Предлагаю вполне закономерную для веб-программистов идею создать какой-нибудь(какой после...

315
Just Do It!
 Аватар для XLAT
4219 / 2680 / 656
Регистрация: 23.09.2014
Сообщений: 9,235
Записей в блоге: 3
11.12.2025, 23:51  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от XLAT Посмотреть сообщение
я заценю
заценил - это костыль.

я нашёл в кишках движка где нужно подправить, но это тоже не гуд...
да и нудно ребилдить весь двиг ...

Цитата Сообщение от Royal_X Посмотреть сообщение
Ладно, ты попробуй разобраться.
ок.
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6315 / 3038 / 1054
Регистрация: 01.06.2021
Сообщений: 11,574
12.12.2025, 00:56
XLAT, ну конечно костыль. Но эта папка реально меня бесит. Менять что-то в файлах движка не хочу. Пусть пока будет так. Я ещё попытаюсь найти способ, как указать при старте игры путь к ogre.cfg, поскольку после удаления папки игра просит заново настроить, а если укажу путь, то будет норм.

Предварительно я нашел
C++
1
2
3
4
Ogre::Root::Root    (   const String &  pluginFileName = "plugins.cfg",
const String &  configFileName = "ogre.cfg",
const String &  logFileName = "Ogre.log" 
)
Сейчас пишу с телефона и пока я эту функцию не тестировал.
Но если этот метод заработает, то будет круто. Можно будет создать папку рядом с игрой и засунуть внутрь все эти файлы.

Когда будешь разбираться в камере, то обрати внимание, что Ogre использует такую координатную систему:


Т.е. центр плоскости расположен в точке (0,0,0). Шар же на 100 приподнят вверх (по оси Y).

Полагаю, что камеру можно разместить на (0, 1000, 1000).

Т.е. по Х будет выровнена по центру координат, на высоте 1000 и будет отдалена на юг от центра координат на 1000 (или 500 от стороны плоскости).
0
Just Do It!
 Аватар для XLAT
4219 / 2680 / 656
Регистрация: 23.09.2014
Сообщений: 9,235
Записей в блоге: 3
12.12.2025, 04:25  [ТС]
1.
Цитата Сообщение от Royal_X Посмотреть сообщение
Ладно, ты попробуй разобраться.
почему лук не может поставить взгляд в точку мне щас не понятно(разрабы же не дураки?!).
но выставить взгляд можно, покрутив ноды(2 штуки по эйлеру), на которых прицеплена камера.
вообщем это теоретическая задача, требующая даже не решения, а понимания))

Цитата Сообщение от Royal_X Посмотреть сообщение
Т.е. центр плоскости расположен в точке
мы не знаем как движок крутит камеру, но можем догадаться, проделав эксперименты...

короче, я пошёл другим(лёгким) путем: поставил камеру по дефолту - так, чтобы ей не надо было прокручиваться...


камера управляемая мышью + WASD.
код на гитхабе: проект "Test2"

2.
Цитата Сообщение от Royal_X Посмотреть сообщение
Но эта папка реально меня бесит
я написал письмо разрабам(им на форум) - так что сидим и ждём.
1
Just Do It!
 Аватар для XLAT
4219 / 2680 / 656
Регистрация: 23.09.2014
Сообщений: 9,235
Записей в блоге: 3
12.12.2025, 13:51  [ТС]
Цитата Сообщение от Royal_X Посмотреть сообщение
Но эта папка реально меня бесит.
Цитата Сообщение от Royal_X Посмотреть сообщение
Предварительно я нашел
Решение найдено:

1.
На каком то этапе разрабы Огра решили убрать кишки инициализации с глаз
по дальше. Для этого придумали компонент Bites (откусанный)

2.
В этом engine\OgreMain\Components\Bites лежат два интересных для нас файла:
"incule\OgreApplicationContextBase.h "
"src\OgreApplicationContextBase.cpp"


3.
Внимание! фишка: Разрабы оставили возможность перегружать некоторые методы
из класса OgreApplicationContextBase сделав их виртуальными.

Так как грех этим не воспользоваться, то мы грешить не буем - перегрузим...

4.
Ключевой метод, который определяет куда писать "ogre.cfg":

C++
1
2
#include "OgreApplicationContextBase.h"
virtual void createRoot(); /// 169 строка
Тут мы можем только видеть исходник кода,
но он уже ушёл в бинарник библиотеки, которая у нас уже подключена в проект:
C++
1
2
#include "OgreApplicationContextBase.cpp"
void ApplicationContextBase::createRoot() /// 181 строка
5.
Далее будем перегружать virtual void createRoot() в нашем проекте "Test2.cpp"

6.
Ёлку нодов я назвал InspectorRoot - она наследует как раз этот -
нужный нам OgreApplicationContextBase

7.
Внутри него создаём аналог virtual void createRoot()
и копипастим туда весь код из "src\OgreApplicationContextBase.cpp"

8.
Там есть кусочек, который нам и нужен:

C++
1
2
3
4
5
    mRoot = OGRE_NEW Ogre::Root(
        pluginsPath,
        mFSLayer->getWritablePath("ogre.cfg"),
        mFSLayer->getWritablePath("ogre.log")
);
9.
правим его на:

C++
1
2
3
4
5
6
7
    Ogre::String ogreCfgPath{"ogre.cfg"};
    mRoot = OGRE_NEW Ogre::Root(
        pluginsPath,
    /// mFSLayer->getWritablePath("ogre.cfg"),
        ogreCfgPath,
        mFSLayer->getWritablePath("ogre.log")
);
10.
Убираем ошибки, подключив недостающие декларации:
C++
1
2
#include "OgreConfigPaths.h"
#include "OgreOverlaySystem.h"
11.
Запускаем на тест и видим, что юзается "ogre.cfg" из папки bin

12.
Если приспичит изменить конфигурацию,
то правильный способ это удалить файл oger.cfg по известному path.

13.
Если кто-то думает, что мне это всё расписала нейросеть, то это не так:
квен лучше, чем дипсик, но оба на эту тему галлюцинируют вокруг да около :лол

14.
Проверь у себя - у тебя работает?
Проблема снята???


15.
Так проект уже даже сейчас начинает переставать быть удобным для одного файла,
то я думаю начинать его дробить по файлам, оформляя файлы в иерархию(какую?).
(тот же перегруженный void createRoot() override уже сейчас начал засирать код,
который пока ещё весь в одном файле)))
0
1977 / 833 / 115
Регистрация: 01.10.2012
Сообщений: 5,117
Записей в блоге: 2
12.12.2025, 14:13
Цитата Сообщение от XLAT Посмотреть сообщение
1. порезать на модули.
Нужно иметь "что резать", это должно быть как минимум интересно. А просто "какая-то игра", с потолка, чисто для примера - это никого не привлекает, что вполне естественно. Нафиг она кому нужна чтобы ей заниматься?
0
Just Do It!
 Аватар для XLAT
4219 / 2680 / 656
Регистрация: 23.09.2014
Сообщений: 9,235
Записей в блоге: 3
12.12.2025, 14:49  [ТС]
Цитата Сообщение от Igor3D Посмотреть сообщение
Нужно иметь "что резать", это должно быть как минимум интересно.
1. Когда мы зашли в эту тему, тут вообще было пусто.
2. Чтобы резать, нужно создать что-то - чтобы создать что-то - нужно тупо взять и создать это что-то.
3. В проекте принимают участие только те, кому это интересно, что логично.
4. Если не интересно, то на кой фик тогда тут что-то писать?
5. Ага, интересен не проект, а флуд и троллинг. Хм, понять можно...
6. И, конечно, флудеров нужно морально поддерживать, отвечая им?
7. А зачем мне с ними, флудерами, поддерживать диалог, если они флудеры, а я занят техникой проекта?
8. Логичный ответ - незачем.
9. Хотя, я считаю, что флуд полезен, но в меру.
10. Мера определяется конструктивным участием.


Igor3D,
и так флуд мы обсудили.
что ещё желаете обсудить?

Цитата Сообщение от Igor3D Посмотреть сообщение
Нафиг она кому нужна чтобы ей заниматься?
тема началась с вопроса:
А кому он - парсинг обжа нафик нужен?

Цитата Сообщение от Igor3D Посмотреть сообщение
Нафиг она кому нужна чтобы ей заниматься?
ознакомьтесь, пжлста, раз вы в тайге живёте
https://en.wikipedia.org/wiki/... by_revenue

я так понимаю, что в списке нет ни одной российской, потому что вы решили,
что оно вам не интересно :лол
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6315 / 3038 / 1054
Регистрация: 01.06.2021
Сообщений: 11,574
12.12.2025, 16:32
Предлагаю сделать так:

1. Отказаться от твоего текущего подхода, когда сам проект сконфигурирован вручную для VS, где ты там указал всякие пути к инклюдам и к либам. Такое мне не нравится. Надо сделать так, чтобы любой человек мог настроить проект сам за одну минуту и не имея файла SLN и всего прочего под VS.

2. Таким образом, я предлагаю использовать CMake проект. В этом случае, любой человек может запустить Visual Studio, выбрать создать новый "CMake-проект".

3. Далее нужно создать для теста один файл, допустим OgreTest.cpp

Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
#include "Ogre.h"
#include "OgreApplicationContext.h"
#include "OgreInput.h"
#include "OgreRTShaderSystem.h"
#include <iostream>
 
using namespace Ogre;
using namespace OgreBites;
 
class BasicTutorial1
    : public ApplicationContext
    , public InputListener
{
public:
    BasicTutorial1();
    virtual ~BasicTutorial1() {}
 
    void setup();
    bool keyPressed(const KeyboardEvent& evt);
};
 
 
BasicTutorial1::BasicTutorial1()
    : ApplicationContext("OgreTutorialApp")
{
}
 
 
void BasicTutorial1::setup()
{
    // do not forget to call the base first
    ApplicationContext::setup();
    addInputListener(this);
 
    // get a pointer to the already created root
    Root* root = getRoot();
    SceneManager* scnMgr = root->createSceneManager();
 
    // register our scene with the RTSS
    RTShader::ShaderGenerator* shadergen = RTShader::ShaderGenerator::getSingletonPtr();
    shadergen->addSceneManager(scnMgr);
 
    // -- tutorial section start --
    //! [turnlights]
    scnMgr->setAmbientLight(ColourValue(0.5, 0.5, 0.5));
    //! [turnlights]
 
    //! [newlight]
    Light* light = scnMgr->createLight("MainLight");
    SceneNode* lightNode = scnMgr->getRootSceneNode()->createChildSceneNode();
    lightNode->attachObject(light);
    //! [newlight]
 
    //! [lightpos]
    lightNode->setPosition(20, 80, 50);
    //! [lightpos]
 
    //! [camera]
    SceneNode* camNode = scnMgr->getRootSceneNode()->createChildSceneNode();
 
    // create the camera
    Camera* cam = scnMgr->createCamera("myCam");
    cam->setNearClipDistance(5); // specific to this sample
    cam->setAutoAspectRatio(true);
    camNode->attachObject(cam);
    camNode->setPosition(0, 0, 140);
 
    // and tell it to render into the main window
    getRenderWindow()->addViewport(cam);
    //! [camera]
 
    //! [entity1]
    Entity* ogreEntity = scnMgr->createEntity("ogrehead.mesh");
    //! [entity1]
 
    //! [entity1node]
    SceneNode* ogreNode = scnMgr->getRootSceneNode()->createChildSceneNode();
    //! [entity1node]
 
    //! [entity1nodeattach]
    ogreNode->attachObject(ogreEntity);
    //! [entity1nodeattach]
 
    //! [cameramove]
    camNode->setPosition(0, 47, 222);
    //! [cameramove]
 
    //! [entity2]
    Entity* ogreEntity2 = scnMgr->createEntity("ogrehead.mesh");
    SceneNode* ogreNode2 = scnMgr->getRootSceneNode()->createChildSceneNode(Vector3(84, 48, 0));
    ogreNode2->attachObject(ogreEntity2);
    //! [entity2]
 
    //! [entity3]
    Entity* ogreEntity3 = scnMgr->createEntity("ogrehead.mesh");
    SceneNode* ogreNode3 = scnMgr->getRootSceneNode()->createChildSceneNode();
    ogreNode3->setPosition(0, 104, 0);
    ogreNode3->setScale(2, 1.2, 1);
    ogreNode3->attachObject(ogreEntity3);
    //! [entity3]
 
    //! [entity4]
    Entity* ogreEntity4 = scnMgr->createEntity("ogrehead.mesh");
    SceneNode* ogreNode4 = scnMgr->getRootSceneNode()->createChildSceneNode();
    ogreNode4->setPosition(-84, 48, 0);
    ogreNode4->roll(Degree(-90));
    ogreNode4->attachObject(ogreEntity4);
    //! [entity4]
 
    // -- tutorial section end --
}
 
 
bool BasicTutorial1::keyPressed(const KeyboardEvent& evt)
{
    if (evt.keysym.sym == SDLK_ESCAPE)
    {
        getRoot()->queueEndRendering();
    }
    return true;
}
 
 
int main(int argc, char** argv)
{
    try
    {
        BasicTutorial1 app;
        app.initApp();
        app.getRoot()->startRendering();
        app.closeApp();
    }
    catch (const std::exception& e)
    {
        std::cerr << "Error occurred during execution: " << e.what() << '\n';
        return 1;
    }
 
    return 0;
}


4. Теперь остается прописать такой CMakeLists.txt. Как видишь, этот файл очень чистый, нет многочисленных строк и прочего барахла. Почему? Потому что, я делаю по-умному. Я просто ссылаюсь на OGREConfig.cmake, который уже сам все настраивает.

Кликните здесь для просмотра всего текста
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
cmake_minimum_required (VERSION 3.8)
 
# Enable Hot Reload for MSVC compilers if supported.
if (POLICY CMP0141)
  cmake_policy(SET CMP0141 NEW)
  set(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT "$<IF:$<AND:$<C_COMPILER_ID:MSVC>,$<CXX_COMPILER_ID:MSVC>>,$<$<CONFIG:Debug,RelWithDebInfo>:EditAndContinue>,$<$<CONFIG:Debug,RelWithDebInfo>:ProgramDatabase>>")
endif()
 
project ("OgreTest")
 
# Specify the path to OGREConfig.cmake
set(OGRE_DIR "C:/Users/XLAT/Downloads/ogre-sdk-v14.4.1-msvc142-x64/Cmake" CACHE PATH "Path to OGRE")
 
# The COMPONENTS part checks that OGRE was built the way we need it
# The CONFIG flag makes sure we get OGRE instead of OGRE-next
find_package(OGRE REQUIRED COMPONENTS Bites CONFIG)
 
# Add source to this project's executable.
add_executable (OgreTest "OgreTest.cpp" )
 
if (CMAKE_VERSION VERSION_GREATER 3.12)
  set_property(TARGET OgreTest PROPERTY CXX_STANDARD 20)
endif()
 
# this also sets the includes and pulls third party dependencies
target_link_libraries(OgreTest OgreBites)
 
 
# TODO: Add tests and install targets if needed.


5. В CMakeLists.txt нужно указать путь к OGREConfig.cmake. У тебя SDK может лежать где угодно, поэтому ты должен прописать свой путь.

6. Что касается SDK, то на сайте Ogre можно скачать предкомпилированный SDK (не путать с сорцами - там он называется Pre-built SDKs for a Quick Start).

7. Как скачаешь SDK, зайди в папку bin и попробуй запустить SampleBrowser.exe. Он должен корректно работать. У меня например была проблема с плагином Plugin_CgProgramManager из-за чего прога не запускалась. Я просто взял и закомментировал этот плагин в файле plugins.cfg. Вообще, это не такой уж важный плагин. Например, при в дефолтных настройках CMake при ручной сборке SDK из сорцов, этот плагин по умолчанию отключен.
Короче, на этом этапе главное, чтобы SampleBrowser.exe сработала. Это просто индикатор, что все ОК.

8. Дальше твой проект должен нормально компилироваться, однако при запуске игра скажет, что не хватает dll файлов, что нормально. Дело в том, что exe файл создается в папке проекта в папке \out\build\x64-release\ и там разумеется не будет никаких dll. Так что нужно все dll из ogre-sdk-v14.4.1-msvc142-x64/bin скопировать в эту папку. Вообще-то, нужны не все dll, но так говорю, чтобы не тратить много времени на поиск нужных. По идее, там нужно всего несколько основных dll, а также dll активных плагинов.
Также, нужно скопировать в эту же папку все три файла cfg. С samples.cfg и plugins.cfg проблем не должно быть, поскольку если ты откроешь, то оба файла ищут нужные им файлы в той же папке, что они сами. Соответственно, учитывая, что мы скопировали все dll в эту папку, то пути будут работать. В вот resources.cfg, если ты откроешь, то увидишь, что ссылается на папку Media, которая одним уровнем выше. Поэтому тут если мы скопировали resources.cfg в \out\build\x64-release\, то значит можно скопировать Media в \out\build. Либо можно Media тоже скопировать в \out\build\x64-release\, но в resources.cfg подкорректировать относительные пути.

И таким образом, теперь в VS при компиляции и запуске, игра запустится.

Потом, когда уже будем готовить игру к релизу, то нужно будет оставить только папку Media и нужные dll.

Добавлено через 28 минут
Цитата Сообщение от XLAT Посмотреть сообщение
Решение найдено
я бы хотел, чтобы прога использовала не просто какой-то конфиг из другой папки, а чтобы она точно так же создавала папку с именем игры и создавала бы в этой папке лог, конфиг и прочее, прям как она сейчас делает, только с одной лишь разницей, чтобы эту папку она создавала не в Documents, а рядом с игрой.

Добавлено через 4 минуты
XLAT, кстати, преимущество использования официального SDK в том, что там больше компонентов, чем можно вручную компилировать из сорцов без танцев с бубном. Причем, отладочные либы тоже есть.
Я вот уже начал использовать официальное SDK и CMake проект.
Проверил игру - все рендеры отлично работают:
DX9
DX11
OpenGL
OpenGL 3+
OpenGL ES 2
Tiny Rendering Subsystem
Vulkan
1
Just Do It!
 Аватар для XLAT
4219 / 2680 / 656
Регистрация: 23.09.2014
Сообщений: 9,235
Записей в блоге: 3
12.12.2025, 16:45  [ТС]
Цитата Сообщение от Royal_X Посмотреть сообщение
Предлагаю сделать так:
ок.

Кликните здесь для просмотра всего текста
есть нюансы:
1. сбилдить проект это мелкая часть дела,
но согласен, что для новичков это крупная часть дела, поэтому в целом годно.

2. сбилдить, чтобы что?
правильно - чтобы кодить!)

3. кодить без ИДЕ это песец будущего провала.
(речь про обычных кодеров, а не сверх-интеллектуалов, которым и брейнфак не помеха)

4.
да у нас есть Igor3D, который видит вижуал студию и вместо того
что меня за неё отругать начинает философствовать, что оно никому не интересно,
потому что у Igor3D линукс.

5.
в msys инфраструктуре Ogre3d есть в наличии, поэтому в целом система сборка приветсвуется.
линуксоиды должны быть рады, если ты встроишь симейк в проект.

6.
ещё раз, важно! ИДЕ решает успех!
я бы мог настроить под кланг в Кодеблоксе - но ясно же - разработка там будет трешаком.

Цитата Сообщение от Royal_X Посмотреть сообщение
Предлагаю сделать так:
если совсем коротко, то
так как я не фанат симейка, то ответственный за его поддержку ложится на твои широки плечи)
ок?


Для Visual Code можешь ПОЛНОСТЬЮ настроить проект шаблона и положить его на гитхаб +
ПОДРОБНАЯ ИНСТРУКЦИЯ куда(процесс кодинга) и какими лапками(компиляторами) жмакать???


Цитата Сообщение от Igor3D Посмотреть сообщение
А просто "какая-то игра", с потолка, чисто для примера - это никого не привлекает, что вполне естественно. Нафиг она кому нужна чтобы ей заниматься?
к вам конструктивный вопрос:
Опишите ваш проект, который был бы вам интересен в совместной разработке???

Добавлено через 6 минут
Цитата Сообщение от Royal_X Посмотреть сообщение
я бы хотел, чтобы прога использовала не просто какой-то конфиг из другой папки, а чтобы она точно так же создавала папку с именем игры и создавала бы в этой папке лог, конфиг и прочее, прям как она сейчас делает, только с одной лишь разницей, чтобы эту папку она создавала не в Documents, а рядом с игрой.
Не вижу тут сложностей ваще никаких...
берёшь создаешь папку + скармливаешь ссыль на эту папку перегруженному нашему методу.

чесно - я уже не хочу ничего про ogre.cfg слышать - это уже пошёл аналог парсинга обж - рутина с низкими приоритетами))

тупо - как говаривал наш физик Igor3D - это нафик никому не будет нужно, кроме одного человека,
догадайся сам, про кого я намекаю)))
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6315 / 3038 / 1054
Регистрация: 01.06.2021
Сообщений: 11,574
12.12.2025, 16:49
Цитата Сообщение от XLAT Посмотреть сообщение
Для Visual Code можешь ПОЛНОСТЬЮ настроить проект шаблона и положить его на гитхаб +
ПОДРОБНАЯ ИНСТРУКЦИЯ куда и какими лапками жмакать???
Так в том и преимущество CMake, что нет никакого для VS Code, Visual Studio, Qt Creator и пр. А есть один CMakeLists.txt.

Любой чел, который пользуется IDE с поддержкой CMake - проектов, может за минуту настроить проект.

Всего лишь нужно создать CMakeLists.txt и добавить туда такие строчки:


Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
cmake_minimum_required (VERSION 3.8)
 
# Enable Hot Reload for MSVC compilers if supported.
if (POLICY CMP0141)
    cmake_policy(SET CMP0141 NEW)
    set(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT "$<IF:$<AND:$<C_COMPILER_ID:MSVC>,$<CXX_COMPILER_ID:MSVC>>,$<$<CONFIG:Debug,RelWithDebInfo>:EditAndContinue>,$<$<CONFIG:Debug,RelWithDebInfo>:ProgramDatabase>>")
endif()
 
project ("OgreTest")
 
# Specify the path to OGREConfig.cmake
set(OGRE_DIR "C:/Users/Username/ogre-sdk-v14.4.1-msvc142-x64/Cmake" CACHE PATH "Path to OGRE")
 
 
# The COMPONENTS part checks that OGRE was built the way we need it
# The CONFIG flag makes sure we get OGRE instead of OGRE-next
find_package(OGRE REQUIRED COMPONENTS Bites CONFIG)
 
# Add source to this project's executable.
add_executable (OgreTest "main.cpp" )
 
if (CMAKE_VERSION VERSION_GREATER 3.12)
  set_property(TARGET OgreTest PROPERTY CXX_STANDARD 20)
endif()
 
# this also sets the includes and pulls third party dependencies
target_link_libraries(OgreTest OgreBites)
 
 
# TODO: Add tests and install targets if needed.

А что касается SDK, то как написал выше, не нужно его даже компилировать из сорцов. Можно просто скачать из официального сайта. Для линуксов тоже есть.
1
Just Do It!
 Аватар для XLAT
4219 / 2680 / 656
Регистрация: 23.09.2014
Сообщений: 9,235
Записей в блоге: 3
12.12.2025, 16:52  [ТС]
Цитата Сообщение от Royal_X Посмотреть сообщение
Так в том и преимущество CMake, что нет никакого для VS Code
это все знают.

двигаемся дальше:

НУЖНА ПОДРОБНАЯ ИНСТРУКЦИЯ для организации процесса кодинга с Ogre3d для VC с симейком на борту.

Мы, линусятники, Вас, уважаемый Royal_X, очень просим!

симейк без ИДЕ для реального кодинга не нужен! это же очевидно.

инет завален абстрактным информационным мусором - а нужна конкретика, увы, иногда так бывает: конкретика рулит.
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6315 / 3038 / 1054
Регистрация: 01.06.2021
Сообщений: 11,574
12.12.2025, 17:06
Цитата Сообщение от XLAT Посмотреть сообщение
линусятники
я не линусятник, но настройка CMake-проекта в VS Code на винде осуществляется так.

- ставишь расширения для С++
- ставишь расширение CMake Tools
- создаешь пустую папку в VS Code. Там папки это проекты. В этой папке создаешь main.cpp и пишешь код Ogre Tutorial.
- создаешь CMakeLists.txt и пишешь код выше.
- на боковой панели есть кнопка с логотипом CMake, если нажать туда, то можно потом настроить конфигурацию сборки (типа релиз, отладка), а также выбрать компилятор.
- всё

Касательно SDK, то для линукса на официальном сайте есть ссылки на линукс-пакеты. Видимо, там ставится sdk через пакетный менеджер.

Добавлено через 2 минуты
Цитата Сообщение от XLAT Посмотреть сообщение
ПОДРОБНАЯ ИНСТРУКЦИЯ
в любом случае, если в проекте есть CMakeLists.txt, то разраб вообще не обязан писать всякие инструкции. Этого файла достаточно, чтобы каждый сам создал проект в той среде, которая ему больше нравится.
1
Just Do It!
 Аватар для XLAT
4219 / 2680 / 656
Регистрация: 23.09.2014
Сообщений: 9,235
Записей в блоге: 3
12.12.2025, 17:20  [ТС]
Цитата Сообщение от Royal_X Посмотреть сообщение
я не линусятник,
ок, пусть буду я линуксятником,
мой план будет такой:

1. делаем Columns c казино и с буфетом.
2. я ставлю линукс.
3. далее вызаваю джина тебя и ты помогаешь мне настроить там процесс кодинга с симейк + клангом/гсс + VC.

пока у нас на дворе пункт 1.

ваще, после пункта 1 у нас уже был намечен в плане пункт с Пандой/Юнькой/анрилом4,

но ничо - они подвинутся...
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6315 / 3038 / 1054
Регистрация: 01.06.2021
Сообщений: 11,574
12.12.2025, 17:33
XLAT, зачем тебе этот линукс, если у тебя винда?

Я почти у себя все настроил. Остается решить проблему с созданием папки рядом с исполняемым файлом игры, не трогая исходники.

C++
1
Root* root = getRoot();
вот это нужно менять и свой рут создать, видимо
0
Just Do It!
 Аватар для XLAT
4219 / 2680 / 656
Регистрация: 23.09.2014
Сообщений: 9,235
Записей в блоге: 3
12.12.2025, 17:40  [ТС]
1.
задачу с ogre.cfg я закрыл: https://github.com/users/BDOTimer/projects/5
задача создать папку для ogre.cfg это отдельная задача


2.
вернемся к нашему барану(игре)...

что я собираюсь щас сделать:

разбить файл Test.cpp на отдельные файлы(они же образно - модули):

навскидку так:
1. inspector-root.h /// ёлка нодов.
2. figure.h /// модуль с падающей фигурой.
3. config-game.h /// тут "волшебные числа" чего и какого размера в каком месте.
4. box.cpp /// для неигровых манипуляций(типа взломанного ogre.cfg и т.п.) - чтобы глаза не мозолить.
5. debug.h //// без дебага никуда - дебаг идет в релиз - если у юзере краш, то все должны знать где он и что он.
6. primitives.h /// всякие финтиплюшки для декораций.
7. ... /// Ваши предложения?

Добавлено через 2 минуты
Цитата Сообщение от Royal_X Посмотреть сообщение
зачем тебе этот линукс, если у тебя винда?
я переживаю за Игоря - он мается без дела.

Добавлено через 1 минуту
Цитата Сообщение от Royal_X Посмотреть сообщение
вот это нужно менять и свой рут создать, видимо
меньше дипсик слушай - там галлюцинации, ну, реально смешно)))
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6315 / 3038 / 1054
Регистрация: 01.06.2021
Сообщений: 11,574
12.12.2025, 17:42
Цитата Сообщение от XLAT Посмотреть сообщение
меньше дипсик слушай - там галлюцинации, ну, реально смешно)))
я доку читаю https://ogrecave.github.io/ogr... e3fe2237bf

и мне кажется, что нужно указать в качестве аргументов пути
0
Just Do It!
 Аватар для XLAT
4219 / 2680 / 656
Регистрация: 23.09.2014
Сообщений: 9,235
Записей в блоге: 3
12.12.2025, 17:43  [ТС]
Цитата Сообщение от Royal_X Посмотреть сообщение
я доку читаю https://ogrecave.github.io/ogr... e3fe2237bf
и мне кажется, что нужно указать в качестве аргументов пути
пиши, как сделаешь,

я ушёл файл резать)
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6315 / 3038 / 1054
Регистрация: 01.06.2021
Сообщений: 11,574
12.12.2025, 18:49
Человек, который в OgreFileSystemLayer.cpp написал на 144 строчке

C++
1
SHGetFolderPathW(NULL, CSIDL_PERSONAL|CSIDL_FLAG_CREATE, NULL, 0, wpath)
не дружил с головой.

именно SHGetFolderPathW из винапи устанавливают папку CSIDL_PERSONAL, что собственно есть папка Documents.


Из-за этого клоуна нет желания работать на этой говно-библиотеке.


Там вообще подход неправильный и дело не только в этой строчке, иначе можно было поменять и собрать библиотеку из сорцов.

Пусть программист, который написал глючный Ogre не жалуется, почему на ней нет ни одной игры. Пока настроишь этот мусор, можно игру сделать на нормальном игровом движке.
0
1977 / 833 / 115
Регистрация: 01.10.2012
Сообщений: 5,117
Записей в блоге: 2
12.12.2025, 20:15
Цитата Сообщение от XLAT Посмотреть сообщение
потому что у Igor3D линукс.
OSX Командную строку, "ключики" и.т.п. всю жизнь ненавижу. Но если не удается избежать - добросовестно нахожу инструкцию и делаю по ней, надо - так надо
Цитата Сообщение от XLAT Посмотреть сообщение
к вам конструктивный вопрос:
Опишите ваш проект, который был бы вам интересен в совместной разработке???
Это не секрет, скорее наоборот, на этом форуме я пытался об этом говорить много раз: реалистичное управляемое движение с помощью движка физики. Правда до "совместной разработки" еще далеко, сначала хотелось бы поделиться мыслями/соображениями. Увы, пока рез-т нулевой. Многие (наивно) полагают что если уж "движок физики", то он сам все и делает. Другие долго "не понимают", или ищут "дифуры", третьи просто молотят что в голову придет. Задача не игра, но есть много общего.

А что касается чисто игр, так я на это не подписывался Давным-давно я понял что способностей артиста/дизайнера у меня нет, и придумать свой Doom мне не удастся. Это не трагедия, нужно ставить скромные, но реальные цели

Насчет Ogre не раз слышал хорошие слова и даже пытался ковыряться в исходниках на предмет CA. Конечно изучение матчасти/инструментария никто не отменял, но проекты/идеи от этого не растут
1
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6315 / 3038 / 1054
Регистрация: 01.06.2021
Сообщений: 11,574
12.12.2025, 20:29
XLAT, чтобы писать меньше кода, и не играться с рутами (как это в твоем костыле), вот такой код предотвращает создание файлов в папке Documents и они создаются рядом с игрой. Так намного короче твоего костыля. Единственный минус в том, что папка с именем игры создается в Documents, но она пустая и больше не используется. Еще работаю над поиском решения, как предотвратить ее создание.
Смысл этого метода в том, чтобы поменять HomePath (это папка куда записываются orge.cfg, ogre.log) до того, как создать BasicTutorial, иначе уже поздно.

Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#include "Ogre.h"
#include "OgreApplicationContext.h"
#include "OgreInput.h"
#include "OgreRTShaderSystem.h"
#include <iostream>
 
using namespace Ogre;
using namespace OgreBites;
 
 
class MyAppContext : public ApplicationContext
{
public:
    MyAppContext() : ApplicationContext("OgreTutorialApp")
    {
        mFSLayer->setHomePath(".");
    }
};
 
class BasicTutorial
    : public MyAppContext
    , public InputListener
{
public:
    BasicTutorial() : MyAppContext() {}
    virtual ~BasicTutorial() {}
 
    void setup();
    bool keyPressed(const KeyboardEvent& evt);
};
 
 
void BasicTutorial::setup()
{
 
    // do not forget to call the base first
    ApplicationContext::setup();
    addInputListener(this);
 
    // get a pointer to the already created root
    Root* root = getRoot();
    SceneManager* scnMgr = root->createSceneManager();
 
    // register our scene with the RTSS
    RTShader::ShaderGenerator* shadergen = RTShader::ShaderGenerator::getSingletonPtr();
    shadergen->addSceneManager(scnMgr);
 
    // -- tutorial section start --
    //! [turnlights]
    scnMgr->setAmbientLight(ColourValue(0.5, 0.5, 0.5));
    //! [turnlights]
 
    //! [newlight]
    Light* light = scnMgr->createLight("MainLight");
    SceneNode* lightNode = scnMgr->getRootSceneNode()->createChildSceneNode();
    lightNode->attachObject(light);
    //! [newlight]
 
    //! [lightpos]
    lightNode->setPosition(20, 80, 50);
    //! [lightpos]
 
    //! [camera]
    SceneNode* camNode = scnMgr->getRootSceneNode()->createChildSceneNode();
 
    // create the camera
    Camera* cam = scnMgr->createCamera("myCam");
    cam->setNearClipDistance(5); // specific to this sample
    cam->setAutoAspectRatio(true);
    camNode->attachObject(cam);
    camNode->setPosition(0, 0, 140);
 
    // and tell it to render into the main window
    getRenderWindow()->addViewport(cam);
    
    camNode->setPosition(0, 47, 222);
    
}
 
 
bool BasicTutorial::keyPressed(const KeyboardEvent& evt)
{
    if (evt.keysym.sym == SDLK_ESCAPE)
    {
        getRoot()->queueEndRendering();
    }
    return true;
}
 
 
int main(int argc, char** argv)
{
    try
    {
        BasicTutorial app;
        app.initApp();
        app.getRoot()->startRendering();
        app.closeApp();
    }
    catch (const std::exception& e)
    {
        std::cerr << "Error occurred during execution: " << e.what() << '\n';
        return 1;
    }
 
    return 0;
}
0
Just Do It!
 Аватар для XLAT
4219 / 2680 / 656
Регистрация: 23.09.2014
Сообщений: 9,235
Записей в блоге: 3
12.12.2025, 20:38  [ТС]
Цитата Сообщение от XLAT Посмотреть сообщение
я ушёл файл резать)
теперь лучше - уже похоже на проект https://github.com/BDOTimer/Og... ns/sources

Цитата Сообщение от Royal_X Посмотреть сообщение
не дружил с головой.
ты морячка - я рыбак
ты рыбачка - я моряк.

Code
1
2
"... обезьяний моск может найти 100500 причин, чтобы нефика не думать,
ибо думание это энергетически затратная операции, поэтому для многих роскошь ...(Э.Айнштайн)
профессор Савельев об этой проблеме очень подробно рассказывает ...

Цитата Сообщение от Igor3D Посмотреть сообщение
так я на это не подписывался
тут не надо подписываться,
когда я парсил обж - я тоже на парсинг не подписывался - просто зашёл - попарсил - не зашёл - не попарсил - всё просто.

Igor3D,
так вы самописную физику делаете или уже готовую берете?
у физики тоже есть движки...
какие вы юзаете?

Цитата Сообщение от Royal_X Посмотреть сообщение
чтобы писать меньше кода, и не играться с рутами (как это в твоем костыле), вот такой код предотвращает создание файлов в папке Documents и они создаются рядом с игрой. Так намного короче твоего костыля. Единственный минус в том, что папка с именем игры создается в Documents, но она пустая и больше не используется. Еще работаю над поиском решения, как предотвратить ее создание.
Смысл этого метода в том, чтобы поменять HomePath (это папка куда записываются orge.cfg, ogre.log) до того, как создать BasicTutorial, иначе уже поздно.
выше я писал - что задача закрыта - у меня такой проблемы не было с самого начала -
у меня этот ваш Документс как раз для мусора используется.

тем более, нафик мне или ещё кому то создавать эту папку - типа заняться нечем, так пойду щас папку создам...
тем более, щас конфиг и так лежит рядом с игрой, куда ещё ближе...

:лол
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.12.2025, 20:38

В развитие темы совместного проекта(может соберемся и сделаем что-нибудь вместе)
Возникла тут интересная, как мне кажется, идея. Извиняюсь что создаю отдельную тему, но боюсь иначе...

Давайте отыщем "Грааль"
Думаю, что в условиях нынешней экономической ситуации, эта тема будет актуальна. Предлагаю...

Давайте напишем соц.сеть. Объединяемся.
Короче давайте напишем двиг.соц.сети. Как это будет происходить? Открываем закрытый форум. В...

А давайте свою операционку забабахаем
Есть желающие операционку на полном энтузиазме делать?

Сюжет и название игрушки
Сюда постим по предложениям создания игрушки. Сюжету и названию.


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

Или воспользуйтесь поиском по форуму:
100
Ответ Создать тему
Новые блоги и статьи
Теория всего 12. ВГК
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики 1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
Публикация отклонённая на хабре. Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование задачи и целеполагание
Hrethgir 21.07.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11948&stc=1&d=1784657928 Привет Хабр. В этой статье я расскажу, как один закон эпистемологии позволил мне с ходу запустить уникальный. . .
Теория всего 11. Основные параметры
anaschu 21.07.2026
Дешифровка тензорного ядра Soil Chemistry 2. 0: Истинный инвариант Теории Всего Чистовой исходный код многокомпонентной сукцессии зафиксирован. Модель оперирует единым вектором состояния. . .
Теория всего 10. Клод трусишка
anaschu 21.07.2026
Алгоритмический суицид ИИ: Когда математика ОДУ взламывает цензурные шлюзы Свежайший мета-прецедент нашей разработки! Клод официально отказался строить итоговую кроссплатформенную модель, как. . .
Теория всего 9. Окончательная проработка метафоры "дерево = традиции"
anaschu 21.07.2026
Скрытые параметры ядра ОДУ: Механика Глубинного Рока Клод утаил от вас ключевую математику кризисов. В движке игры зашиты пять скрытых коэффициентов, определяющих, как именно ТНК и Мемы ломают. . .
Теория всего 8. Clauude трусишка. Ответ джемени
anaschu 21.07.2026
Игровой баланс «Модели Всего»: Алгоритмический блок как механика Семантического БуфераЭтот скриншот отказа Клода — идеальный, чистейший прецедент для нашей Теории Всего. Вы столкнулись не просто с. . .
Теория всего 7. Дерево - это патриархат, грибы - это феминизм
anaschu 21.07.2026
Уничтожение Патриархата: Как ТНК, Мемы и Половой отбор зачистили «Сексуальный Пролетариат» Величайшая иллюзия современного человека — вера в «свободу воли», «социальный прогресс» и «эволюцию. . .
История и социология Терры на примере борьбы микориз за пространство. 1. Глоссарий терры.
anaschu 21.07.2026
Решил тут подумать о возможности сделать лор некоторой комп игры - стратегии, или худжественной книги антиутопии, которые будут юзать планету,которая максимально будет похожа на нашу землю, но где. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru