Форум программистов, компьютерный форум, киберфорум
C++: Сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.97/88: Рейтинг темы: голосов - 88, средняя оценка - 4.97
0 / 0 / 0
Регистрация: 08.02.2024
Сообщений: 9

Сетевое программирование

14.03.2024, 22:06. Показов 32341. Ответов 30
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет.
Подскажите, что изучать лучше будет дальше
Изучаю c++ яп, хочу сейчас влиться в сетевое программирование.
Подскажите, пожалуйста, с чего начать изучение(вообще полный ноль в нем)
И если есть какие-нибудь материалы на эту тему, посоветуйте
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.03.2024, 22:06
Ответы с готовыми решениями:

Сетевое программирование на С++
Всем привет! есть приложение с++ на linux-сервере, которое обрабатывает массив данных и выдаёт какой-то результат. Сейчас массив...

Сетевое программирование.
Всем привет.Интересует следующий вопрос : подскажите какие - нибудь толковые книги по сетевому программированию (с хорошим изложением...

Сетевое программирование. Ваше советы
Сетевое программирование с чего начать ? Моя цель такая "головой зайти" в сетевое программирование и зарабатывание на нем деньги)). ...

30
9953 / 2954 / 497
Регистрация: 05.10.2013
Сообщений: 8,075
Записей в блоге: 242
13.05.2024, 11:52
Студворк — интернет-сервис помощи студентам
В Qt Creator 13 не был исправлен баг при котором пропадает виртуальное устройство Android'а. Хотя зимой я спрашивал об этом на их официальном форуме. Мне дали ссылку на Qt Creator с заплаткой. Я его протестил, вроде работало. Баг не всегда себя проявляет, но очень часто. Я использую новый Qt Creator 13. Приходится после каждого запуска Qt Creator создавать его заново с тем же именем. Просто Qt Creator его не видит после перезапуска. После добавления устройства с тем же именем, что и в прошлый раз нескольких копий устройств не создаётся. Может автору темы или кому-то ещё пригодится эта информация.

Так добавляется устнойство. Сначала в Qt Creator в меня слева вверху нужно выбрать: "Edit" -> "References...". Появится окно где нужно нажать две вкладки ("Devices" и "Devices") и кнопку "Add":



В открывшемся окне нажать "Android Device" > "Start Wizard":



Откроется следующее окно, в котором нужно написать имя устройства, выбрать какое устройство создавать, его архитектуру - зависит от того, какой Image вы поставили в "SDK Manager", но всегда выбираю x86 для эмулятора. Надо выбрать API - ставится в "SDK Manager". Версия SDK 25 соответстует Android 7.1.1, но надо учитывать, что Qt5 поддерживал Android 5 (API 21), а Qt6 официально поддерживает Android 8 (API 26). Хотя я тестирую приложения из Qt6 на Redmi 4X, где Android 7.1.1 и оно работает. Я читал в этой теме: Qt6 min android sdk version is API Level 26, что на Qt 6.6 работает Android 6 (API 23). Разработчики Qt гарантируют, что Qt 6.6 будет работать на Android 8. На bug report нужно будет указать какую версию Android вы используете и если эта версия попадает под поддержку, то bug report будет рассматриваться, в противном случае его почти сразу закроют.



Будет добавлено виртуальное устройство:



Нужно перейти на вкладку "Kits" и выбрать это устройство для "Android Qt 6.6.3 Clang x86":



Теперь нужно выбрать сборку под эмулятор:



И запустить приложение, нажав зелёный треугольник:



Миниатюры
1
9953 / 2954 / 497
Регистрация: 05.10.2013
Сообщений: 8,075
Записей в блоге: 242
13.05.2024, 12:44
У меня есть пример рисования нескольких прямугольников разных: цветов, размеров, позиций и углов. Его можно использовать для тренировки на нескольких играх: змейка, тетрис и т.д. Можно использовать написание простых игр для тренировки навыков в программировании и изучении Qt. Пример собирается для Windows 10, Android Emulator и WebAssebmly. Можете результат сборки под Web закинуть мышкой на бесплатный хостинг https://www.netlify.com/ и у вас будет ссылка на ваше приложение, которую вы можете отправить друзьям в соц. сетях или опубликовать где-то, например, на форуме. Ссылка получается длинная, но её можно укоротить, погуглив "short url". Не знаю, правда, сколько живут такие короткие ссылки, поэтому их не использую. Только если для тестирования на телефоне. Например, такая демка с прямоугольниками для браузера.

Qt OpenGL ES 2.0 на веб работает, на эмуляторе работает:



На реальном устройстве работает:



На Windows 10 из EXE работает (кстати, этот же пример должен работать и на Linux, и на macOS, и на iOS):



pro-файл

Code
1
2
3
4
5
6
QT += core gui openglwidgets
 
CONFIG += c++17
 
SOURCES += \
    main.cpp
main.cpp

C++ (Qt)
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
#include <QtGui/QMatrix4x4>
#include <QtGui/QOpenGLFunctions>
#include <QtGui/QSurfaceFormat>
#include <QtGui/QVector3D>
#include <QtOpenGL/QOpenGLBuffer>
#include <QtOpenGL/QOpenGLShader>
#include <QtOpenGL/QOpenGLShaderProgram>
#include <QtOpenGL/QOpenGLWindow>
#include <QtWidgets/QApplication>
 
class OpenGLWindow : public QOpenGLWindow, private QOpenGLFunctions
{
public:
    OpenGLWindow()
    {
        setTitle("OpenGL ES 2.0, Qt6, C++");
        resize(380, 380);
 
        QSurfaceFormat surfaceFormat;
        surfaceFormat.setDepthBufferSize(24);
        surfaceFormat.setSamples(4);
        setFormat(surfaceFormat);
    }
 
    void initializeGL() override
    {
        initializeOpenGLFunctions();
        glClearColor(0.04f, 0.62f, 0.48f, 1.f);
 
        QString vertShaderSrc =
            "attribute vec2 aPosition;\n"
            "uniform mat4 uMvpMatrix;"
            "void main()\n"
            "{\n"
            "    gl_Position = uMvpMatrix * vec4(aPosition, 0.0, 1.0);\n"
            "}\n";
 
        QString fragShaderSrc =
            "#ifdef GL_ES\n"
            "precision mediump float;\n"
            "#endif\n"
            "uniform vec3 uColor;\n"
            "void main()\n"
            "{\n"
            "    gl_FragColor = vec4(uColor, 1.0);\n"
            "}\n";
 
        m_program.create();
        m_program.addShaderFromSourceCode(QOpenGLShader::ShaderTypeBit::Vertex, vertShaderSrc);
        m_program.addShaderFromSourceCode(QOpenGLShader::ShaderTypeBit::Fragment, fragShaderSrc);
        m_program.link();
        m_program.bind();
 
        float vertPositions[] = {
            -0.5f, -0.5f,
            0.5f, -0.5f,
            -0.5f, 0.5f,
            0.5f, 0.5f
        };
        m_vertPosBuffer.create();
        m_vertPosBuffer.bind();
        m_vertPosBuffer.allocate(vertPositions, sizeof(vertPositions));
        m_program.setAttributeBuffer("aPosition", GL_FLOAT, 0, 2);
        m_program.enableAttributeArray("aPosition");
 
        m_uColorLocation = m_program.uniformLocation("uColor");
        m_uMvpMatrixLocation = m_program.uniformLocation("uMvpMatrix");
        m_viewMatrix.lookAt(QVector3D(0, 0, 1), QVector3D(0, 0, 0), QVector3D(0, 1, 0));
    }
 
    void resizeGL(int w, int h) override
    {
        const float coofWidth = w / (float)m_initialWindowWidth;
        const float coofHeight = h / (float)m_initialWindowHeight;
 
        m_projMatrix.setToIdentity();
        m_projMatrix.ortho(0.f, m_worldWidth * coofWidth,
            0.f, m_worldHeight * coofHeight, 1.f, -1.f);
        m_projViewMatrix = m_projMatrix * m_viewMatrix;
    }
 
    void paintGL() override
    {
        glClear(GL_COLOR_BUFFER_BIT);
        drawRectangle(50, 50, 80, 10, 10, QVector3D(0.62, 0.04, 0.18));
        drawRectangle(30, 20, 50, 20, 0, QVector3D(0.3, 0.07, 0.5));
        drawRectangle(50, 80, 40, 15, -20, QVector3D(0.2, 0.3, 0.1));
    }
 
    void drawRectangle(float x, float y, float w, float h,
        float angle, const QVector3D& color)
    {
        m_modelMatrix.setToIdentity();
        m_modelMatrix.translate(QVector3D(x, y, 0));
        m_modelMatrix.rotate(angle, QVector3D(0, 0, 1));
        m_modelMatrix.scale(QVector3D(w, h, 1));
        m_mvpMatrix = m_projViewMatrix * m_modelMatrix;
        m_program.setUniformValue(m_uMvpMatrixLocation, m_mvpMatrix);
        m_program.setUniformValue(m_uColorLocation, color);
        glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
    }
 
private:
    QOpenGLBuffer m_vertPosBuffer;
    QOpenGLShaderProgram m_program;
    int m_uColorLocation;
    int m_uMvpMatrixLocation;
    QMatrix4x4 m_mvpMatrix;
    QMatrix4x4 m_projMatrix;
    QMatrix4x4 m_viewMatrix;
    QMatrix4x4 m_projViewMatrix;
    QMatrix4x4 m_modelMatrix;
    const int m_initialWindowWidth = 380;
    const int m_initialWindowHeight = 380;
    const float m_worldWidth = 100.f;
    const float m_worldHeight = 100.f;
};
 
int main(int argc, char *argv[])
{
    QApplication::setAttribute(Qt::ApplicationAttribute::AA_UseDesktopOpenGL);
    QApplication app(argc, argv);
    OpenGLWindow w;
    w.show();
    return app.exec();
}
Миниатюры
1
9953 / 2954 / 497
Регистрация: 05.10.2013
Сообщений: 8,075
Записей в блоге: 242
13.05.2024, 13:20
Пробую в примере выше исправить OpenGL ES 2.0 на ES 3.0. Для Desktop надо написать "#version 130" в начале вершинного и фрагментного шейдеров, заменить "attribute" на "in" в вершинном шейдере и добавить "out vec4 fragColor;" в фрагментном:

C++ (Qt)
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
        // QString vertShaderSrc =
        //     "attribute vec2 aPosition;\n"
        //     "uniform mat4 uMvpMatrix;"
        //     "void main()\n"
        //     "{\n"
        //     "    gl_Position = uMvpMatrix * vec4(aPosition, 0.0, 1.0);\n"
        //     "}\n";
 
        // QString fragShaderSrc =
        //     "#ifdef GL_ES\n"
        //     "precision mediump float;\n"
        //     "#endif\n"
        //     "uniform vec3 uColor;\n"
        //     "void main()\n"
        //     "{\n"
        //     "    gl_FragColor = vec4(uColor, 1.0);\n"
        //     "}\n";
 
        QString vertShaderSrc =
            "#version 130\n"
            "in vec2 aPosition;\n"
            "uniform mat4 uMvpMatrix;"
            "void main()\n"
            "{\n"
            "    gl_Position = uMvpMatrix * vec4(aPosition, 0.0, 1.0);\n"
            "}\n";
 
        QString fragShaderSrc =
            "#version 130\n"
            "#ifdef GL_ES\n"
            "precision mediump float;\n"
            "#endif\n"
            "uniform vec3 uColor;\n"
            "out vec4 fragColor;\n"
            "void main()\n"
            "{\n"
            "    fragColor = vec4(uColor, 1.0);\n"
            "}\n";
На Desktop работает. Пробую запустить на WebAssembly, исправив "#version 130" на "#version 300 es" - не работает. Выдаёт ошибку в консоль браузера "QOpenGLShader::compile(Vertex): ERROR: unsupported shader version". Это потому что я не нашёл способа переключить WebGL 1.0 на WebGL 2.0 в WebAssembly, о чём я писал в сообщении #20. WebGL 1.0 вполне неплох для меня, а тем более для начинающих. Если остро нужно будет потом использовать какую-то фичу из ES 3.0, то возможно явно где-то напишут, как переключить Qt WebAssembly на OpenGL ES 3.0, что это будет в топе интернет поисковиков. ES 2.0 меньше, его проще учить, а для игр для тренировки программирования на C++ под Android и WebAssembly вполне пойдёт.

А вот на эмуляторе оказывается "#version 300 es" работает. Значит, я, возможно, неправильную версию шейдеров указывал или ещё по какой-то причине. Но я всё равно буду использовать OpenGL ES 2.0, даже если найду способ как запустить ES 3.0 на Qt WebAssembly и способ, как не менять вручную "#version 130" на "#version 300 es" при сборке для Android, Desktop и WebAssembly, потому что Android и WebAssembly (WebGL 2.0) требуют "#version 300 es", а Desktop требует "#version 130". На OpenGL ES 2.0 мне ничего не требуется менять, а WebGL 1.0 поддерживается на большем количестве браузеров, в том числе более старых версий. WebGPU я даже не рассматриваю. У меня 1-3 FPS выдаёт. То есть для бюджетных ноутбуков WebGPU не вариант, а тем более он скорее всего не работает или плохо работает на бюджетных сматрфонах.



Миниатюры
1
Модератор
Эксперт Java
 Аватар для alecss131
2894 / 1400 / 412
Регистрация: 11.08.2017
Сообщений: 4,482
Записей в блоге: 2
13.05.2024, 23:53
Цитата Сообщение от 8Observer8 Посмотреть сообщение
В Qt Creator 13 не был исправлен баг при котором пропадает виртуальное устройство Android'а.
Когда игралсяс последней версией креатора, ничего не пропадало, зато созданный отображался только порой после перезапуска. И вообще куча настроек корректно отображались после перезапуска.
Цитата Сообщение от 8Observer8 Посмотреть сообщение
через QSurfaceFormat
у меня в 3 версии на эмуляторе нету ни одной версии поддерживающей мультисэмплинг, хотя доступно только 3 конфига.
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Поставил 6.7 и почти сразу удалил из-за того, что эта версия Qt требует наличия сразу двух версий NDK: 25 и 26
при этом на сколько помню 25 вроде не используется для сборки, только 26. а то что он качает 31 и 34 апи не смущает? кстати в требованиях на сайте ни слова про апи31 и ндк25

Забил на separate shaders и перенес на телефон недописанную демку кубика рубика, пока выглядит как анимация. Что на компе что на телефоне осталось дописать управление (выбор через тест трафарета сделан). По сути OpenGL ES 3.0 (вроде ничего из 3.1 не использую, но указываю), но можно понизить и на 2, пишу на С++. Создаю контекст на egl частично вытащенный из шаблонного проекта. И смог запустить на телефоне, а не эмуляторе, крашила строчка с указанием core профиля.

У меня на компе (не для андроида, а для пк) шейдеры с #version 310 es и precision mediump float; собираются без проблем, надо будет попробовать их использовать в рисовании
1
9953 / 2954 / 497
Регистрация: 05.10.2013
Сообщений: 8,075
Записей в блоге: 242
14.05.2024, 01:55
Цитата Сообщение от alecss131 Посмотреть сообщение
зато созданный отображался только порой после перезапуска. И вообще куча настроек корректно отображались после перезапуска.
У меня во время работы виртуальное устройство не пропадает. Пропадает только после перезапуска Qt Creator'а. Значит, не у всех такое происходит. Ещё одна проблема есть Could not determine debugger type - зависит ошибка от наличия Python в Path. Если путь к Python удалить, то ошибка в Qt Creator после перезапуска пропадает и появляется, если путь к Python добавить в Path. У меня этот баг 100% срабатывает. Несколько раз проверял. Я его обошёл путём создания GDB вручную и копию Kit - тогда отладка по шагам начинает работать.

Цитата Сообщение от alecss131 Посмотреть сообщение
а то что он качает 31 и 34 апи не смущает?
Да, кстати, вспомнил.

Цитата Сообщение от alecss131 Посмотреть сообщение
перенес на телефон недописанную демку кубика рубика
Я на Unity делал демку: Кубик Рубика 6.5 лет прошло, как время летит. Кубик Рубика у меня записан в списке дел (но не на Unity теперь). Надо будет кубиком заняться для практики на Android. Управление надо удобное придумать или посмотреть, какое управление другие делали. Надо несколько вариантов управления попробовать сделать. Если подвязать сюда клиент-серверное программирование, то есть идея сделать других людей наблюдателями, пока кто-то собирает кубик в комнате. Можно выйти из комнаты и зайти в другую. В комнате собирает кубик только один человек. Он может передавать управление. Вариант, как упражнение.
1
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6312 / 3035 / 1053
Регистрация: 01.06.2021
Сообщений: 11,543
14.05.2024, 10:17
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Управление надо удобное придумать или посмотреть, какое управление другие делали.
можешь посмотреть у меня С какого проекта начать новичку, которой освоил базу C++
я реализовал несколько вариантов:
Code
1
2
3
4
5
6
7
8
9
Rotate by dragging - Mouse Left Button
Rotate Up - W / Up Arrow
Rotate Down - S / Down Arrow
Rotate Left - A / Left Arrow
Rotate Right - D / Right Arrow
Rotate Camera - Ctrl / Q / Mouse Right Button
Scramble - Space / Mouse Middle Button
Fullscreen - F
Quit - Esc
1
9953 / 2954 / 497
Регистрация: 05.10.2013
Сообщений: 8,075
Записей в блоге: 242
14.05.2024, 13:36
Royal_X, у меня в той демке в браузере на Unity управление мышкой - такое же как и в вашей: зажатой левой вращать и зажатой правой - крутить камеру. Вам нужно исправить, чтобы с верхней и нижней грани можно было вращать кубик. Правда, демка долго запукается у меня в браузере - секунд 30 где-то. Исходники демки прикрепил. Перепишу сначала на Three.js, чтобы в браузере быстрой запукалось и чтобы поупражняться с Three.js. Потом перепишу на чистый WebGL, а потом на Qt OpenGL ES 2.0, чтобы пальцем можно было крутить на Android - это же управление нужно добавить на Android для Qt WebAssembly, Three.js и чистого WebGL. Есть идея переписать на libGDX - можно тоже собирать под Android, Desktop и Web. Мне понравилась библиотека. Очень похожа на SFML, но намного более дружелюбна к Android, а ещё в ней есть API для 3D, а не только 2D, как в SFML. Причём, вроде бы, можно один раз собрать в jar и приложение будет запускаться на Windows, Linux и macOS. Мне нравилось, что из Unity, например, прямо на Windows можно было собрать не только EXE, но и исполняемый файл под Linux и maсOS. На Godot тоже так можно? Я немного пробовал Godot. Прошёл до конца их вводный туториал Your first 2D game. Отложил его, по крайней мере, пока они не выпустят версию 4.3 в июне числа 16-го, где они внесут исправления этого бага: The default Godot 4.2.1 application crashes in compatible mode on the Redmi 4X with OpenGL ES 3.2, из-за которого приложения не собираются на Redmi 4X (Android 7.1.1). Это исправление находится в Milestones на 4.3 (там как раз указано, что выполнено на 70%, а ожидаемая дата выпуска - 16 июня) Покупать новый телефон для меня не вариант. Хочу чтобы работало на бюджетных тоже.

Сфера сборку - это источник света, а то темновато там без него:



Миниатюра
Вложения
Тип файла: zip RubiksCube_Unity2017.zip (1.27 Мб, 3 просмотров)
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6312 / 3035 / 1053
Регистрация: 01.06.2021
Сообщений: 11,543
14.05.2024, 14:40
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Вам нужно исправить, чтобы с верхней и нижней грани можно было вращать кубик.
Это не ошибка, я специально сделал так (ограничил камеру), чтобы нельзя было вращать.
Дело в том, что если этого не сделать, то появляется ошибки инверсии осей, которые присутствуют и у вас.
Возьмем, например, нажатие и перетаскивание курсора справа-налево. В зависимости от грани, у вашей камеры неопределенные поведения:
- кубик не двигается, видимая грань вращается по часовой стрелке
- кубик не двигается, видимая грань вращается против часовой стрелки
- видимая грань не вращается, кубик вращается налево
- видимая грань не вращается, кубик вращается направо
Т.е. по сути я делаю абсолютно один и тот же драг правой кнопкой мыши справа-налево, но камера в зависимости от того, какая грань на экране, вращается 4-мя способами.
Как по мне, такое поведение неприемлемо.

У моего кубика хотя бы все это логично. При нажатии и перетаскивание курсора справа-налево:
- кубик ВСЕГДА вращается в левую сторону
- если видимая грань - верхняя, то идет вращение по часовой стрелке
- если видимая грань - нижняя, то идет вращение против часовой стрелки

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

Остается главный вопрос: а можно ли сделать так, чтобы без ограничений камеры всё работало как и полагается (без ошибок инверсий)? Да, можно. Но я прикинул, что игра не стоит свеч.

Добавлено через 10 минут
8Observer8, у вас еще источник света странный. На HDR солнце расположено в одном месте, а у вас искуственный источник вообще в другом. Да и зачем искусственный источник делать видимым (я про этот белый шар). Его можно и скрыть, оставив только его эффекты.
1
9953 / 2954 / 497
Регистрация: 05.10.2013
Сообщений: 8,075
Записей в блоге: 242
14.05.2024, 15:19
Цитата Сообщение от Royal_X Посмотреть сообщение
Возьмем, например, нажатие и перетаскивание курсора справа-налево.
Я потом поизучаю этот вопрос, когда на Three.js начну переписывать. Большое спасибо!

Цитата Сообщение от Royal_X Посмотреть сообщение
у вас еще источник света странный
Там два источника света. Направленное освещение (с параллельными лучами) - примерно оттуда же светил, где находится Солнце на skybox. Этот источник светит на угол кубика. А противоположенный угол был слишком тёмный, поэтому я добавил дополнительный источник света - точечный, как лампочка. Оставил его видимым, чтобы не было вопросов откуда свет и блики, но получается, что наоборот - стали спрашивать в теме, что это за шар? Надо было вместо шара добавить 3D-модель лампочки, например, которая держится на стойке на квадракоптире, а пропеллеры квадракоптера вращаются. Проще - 3D-модель лампочки добаить, без чего либо ещё. Либо модель прожектора. А самый простой вариант и, наверное, самый лучший - вообще убрать и сделать просто поярче ambient light.
1
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6312 / 3035 / 1053
Регистрация: 01.06.2021
Сообщений: 11,543
14.05.2024, 15:44
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Там два источника света.
вообще, если там уже HDRI карта, причем на которой видно солнце, то лучше либо усилить влияние карты на окружение (это сработает аналогично ambient light и даже лучше), либо добавить искусственный источник света (Directional Light), но правильно выбрав угол, чтобы он совпал с солнцем на HDRI - но тогда понизить эффект, чтобы тени не были темными.

либо можно вообще убрать реалистичное освещение (как вот у меня)

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

Добавлено через 2 минуты
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Надо было вместо шара добавить 3D-модель лампочки, например, которая держится на стойке на квадракоптире, а пропеллеры квадракоптера вращаются.
надеюсь вы пошутили. Иначе нужно еще придумать, какая сила держит кубик в воздухе...
1
9953 / 2954 / 497
Регистрация: 05.10.2013
Сообщений: 8,075
Записей в блоге: 242
14.05.2024, 17:37
Цитата Сообщение от Royal_X Посмотреть сообщение
надеюсь вы пошутили. Иначе нужно еще придумать, какая сила держит кубик в воздухе...
С добавлением Skybox уже нарушена реалистичная физика. Внизу горы, а кубик не падает. Убрать из-за этого skybox - мне не нравится эта идея. Мне лично интереснее с skybox'ом. Всё равное нужно пытаться фантазировать. Есть же магнитные площадки, над которыми парит другой магнит. Пусть кубик сделан из магнита с тем же полюсом, поэтому он ливитирует над нижним магнитом. Добавляем большой квадракоптер с большим магнитом на крыше. Я почему привязался к квадракоптирам, потому что хочу научиться их моделировать в Blender и управлять ими.

Доделал демку на Phaser 3 и JavaScript по глобальной сети с мультиплеером. Можно походить и попрыгать в браузере: https://walk-and-jump-with-mul... glitch.me/ Сервер авторитарный. На сервере физика на Box2D-WASM и вся игровая логика, а клиент просто отображает картинки и спрайтовую анимацию. На клиенте может быть что-угодно: Three.js, libGDX, SFML, Godot, Unity,, Unreal Engine и т.д.

Исходники сервера и клиента на бесплатном хостинге Glitch



Миниатюры
Вложения
Тип файла: zip walk-and-jump-with-multiplayer-box2dwasm-phaser3-js.zip (198.5 Кб, 2 просмотров)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.05.2024, 17:37

Выбор кафедры в дальнейшей жизни: прикладное программирование VS системное программирование
Сразу извиняюсь что очень не по теме но всё же лучшего форума для этого вопроса я не нашел. Итак я вступаю во взрослую жизнь и давно...

C++ сетевое блог приложение
Всем привет. Появилась задача разработать &quot; simple blog server application in C++, using a Json rest server, and a client interface, to...

Как создать сетевое приложение
Вообщем как связать две элементарных программы с разных компьютеров подключённых к интернету?

Как создать сетевое приложение?
Приветствую! У меня есть цель создать сетевое приложение. Я с этим никогда не сталкивался соответственно такой вопрос как это делать? ...

Сетевое программирование
Я хочу научиться создавать сетевые приложения на С++. С чего посоветуете начать? Может какую-то литературу кто нибудь посоветует или ссылку?


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

Или воспользуйтесь поиском по форуму:
31
Ответ Создать тему
Новые блоги и статьи
сукцессия 22. От артефактов к физиологии: калибровка агентной модели грибной сукцессии для воспроизведения сезонной динамики и pH-плато
anaschu 11.07.2026
Аннотация В данной работе представлена калибровка агентной модели динамики грибных сообществ (fungal-succession), направленная на устранение нефизичных артефактов (коллапс биомассы, мгновенное. . .
Сукцессия 20. Война автоботов. Делаем ставки. Лёд против "пш-пш!".
anaschu 11.07.2026
Битва ИИ в ризосфере: Как мы скрестили жесткие ОДУ, закон Фика и «подземный шантаж» Уважаемые коллеги! Хочу поделиться уникальным опытом ведения междисциплинарной компьютерной разработки. Прямо. . .
Сукцессия 19. Какие выводы я сделал из модели? Часть 2.Внутримикоризный стехиометрический буфер и хроно-дискретные зоны экспансии
anaschu 11.07.2026
Био-Инженерный Ликбез: Архитектура Модели Ризосферы Математический аппарат моделирования
Сукцессия 18. Какие выводы я сделал из войны грибов с деревьями? Часть 1- рассказ и немного про термины
anaschu 11.07.2026
Био-Инженерный Ликбез: Архитектура Модели Ризосферы Математический аппарат моделирования Система ОДУ описывает динамику изменения массы различных компонентов системы во времени. Ключевой. . .
Просветление в 5 секунд
kumehtar 10.07.2026
Андрей Веретенников выдал фразу недавно: "Вам не обязательно кем-то себя считать"
Эксперимент с картинкой-обложкой на CodinGame
Adler 10.07.2026
Решил на днях провести эксперимент. У меня есть аккаунт на CodinGame, ТОП-3 по РФ среди 2200 участников (в разделе соревнования по программированию ИИ-ботов). Там есть обложка, куда можно влепить. . .
GitDOS: Когда я решил скрестить MS-DOS, GitHub и Claude
MaGz GoLd 08.07.2026
Привет, Киберфорум! Хочу поделиться своим проектом, который, надеюсь, вас заинтересует. GitDOS — это веб-приложение, которое позволяет запускать DOS в браузере с тремя крутыми фичами: диски живут в. . .
Учебный мини "цифровой двойник" = (Сервер = Java + Flask_питон )+(3D = Гугловскаая 4T nvideo + google colab) +( WMS = Odoo на Docker)
anaschu 07.07.2026
Увидел в требованиях к вакансии создателя имитационных моделей связку (REst + Api + WMS + Anylogic + питон + 3D Nvideo), и решил посмотреть, что это такое. Из этого всего я работал более менее. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru