Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
105 / 7 / 1
Регистрация: 27.04.2015
Сообщений: 251

OpenGL не рисует

11.06.2025, 20:25. Показов 3526. Ответов 25

Студворк — интернет-сервис помощи студентам
Добрый день.
Хочу все-же осилить OpenGL.
Пробую сделать вот такую программу
main
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include "mainwindow.h"
#include <QApplication>
 
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    QSurfaceFormat format;
    format.setProfile(QSurfaceFormat::CoreProfile);
    format.setMajorVersion(4);
    format.setMinorVersion(6);
    w.setFormat(format);
    QSurfaceFormat::setDefaultFormat(format);
    w.setGeometry(300,100,900,900);
    w.show();
    return a.exec();
}
mainwindows.h
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
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
 
#include <QOpenGLWindow>
#include <QGLFunctions>
 
QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE
 
class MainWindow : public QOpenGLWindow, protected QGLFunctions
{
    Q_OBJECT
 
public:
    MainWindow();
    ~MainWindow();
 
private:
    GLuint m_vertexBufferID;
    QOpenGLContext *_context{};
 
protected:
    void initializeGL();
    void resizeGL(int w, int h);
    void paintGL();
};
#endif // MAINWINDOW_H
mainwindow.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
#include "mainwindow.h"
#include <QtOpenGL>
#include <QDebug>
 
MainWindow::MainWindow(){}
 
MainWindow::~MainWindow(){}
 
void MainWindow::initializeGL()
{
    _context = new QOpenGLContext(this);
    _context->create();
    this->makeCurrent();
 
    initializeGLFunctions();
    glClearColor(0.5f,0.5f,1.0f,1.0f);
 
    glGenBuffers(1, &m_vertexBufferID);
    glBindBuffer(GL_ARRAY_BUFFER,m_vertexBufferID);
 
    float vert[] =
    {
        0.0f, 1.0f ,0.0f,
       -1.0f,-1.0f ,0.0f,
        1.0f, -1.0f,0.0f
    };
 
    glBufferData(GL_ARRAY_BUFFER,sizeof(vert),vert,GL_STATIC_DRAW);
    qDebug("version %s",glGetString(GL_VERSION));
 
    QObject::connect(this,&MainWindow::frameSwapped,[this](){this->update();});
}
 
void MainWindow::resizeGL(int w, int h)
{
    glViewport(0, 0, (GLint)w, (GLint)h);
}
 
void MainWindow::paintGL()
{
    this->makeCurrent();
    glClear(GL_COLOR_BUFFER_BIT);
    glColor4f(1.0f,1.0f,1.0f,1.0f);
 
    glEnableVertexAttribArray(0);
    glVertexAttribPointer(0,3,GL_FLOAT,GL_FALSE,0,nullptr);
    glDrawArrays(GL_TRIANGLES,0,3);
}
Цвет окна меняется, а вот треугольник не рисуется. Хотя paintGL() вызывается постоянно - это видно.
Возможно я его рисую таким цветом, что его не видно, но я пока пытаюсь въехать - где его поставить?
Признателен за любую помощь.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.06.2025, 20:25
Ответы с готовыми решениями:

Qt+OpenGL. Qt "не видит" функции OpenGL
Доброго времени суток. Срочно нужна помощь. Скопировал код со статьи...

Чем отличаются готовые сборки Qt под Win + MSVC с OpenGL и без OpenGL?
Ну вопрос собственно в том, что мне не очень понятно, что же в сборке кьюте без опен джел имеется...

Какая значительная разница между OpenGL ES 2.0 и OpenGL 3.3 при использовании в Qt
Привет всем! У меня видеокарта имеет поддержку 3.1 версию OpenGL, обновить хочу её с помощью...

25
9991 / 2963 / 497
Регистрация: 05.10.2013
Сообщений: 8,144
Записей в блоге: 243
23.06.2025, 00:14
Студворк — интернет-сервис помощи студентам
Оффтоп
Цитата Сообщение от Royal_X Посмотреть сообщение
я ни на одну из этих вакансий не согласился бы)))
А я думаю, это идеально, чтобы залететь в геймдев, особенно для начинающего в Unity через стажёра. Хозяева этих бизнесов же платят ЗП сотрудникам не первый год, да ещё и за аренду платят в бизнес центре (50-100 тыс., наверное). Там можно просто практиковаться кодить в Unity или Unreal с утра до вечера и ещё ЗП за это получать, а не после работы или в выходные. Можно изучить на практике в миниатюре индустрию изнутри пусть и на маленьком примере. Поработать год-два и свалить в конторку побольше, или понять, что игры это не твоё и хочется делать что-то полезнее и серьёзнее и свалить гораздо раньше. А потом с этим опытом переехать в Москву и пойти в большую корпорацию для разработки игр. Два года в мелкой конторе с портфолио участия в игровых проектах - это лучше чем ничего в геймдев - больше шансов попасть в самые крупные корпорации по играм в РФ - VK и 1C. Если какой-нибудь студент (не из Москвы) мечтает с головой погрузиться в программирование игр с утра до ночи и получать за это деньги, то такие конторы для него самый реальный способ воплотить свою мечту программирования игр за деньги. Это самый простой способ залететь в гейм дев. В коллективе обучаться проще, быстрее, веселей и безопаснее. В корпорацию конкуренция большая, их мало в РФ, а мелких контор полно - не получилось в одной, пошёл в другую и не надо в Москву ехать.

Цитата Сообщение от Royal_X Посмотреть сообщение
Работать нужно либо на большую корпорацию
Я обзорно поинтересовался сколько больших корпораций в РФ. Самая крупная корпорация в РФ - MY.GAMES - 1500 сотрудников, которые принадлежит VK. У 1C Game Studios - 1100 сотрудников. Остальные средние или лучше сказать маленькие по сравнению с западными - 100-200 сотрудников. У некоторых офисы не в РФ. Например, у Gaijin Entertainment (War Thunder) примерно 200 сотрудников. Главный офис находится в Будапеште (Венгрия), а остальные офисы в странах Западной Европы, а также в Грузии, в Армении и в Дубае, а есть ли у них офис в РФ, я не нашёл - может они ушли из РФ. У Mundfish (Atomic Heart) один офис в Москве, а второй - на Кипре. У них всего около 130 сотрудников. Как мало больших корпораций в РФ и они находятся в основном только в Москве. В американской компании Blizzard Entertainment - 13000 сотрудников. В американской Sony Interactive Entertainment - 12700 сотрудников.

Мне поисковый ИИ гугла выдал следующую информацию по крупным корпорациями в РФ:

В России существует несколько крупных игровых корпораций и студий разработки игр. Среди них можно выделить MY.GAMES (входит в VK, ранее Mail.ru Group), 1C Game Studios, Gaijin Entertainment, Nival, Owlcat Games, и другие. Эти компании занимаются разработкой и изданием игр для различных платформ, включая ПК, консоли и мобильные устройства.

Вот некоторые из наиболее известных российских игровых компаний и студий:

MY.GAMES:
Разрабатывает и издает игры, такие как "Warface", "Skyforge", и "Allods Online".

1C Game Studios:
Известна своими историческими и военными стратегиями, а также серией "Ил-2 Штурмовик".

Gaijin Entertainment:
Разработчик популярной многопользовательской онлайн-игры "War Thunder".

Nival:
Разрабатывала игры "Аллоды Онлайн" и "Heroes of Might and Magic V".

Owlcat Games:
Известна разработкой RPG "Pathfinder: Kingmaker" и "Pathfinder: Wrath of the Righteous".

Elemental Games:
Разработчик серии "Космические рейнджеры".

Allods Team:
Внутренняя студия MY.GAMES, занимающаяся разработкой "Аллоды Онлайн" и других проектов.

Saber Interactive:
Разрабатывает игры для различных платформ, включая ПК и консоли.

ZeptoLab:
Создатель мобильных игр, таких как "Cut the Rope".

Playrix:
Компания, известная своими мобильными играми, такими как "Homescapes" и "Gardenscapes".

Помимо этих крупных компаний, в России существует множество более мелких студий и независимых разработчиков, которые вносят значительный вклад в игровую индустрию.
Цитата Сообщение от Royal_X Посмотреть сообщение
А тут в твоем списке какие-то гопники и их говно-студии
Одному гораздо поще написать говно-игру, которая не только не будет стабильно зарабатывать, а вообще хоть рубль заработает, чем команде из 10 человек в такой конторе. Хозяева этих контор работают на себя. Они понимают, что в одиночку очень сложно создавать игры для заработка и поэтому нанимают десяток сотрудников. Раз эти конторы приглашают на официальное устройство по трудовому кодексу, то у них есть чем платить ЗП каждый месяц. Они существуют не первый год, значит, игры стабильно зарабатывают, значит, люди стабильно играют в них и, значит, им нравится, значит игры годные. У хозяев этих контор есть капитал, чтобы оплачивать каждый месяц аренду офиса (или офисов) в бизнес-центрах, а это, наверное, 50-100 тыс. рублей в месяц. У них обычно работает человек 10 сотрудников. Я был в офисе, где Маки у всех стоят. Плюс зарплата - более 100 тыс. у каждого сотрудника. Где-то 1.2 - 1.5 млн. у них - это только траты. Может не только игры являются капиталом для хозяев этих контор. Если капитал - это прибыль от игр, то 2 миллиона, как минимум должна игра зарабатывать. Скорее всего, эти конторы умеют зарабатывать на своих играх. Начинающие в геймдев многому могут там научиться даже после базового знакомства с Unity. Человек может полностью сосредоточиться на практике в Unity или Unreal и получать за это ЗП, а не приходить уставшим с работы и уделять 30-60 минут в день вечером и выходные на свой игровой проект после основной работы.

Цитата Сообщение от Royal_X Посмотреть сообщение
либо на самого себя
Если в одиночку делать игру да ещё и после основной работы и в выходные, чтобы эта игра зарабатывала - это очень сложно, почти не реально звучит. Проще в контру пойти из 10 человек хотя бы чтобы увидеть изнутри, как они зарабатывают на играх, а в VK или 1C очень большая конкуренция будет на мой взгляд. Намного проще зарабатывать на игре, когда есть команда, а в команде есть геймдизайнер, художник, маркетолог и т.д. Этому надо посвящать время с утра до вечера, а если после работы и в выходные, да ещё и одному, то очень мало вероятно, что игра будет стабильно зарабатывать даже среднюю по стране ЗП. Ладно там, как хобби для себя и без заработка, то вообще пофиг на чём писать, хоть на ассемблере, если нравится. Если работать на себя и зарабатывать, то лучше всего иметь свой капитал и свою контору, то есть свой бизнес. Когда говорят, что я работаю на себя, то обычно имеют ввиду, что на меня работают наёмные сотрудники. При капитализме ты либо капиталист, либо наёмный сотрудник. Перебраться из класса наёмных сотрудников в класс капиталистов - очень сложно. Тут больше удача - в какой семье родился в сословном обществе. Как правило, у буржуазной семьи (у родителей или родственника) есть свой капитал, чтобы они могли инвестировать в твой бизнес или какой-то другой предпринимать может инвестировать за долю в бизнесе. Тогда ты работает сам на себя, а точнее, каждый месяц ты, как хозяин бизнеса забираешь себе прибавочную стоимость продукта, который создают наёмные сотрудники, сдирая семь шкур и заставляя работать по 10-12 часов и в выходные - даже в некоторых самых крупных геймдев корпорациях США были забастовки по поводу переработок, когда из людей выжимают все соки и выкидывают как отработанный материал, поэтому трудящиеся иногда объединяются в профсоюзы, устраивают забастовки и добиваются своего. А по одиночки они ничего сделать не могут - их выкидывают, а на их место очередь. При диктатуре буржуазии правящий класс - это класс капиталистов, поэтому им живётся намного лучше, чем классу наёмных сотрудников, так как прибавочную стоимость продуктов создаваемых наёмными рабочими капиталист (хозяин конторы) забирает себе.


Как результат видео из сообщения #3, прикрепляю итоговый пример. Это пример автора темы, который я исправил и дополнил. Он работает. Команды для компиляции и запуска примера:

Bash
1
2
3
4
5
mkdir build
cd build
cmake -G "MinGW Makefiles" ..
cmake --build .
app.exe
Либо можно открыть пример в Qt Creator. Для этого выбрать в меню: "File" > "Open File or Project..." > выбрать "CMakeLists.txt" из корня проекта > Проект откроется в Qt Creator



CMakeLists.txt

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
cmake_minimum_required(VERSION 3.21)
project(simple-triangle-opengl33-qt-cpp)
 
set(CMAKE_CXX_STANDARD 17)
 
set(CMAKE_AUTOMOC ON)
 
find_package(Qt6 REQUIRED COMPONENTS OpenGL Widgets OpenGLWidgets)
 
add_executable(app)
 
target_sources(app PRIVATE
    src/main.cpp
    src/mainwindow.h
    src/mainwindow.cpp
)
 
target_link_libraries(app PRIVATE Qt6::OpenGL Qt6::Widgets Qt6::OpenGLWidgets opengl32)
main.cpp

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include "mainwindow.h"
#include <QApplication>
 
int main(int argc, char *argv[])
{
    QApplication::setAttribute(Qt::ApplicationAttribute::AA_UseDesktopOpenGL);
    QApplication a(argc, argv);
    MainWindow w;
    QSurfaceFormat format;
    format.setProfile(QSurfaceFormat::CoreProfile);
    format.setMajorVersion(3);
    format.setMinorVersion(3);
    w.setFormat(format);
    QSurfaceFormat::setDefaultFormat(format);
    w.setGeometry(300, 100, 350, 350);
    w.show();
    return a.exec();
}
mainwindow.h

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
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
 
#include <QOpenGLWindow>
#include <QOpenGLFunctions>
#include <QOpenGLShaderProgram>
#include <QOpenGLVertexArrayObject>
#include <QOpenGLBuffer>
 
QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE
 
class MainWindow : public QOpenGLWindow, protected QOpenGLFunctions
{
    Q_OBJECT
 
public:
    MainWindow();
    ~MainWindow();
 
private:
    QOpenGLShaderProgram *m_program = nullptr;
    QOpenGLVertexArrayObject m_vao;
    QOpenGLBuffer m_vbo;
 
protected:
    void initializeGL();
    void resizeGL(int w, int h);
    void paintGL();
};
#endif // MAINWINDOW_H
mainwindow.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
#include "mainwindow.h"
#include <QDebug>
#include <QtOpenGL>
 
MainWindow::MainWindow()
    : m_vbo(QOpenGLBuffer::VertexBuffer)
{
}
 
MainWindow::~MainWindow()
{
    makeCurrent();
    m_vbo.destroy();
    m_vao.destroy();
    delete m_program;
    doneCurrent();
}
 
void MainWindow::initializeGL()
{
    initializeOpenGLFunctions();
 
    static const char *vertexShaderSource = R"(
    #version 330 core
    layout(location = 0) in vec3 position;
 
    void main()
    {
        gl_Position = vec4(position, 1.0);
    }
    )";
 
    static const char *fragmentShaderSource = R"(
    #version 330 core
    out vec4 fragColor;
 
    void main()
    {
        fragColor = vec4(0.0, 0.5, 0.0, 1.0); // Green color
    }
    )";
 
    glClearColor(0.2f, 0.2f, 0.2f, 1.0f);
 
    // Compile and link shaders
    m_program = new QOpenGLShaderProgram(this);
    m_program->addShaderFromSourceCode(QOpenGLShader::Vertex, vertexShaderSource);
    m_program->addShaderFromSourceCode(QOpenGLShader::Fragment, fragmentShaderSource);
    m_program->link();
 
    float vertices[] = {
        0.0f, 1.0f, 0.0f,
        -1.0f, -1.0f, 0.0f,
        1.0f, -1.0f, 0.0f
    };
 
    // Setup VAO
    m_vao.create();
    m_vao.bind();
 
    // Setup VBO and upload data
    m_vbo.create();
    m_vbo.bind();
    m_vbo.allocate(vertices, sizeof(vertices));
 
    // Tell OpenGL how to interpret vertex data
    m_program->enableAttributeArray(0);
    m_program->setAttributeBuffer(0, GL_FLOAT, 0, 3);
 
    m_vbo.release();
    m_vao.release();
 
    qDebug("version %s", glGetString(GL_VERSION));
 
    QObject::connect(this, &MainWindow::frameSwapped, [this]() { this->update(); });
}
 
void MainWindow::resizeGL(int w, int h)
{
    glViewport(0, 0, (GLint)w, (GLint)h);
}
 
void MainWindow::paintGL()
{
    glClear(GL_COLOR_BUFFER_BIT);
 
    m_program->bind();
    m_vao.bind();
 
    glDrawArrays(GL_TRIANGLES, 0, 3);
 
    m_vao.release();
    m_program->release();
}
Вложения
Тип файла: zip simple-triangle-opengl33-qt-cpp.zip (2.8 Кб, 4 просмотров)
0
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6339 / 3073 / 1064
Регистрация: 01.06.2021
Сообщений: 11,809
23.06.2025, 00:53
8Observer8, я треугольник могу и на WinAPI нарисовать, причем не монотонный, а красочный - там нет готовой картинки, а нарисовано самостоятельно через код Экзешник весит всего 14 КБ, он во вложении.



Цитата Сообщение от 8Observer8 Посмотреть сообщение
чтобы эта игра зарабатывала - это очень сложно, почти не реально звучит
Смотря какая игра. Одиночки на Западе неплохо зарабатывают на донатах на NSFW играх. Правда в таких играх программирование занимает очень малую часть разработки. Там больше нужно быть хорошим художником, аниматором. Есть одна разработчица из России, она на одной такой игре в месяц где-то 700 долларов зарабатывает. Но ее игры рассчитаны на западную аудиторию, там даже нет русского языка.

А так, в целом согласен, что одиночке сложно зарабатывать, особенно, когда нет больших денег на рекламу.

8Observer8, на Unity я создавал игры. Но сейчас полностью перешел на Godot и UE. И это для меня хобби. Ни программирование, ни разработка игр - это не моя специальность в жизни. Просто я так развлекаюсь.
Вложения
Тип файла: zip Triangle.zip (6.9 Кб, 4 просмотров)
0
9991 / 2963 / 497
Регистрация: 05.10.2013
Сообщений: 8,144
Записей в блоге: 243
24.06.2025, 17:17
Я повторил видео из сообщения #3 на английском. Надо дублировать все видео на английском для дополнительной практики в английском и программировании. Здесь я не стал использовать ChatGPT для генерации остального кода, которого не хватает в коде автора темы. Я скопировал код автора темы и набрал остальной код вручную. На этот раз использовал Qt Creator вместо Sublime Text 4.

Это хороший способ изучения через практику, когда записываешь видео, потому что запись видео дисциплинирует. Ты должен сначала подготовиться к этому и набрать код несколько раз не под запись, чтобы часто не подглядывать в шпаргалку во время записи. Даже если твоё видео никто не посмотрит, то это всё равно большая польза, так как это мотивирует лучше готовиться и когда кому-то пытаешься объяснять, то лучше запоминаешь сам. Многим начинающим такой формат ответа больше подходит, когда ты видишь шаг за шагом процесс решения проблемы.

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

Звук записался с потрескиваниями в начале видео. Залил на российский площадки на случай, если YouTube заблокируют в РФ окончательно. Конечно, я и сам понимаю, что это очень кринжово смотрится, да и на русском мне не нравится, как получилось. Мне тяжело слушать свой голос. Да и пофиг. Как есть так и есть. Может кому-то полезно будет увидеть наглядно шаг за шагом, как нарисовать первый треугольник на QtOpenGL на базе вопроса темы. Мне не жалко времени даже если никто не посмотрит. Зато в английском какая-никакая практика, а под строссом съёмки - отличная тренировка ещё и с пользой для программирования на QtOpenGL. Представляю какая это кринжатина для носителя английского языка, но может если записывать регулярно хоть раз в неделю, а не раз в 2 года, то будет лучше и лучше с каждым разом. Хотя, когда смотришь американцев с плохим русским, то, например, у меня никогда не возникает испанского стыда. Со звуком в Camtasia надо что-то сделать или может с микрофоном что-то или драйвера попробовать переустановить для звука.

Rutube



VK Video



YouTube

Вложения
Тип файла: zip simple-triangle-opengl33-qt6-cpp.zip (2.5 Кб, 0 просмотров)
Тип файла: rar Failed to draw a triangle in OpenGL 3.3 and Qt6.part1.rar (25.00 Мб, 0 просмотров)
Тип файла: rar Failed to draw a triangle in OpenGL 3.3 and Qt6.part2.rar (25.00 Мб, 0 просмотров)
Тип файла: rar Failed to draw a triangle in OpenGL 3.3 and Qt6.part3.rar (24.17 Мб, 0 просмотров)
0
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6339 / 3073 / 1064
Регистрация: 01.06.2021
Сообщений: 11,809
24.06.2025, 18:20
8Observer8, пожалуй дам несколько советов, а ты делай с ними, что хочешь:
1) записывай видео без звука, а озвучивай уже потом.
2) записывай на русском, а потом просто генерируй субтитры. Многие сервисы, как YouTube умеют автоматически генерировать субтитры, а также переводить их на разные языки.
3) то, что тебе не нравится твой голос - это нормальное явление. Собственный голос не нравится многим людям. Это потому, что когда мы слышим свой голос на протяжении всей жизни, на самом деле, это не наш настоящий голос, а это искаженная версия, поскольку источник звука и приемник звука находятся на одной голове. Но мы привыкаем именно к этому голосу и когда слышим свой голос на записи, это вызывает отвращение. Тут либо нужно привыкнуть, либо можешь с помощью спец. программ сгенерировать аудио на основе субтитров.
1
9991 / 2963 / 497
Регистрация: 05.10.2013
Сообщений: 8,144
Записей в блоге: 243
27.06.2025, 21:14
Anton1978, у вас кроме отсутствия шейдеров и VBO, что я показал, как решить на видео в сообщении #3, ещё отсутствуют необходимые матрицы:
  • Матрица вида для установки положения наблюдателя и точки наблюдения
  • Матрица ортогональной проекции для установки точки начала системы координат и границ системы координат
  • Матрица модели для установки положения треугольника, его угла поворота и его ширины и высоты
Я постарался объяснить на видео, как добавить трансформации для треугольника и остальные матрицы:

На русском









Bastyon

Dzen

Platforma

Трансформированный треугольник OpenGL 3.3 и Qt 6.9.part1.rar
Трансформированный треугольник OpenGL 3.3 и Qt 6.9.part2.rar
Трансформированный треугольник OpenGL 3.3 и Qt 6.9.part3.rar

На английском









Bastyon

Dzen

Platforma

Transformed triangle in OpenGL 3.3 and Qt 6.9.part1.rar
Transformed triangle in OpenGL 3.3 and Qt 6.9.part2.rar

Продублировал видео в блоге: Основы OpenGL 3.3 и Qt 6.9. Трансформированный треугольник

Исходники на GitHub

Вложения
Тип файла: zip simple-triangle-opengl33-qt6-cpp.zip (2.8 Кб, 0 просмотров)
Тип файла: zip transformed-triangle-opengl33-qt6-cpp.zip (3.1 Кб, 3 просмотров)
0
9991 / 2963 / 497
Регистрация: 05.10.2013
Сообщений: 8,144
Записей в блоге: 243
05.07.2025, 14:49
Цитата Сообщение от Royal_X Посмотреть сообщение
Если у тебя есть готовые игры, то как можно в них поиграть? Хочу посмотреть на игру, написанную на чистом WebGL. Просто я бы так не смог, наверное, - тратить столько времени, когда можно сделать игру на игровом движке, а потом экспортировать под разные платформы, в том числе для web.
Моя игровая демка на Qt, WASM, OpenGL, Box2D, и OpenAL



Если зайти по ссылке выше на itch с мобильного телефона, то будет показан самодельный Joystick на OpenGL. Работает ещё и на очень старом Redmi 4X с Android 7:



Да, Unity может собирать в WebAssembly. На моём слабом ноутбуке, Unity первый раз он собирает 10 минут, а последующие разы 3-4 минуты. Конечно, у кого очень мощный компьютер, то, скорее всего, должен собирать гораздо быстрее. Qt собирает в WASM гораздо быстрее. Ещё быстрее собирать в WASM с использованием SDL3. На SDL3 больше возможностей для взаимодействия с HTML и CSS, хотя в демке выше я всё GUI нарисовал на чистом OpenGL. Один из самых быстрый способ собирать в веб - использовать чистый WebGL, JavaScript, HTML, CSS. Я использую Rollup для сборки js-файлов в один файл и минификации его. Rollup собирает за десятки миллисекунд, или несколько сотен миллисекунд. С помощью http-server на JavaScript я могу быстро тестировать веб-приложение на Android через Wi-Fi, введя адрес в мобильном браузере. Не нужно долго ждать сборки под Android, как на C++ (что на Qt, что на SDL3, что на Unity или Godot). Я поменял что-то в приложении и сразу могу обновить страницу на Android свопом вниз и могу тестировать на самодельном джойстике. На JS легко взаимодействовать с GUI на HTML и CSS и с веб-сокетами, а на Emscripten гораздо сложнее.

На самом деле, это всё вкусовщина. Все смотрят под своими углами, со своими целями. Я отношусь к простым играм, как к хобби, как к возможности тренировки с разными технологиями и с разными языками типа JavaScript, Python, C++ и C. У всех может быть разное хобби. Мне легко переключаться, например, между JS и C++ на WebGL/OpenGL. Кому-то нужны веб-сокеты, а кому-то нет. Я считаю, что многим было бы полезно и интересно написать Крестики-Нолики на веб-сокетах или Змейку на веб-сокетах с мультиплеером - но это сложнее, я пока не сделал. На Qt легко использовать веб-сокеты, так как есть встроенный модуль для веб-сокетов со своими сигналами и слотами. На SDL3, GLFW - это будет сложнее. Если у автора темы цель - практиковаться в C++ на простой графике или на играх, то зачем ему брать игровые движки? Он может научиться рисовать квадрат на QPainter или OpenGL и написать игровую демку "Змейка".

У автора темы куча тем по Qt. Правда, есть ещё тема, как он пытался поставить и начать работать на Unreal Engine. Если автор темы хочет практиковаться на C++ и Qt, то пусть на нём и практикуется. Если автор темы захочет практиковаться с Unreal Engine, то один из вариантов - нагуглить как написать Змейку - лучше на английском, так как больше информации: "Snake in Unreal Engine". На YouTube достаточно туториалов по игре Змейка на Unreal Engine. Я пробовал несколько месяцев или пол года изучать UE4, когда он вышел в 2014-м, но для него нужно компьютер помощнее, чем мой ноут. Только на C++ там сложно, нужно комбинировать с Blueprints. Демки там получаются по 300 MB, что не прикрепишь к форуму и легко забить такими демками свой Google Drive, DropBox, MediaFire, Yandex Disk, а на TeraBox скорость маленькая на бесплатном профиле. Я к тому, что смотря какие цели и какие хотелки у человека. Одному один язык больше нравится и определённый стек технологий, кому-то скорость сборки, кому-то требования, а кому-то наплевать на требования и он наоборот хочет выжимать максимум графики из топового железа и т.д.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.07.2025, 14:49

Совместимость OpenGL 3.3 и OpenGL ES 3.2
Здравствуйте. Возник вопрос касаемо совместимости OpenGL 3.3 и OpenGL ES 3.2. Сравнительно недавно...

Не рисует градиент на форме
Во многих справочниках по графе в QT написан вполне вменяемый код вставляю его в мэин и ничего...

не рисует прямоугольник
cScene.h #ifndef CSCENE_H #define CSCENE_H #include &lt;QtGui&gt; class cScene:public...

QPainter криво рисует фигуры
Через указатель на базовый клас Base_figure рисую фигуры, но они рисуются неправильно, т.е не по...

QGraphicsScene - addRect не рисует при изменении ширины линии
Хочу перекрасить рамку прямоугольника в другой цвет. Делаю это так: void...


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

Или воспользуйтесь поиском по форуму:
26
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru