Форум программистов, компьютерный форум, киберфорум
OpenGL
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.83/18: Рейтинг темы: голосов - 18, средняя оценка - 4.83
53 / 7 / 1
Регистрация: 06.10.2020
Сообщений: 221

Существует ли "цельный" openGL?

20.01.2022, 17:18. Показов 4706. Ответов 51
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Я хочу создать свою игру на OpenGL, но только мне уже надоело скачивать всякие glfw, glew, glu и т. п. а потом ещё и ошибок 250 штук получить. Можно ли где-то скачать цельный openGL, в котором нет никаких таких заморочек и нет конфликтов?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.01.2022, 17:18
Ответы с готовыми решениями:

Собрать несколько песен в один цельный файл
Добрый день? Как собрать несколько звуковых файлов в один общий программой или плагином браузера?

Recvfrom возвращает цельный пакет размером по 500 байт, или подробит на части?
Есть пакеты пересылаються частями по 500 байт, то есть фрагментации быть не может если верить вики. В этом случае recvfrom всегда...

существует ли в языке Си функция replace? и если существует то как работает?
А если её нет то каким образом можно изменить числа входящие в массив?

51
1980 / 836 / 115
Регистрация: 01.10.2012
Сообщений: 5,208
Записей в блоге: 2
23.01.2022, 15:54
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от 8Observer8 Посмотреть сообщение
У таких мелочей низкий приоритет, а времени они могут съесть колоссальное.
Согласен, только constraint'ы надо освоить, без них все равно не прожить. Правда, освоить их трудно, я понимаю в исходниках примерно 20%

Цитата Сообщение от 8Observer8 Посмотреть сообщение
Делать BoxCollider для каждой ступеньки
Не понял, какие коллидеры? Просто static объект (для Bullet), это может быть любой меш, даже сложный, работает быстро.

Цитата Сообщение от 8Observer8 Посмотреть сообщение
Но от всё равно хочет писать игры на OpenGL без игровых движков. Я его понимаю. Я сам пробовал кучу игровых движков на C++ и кучу на JavaScript. Я понял, что мне интереснее всего писать игры с нуля на голом API на WebGL и Qt OpenGL, иметь полный контроль и понимать, что происходит, изучать через игры нужные мне части графического API. Вы теперь в каждой теме, где человек решил писать игры на OpenGL, Vulkan, DirectX будете заходить отговаривать его не писать игры на OpenGL и т.д.? Самая большая ошибка начинающих, что они начинают копать API вглубь и забывают свою основную цель - написание игры.
Ну или начинают понимать что их мечта была красивой но наивной/незрелой В библии сказано примерно так
Для достаточно большой системы существует только один старт - меньшая, но уже работающая система
И еще я помню
Начинать все с нуля прекрасно, но..
В самом деле, Вы хотите объять необъятное (со всеми вытекающими). Времена одиночек и "капитана Комика" давно прошли.
1
Просто Икс
 Аватар для Mc X
692 / 234 / 47
Регистрация: 15.12.2009
Сообщений: 696
23.01.2022, 15:59
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Там будут только приятные плюшки...
Не исключаю, просто исхожу из задач, которые могут возникнуть (передо мной) в тех или иных случаях
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Но он же только начинает учиться...
Мой первый опыт был Бейсиком на ZX Spectrum, а руководствами были книжки в библиотеке (единственное что нас туда могло затащить в том возрасте ), поэтому нередко бывает сложно что-то советовать тому кто делает свои "первые шаги", но считаю, что твои слова не лишены здравого смысла

В дополнение, могу лишь повториться и посоветовать вдумчиво прочитать статью которую ранее советовал...
How to make your own game engine (and why)
Хотя название статьи и может показаться эпичным и ввести в заблуждение, но это весьма здравый взгляд на вещи со всеми pro et contra
1
9991 / 2963 / 497
Регистрация: 05.10.2013
Сообщений: 8,135
Записей в блоге: 243
23.01.2022, 16:32
Aleksey_1024, установите Qt 5.15.2 по моей инструкции:

Нужно в интернет-поисковике набрать "qt open source":



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



Нажмите эту кнопку. Будет скачена программа установки. Запустите её. На втором шаге установки (на странице "Open Source Obligations") нужно поставить две галочки внизу, что, например, что вы самозанятый, а не используете Qt будучи сотрудником какой-то компании:



На одной из страниц установки нужно поставить следующие галочки. Я ставил версию Qt 5.15.2 MinGW, вы можете поставить MSVC:





Теперь можете запускать Qt Creator, набрав в поиске программ Qt Creator.

Мини-игра Змейка



Откройте в Qt Creator и запустите мою мини-игру Змейка, исходники: https://rextester.com/YHXB28198

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
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
// Add this line to .pro:
// win32: LIBS += -lopengl32
 
#ifdef _WIN32
#include <windows.h>
extern "C" __declspec(dllexport) DWORD NvOptimusEnablement = 0x00000001;
extern "C" __declspec(dllexport) DWORD AmdPowerXpressRequestHighPerformance = 0x00000001;
#endif
 
#include <QtWidgets/QApplication>
#include <QtWidgets/QWidget>
#include <QtWidgets/QOpenGLWidget>
#include <QtWidgets/QVBoxLayout>
#include <QtWidgets/QHBoxLayout>
#include <QtWidgets/QLabel>
#include <QtGui/QOpenGLShaderProgram>
#include <QtGui/QOpenGLBuffer>
#include <QtGui/QMatrix4x4>
#include <QtGui/QKeyEvent>
#include <QtCore/QList>
#include <QtCore/QMutableListIterator>
#include <QtCore/QTimer>
#include <QtCore/QRandomGenerator>
 
class OpenGLWidget : public QOpenGLWidget {
    Q_OBJECT
public:
    OpenGLWidget(QWidget *parent = nullptr) : QOpenGLWidget(parent) {
        setFocusPolicy(Qt::StrongFocus);
    }
signals:
    void updateScore(QString score);
    void updateLives(QString lives);
private slots:
    void onUpdate() {
        // Move snake
        // Insert new position in the beginning of the snake list
        m_snake.insert(0, m_snake[0] + m_snakeDir);
        m_snake.removeLast();
        // Collision with itself
        int hx = m_snake[0].x();
        int hy = m_snake[0].y();
        for (int i = 0; i < m_snake.length(); i++) {
            if (i == 0)
                continue;
            if (hx == m_snake[i].x() && hy == m_snake[i].y()) {
                m_food.clear();
                m_snake.clear();
                m_snake.append(m_startPos);
                m_snakeDir = m_startDir;
                emit updateLives("Lives: " + QString::number(--m_lives));
                update();
                return;
            }
        }
        // Spawn food
        // Spawn food with 5% chance
        int r = QRandomGenerator::global()->bounded(0, 20);
        if (r == 0) {
            int x = QRandomGenerator::global()->bounded(0, m_fieldWidth);
            int y = QRandomGenerator::global()->bounded(0, m_fieldHeight);
            m_food.append(QVector2D(x, y));
        }
        // Let the snake eat the food
        // Get the snake's head x and y position
        QMutableListIterator<QVector2D> i(m_food);
        while (i.hasNext()) {
            QVector2D f = i.next();
            if (hx == f.x() && hy == f.y()) { // Is the head where the food is?
                m_snake.append(QVector2D(f.x(), f.y())); // Make the snake longer
                i.remove(); // Remove the food
                m_score += 10;
                emit updateScore("Score: " + QString::number(m_score));
            }
        }
        // Collisions with borders
        if (hx < 0 || m_fieldWidth <= hx ||
            hy < 0 || m_fieldHeight <= hy)
        {
            m_lives--;
            m_food.clear();
            m_snake.clear();
            m_snake.append(m_startPos);
            m_snakeDir = m_startDir;
            if (m_lives == 0) {
                m_lives = 3;
                m_score = 0;
                emit updateScore("Score: " + QString::number(m_score));
            }
            emit updateLives("Lives: " + QString::number(m_lives));
        }
        update();
    }
private:
    QOpenGLShaderProgram m_program;
    QOpenGLBuffer m_vertPosBuffer;
    float m_fieldWidth = 20.f; // Internal resolution
    float m_fieldHeight = 20.f; // Internal resolution
    QMatrix4x4 m_projMatrix;
    QMatrix4x4 m_modelMatrix;
    QList<QVector2D> m_snake; // Snake list of (x, y) positions
    QList<QVector2D> m_food;
    QVector2D m_startPos = QVector2D(5.f, 10.f);
    QVector2D m_startDir = QVector2D(1, 0);
    QVector2D m_snakeDir = m_startDir; // Snake movement direction
    QTimer m_timer;
    int m_score = 0;
    int m_lives = 3;
 
    void initializeGL() override {
//        qDebug() << QString("w = %1, h = %2").arg(width()).arg(height());
        glClearColor(0.f, 0.f, 0.f, 1.f);
        glEnable(GL_DEPTH_TEST);
        const char *vertShaderSrc =
                "attribute vec3 aPosition;"
                "uniform mat4 uMvpMatrix;"
                "void main()"
                "{"
                "    gl_Position = uMvpMatrix * vec4(aPosition, 1.0);"
                "}";
        const char *fragShaderSrc =
                "uniform vec4 uColor;"
                "void main()"
                "{"
                "    gl_FragColor = uColor;"
                "}";
        m_program.addShaderFromSourceCode(QOpenGLShader::Vertex, vertShaderSrc);
        m_program.addShaderFromSourceCode(QOpenGLShader::Fragment, fragShaderSrc);
        m_program.link();
        m_program.bind();
        float vertPositions[] = {
            0.f, 0.f, 0.f,
            1.f, 0.f, 0.f,
            0.f, 1.f, 0.f,
            1.f, 1.f, 0.f
        };
        m_vertPosBuffer.create();
        m_vertPosBuffer.bind();
        m_vertPosBuffer.allocate(vertPositions, sizeof(vertPositions));
        m_program.bindAttributeLocation("aPosition", 0);
        m_program.setAttributeBuffer(0, GL_FLOAT, 0, 3);
        m_program.enableAttributeArray(0);
        m_projMatrix.ortho(0.f, m_fieldWidth, 0.f, m_fieldHeight, -100.f, 100.f);
        m_snake.append(m_startPos);
        emit updateScore("Score: " + QString::number(m_score));
        emit updateLives("Lives: " + QString::number(m_lives));
        connect(&m_timer, &QTimer::timeout, this, &OpenGLWidget::onUpdate);
        m_timer.start(200);
    }
    void paintGL() override {
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        drawFood();
        drawSnake();
    }
    void resizeGL(int w, int h) override {
        glViewport(0, 0, w, h);
    }
    void keyPressEvent(QKeyEvent *e) override {
        if (e->key() == Qt::Key_W || e->key() == Qt::Key_Up)
            if (m_snakeDir != QVector2D(0, -1))
                m_snakeDir = QVector2D(0, 1);
        if (e->key() == Qt::Key_S || e->key() == Qt::Key_Down)
            if (m_snakeDir != QVector2D(0, 1))
                m_snakeDir = QVector2D(0, -1);
        if (e->key() == Qt::Key_A || e->key() == Qt::Key_Left)
            if (m_snakeDir != QVector2D(1, 0))
                m_snakeDir = QVector2D(-1, 0);
        if (e->key() == Qt::Key_D || e->key() == Qt::Key_Right)
            if (m_snakeDir != QVector2D(-1, 0))
                m_snakeDir = QVector2D(1, 0);
    }
    void drawRect(float x, float y, float width, float height, QColor color) {
        m_modelMatrix.setToIdentity();
        m_modelMatrix.translate(QVector3D(x, y, 0.f));
        m_modelMatrix.scale(width, height, 1.f);
        m_program.bind();
        m_program.setUniformValue("uMvpMatrix", m_projMatrix * m_modelMatrix);
        m_program.setUniformValue("uColor", color);
        glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
    }
    void drawSnake() {
        foreach (const QVector2D &cell, m_snake) {
            drawRect(cell.x(), cell.y(), 1, 1, QColor(255, 255, 255, 255));
        }
    }
    void drawFood() {
        foreach (const QVector2D &f, m_food) {
            drawRect(f.x(), f.y(), 1, 1, QColor(0, 0, 255, 255));
        }
    }
};
 
class Window : public QWidget {
public:
    Window(QWidget *parent = nullptr) : QWidget(parent) {
        setWindowTitle("C++ OpenGL");
        setFixedSize(239, 268);
        QFont font = QFont("Areal", 14);
        m_labelScore.setFont(font);
        m_labelScore.setText("");
        m_labelScore.setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
        m_labelLives.setFont(font);
        m_labelLives.setText("");
        m_labelLives.setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
        QHBoxLayout *hboxOutput = new QHBoxLayout();
        hboxOutput->addWidget(&m_labelScore);
        hboxOutput->addWidget(&m_labelLives);
        QHBoxLayout *hbox = new QHBoxLayout();
        hbox->addWidget(&m_openGLWidget);
        QVBoxLayout *vbox = new QVBoxLayout(this);
        vbox->addLayout(hboxOutput);
        vbox->addLayout(hbox);
        connect(&m_openGLWidget, &OpenGLWidget::updateScore,
                [this](const QString &s){ m_labelScore.setText(s); });
        connect(&m_openGLWidget, &OpenGLWidget::updateLives,
                [this](const QString &s){ m_labelLives.setText(s); });
    }
private:
    OpenGLWidget m_openGLWidget;
    QLabel m_labelScore;
    QLabel m_labelLives;
};
 
#include "main.moc"
 
int main(int argc, char *argv[]) {
    QApplication a(argc, argv);
    Window w;
    w.show();
    return a.exec();
}
Теорию создания этой змейки изучите по туториалу: Python Snake Game

Release для Windows: Snake2DNoobTuts_OpenGLES20_Qt5Cpp.zip (11.09 Мб) Я специально собрал Release не в статику, чтобы показать, какие библиотеки вам нужны, чтобы другие могли запускать на своих компьютерах. Можете этот архив положить поближе, чтобы оттуда сразу всё копировать и прикреплять свой архив на форум, чтобы показывать своё творчество в действии.

Берите мои исходники, делайте на их основе Pong, Tetris и т.д. Как можно больше игр. Сосредоточьтесь только на простых играх. Добавьте текстуры, звуки, добавляйте уровни. Купите себе TexturePacker - это крайне важная вещь и очень простая. Например, у вас кучу отдельных спрайтов, а эта программа позволяет все спрайты упаковать в текстурный атлас и извлекать их с помощью JSON (или XML) парсера, который встроен в Qt. TexturePacker генерирует текстурный атлас и файл .json (либо .xml)

Цитата Сообщение от Igor3D Посмотреть сообщение
Не понял, какие коллидеры? Просто static объект (для Bullet), это может быть любой меш, даже сложный, работает быстро.
Да ладно! Это будет здорово, если вы правы. Я винтовую лестницу делал из кучи наклонных статических btBoxShape. Поэтому, наверное, и тормозить начало, что я кучу их добавил. Потом я ещё скрипт написать на Python для Blender, чтобы экспортировать координаты и кватернионы этих кубойдов, чтобы уже в коде с помощью Ammo.js создать и расставить btBoxShape. То есть я брал обычные кубы в Blender, делал вручную кубойды, ставил их руками на винтовую лестницу по спирали (хотя ещё пытался модификатором Array закрутить кубойды по спирали, но не получилось, пришлось руками). Я так маяк хотел сделать, как в следующем туториале, но чтобы внутри была винтовая лестница, и чтобы можно было от первого лица подняться наверх. Хочу удивить автора туториала (Артёма Слакву) и сообщество моделлеров на его сайте, что в браузере можно такое делать:



Не нашёл я проект, где я делал длинную лестницу. Нашёл только этот, чтобы показать идею. Самой лестницы здесь нет, но есть обозначения, какого размера должны быть коллайдеры, где они должны быть и как повёрнуты. Слева скрипт, который генерирует код на JS следующего вида, и этот код я вставляю в своё приложение:

JavaScript
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
const pos = [
    [0.0, -0.5, -0.0],
    [23.778, 2.5, -0.0],
    [2.0, 0.5, -3.0],
    [-1.7356, 1.6021, -3.1912],
    [-3.6596, 2.6153, -0.2141],
    [-2.3041, 3.7643, 2.8317],
    [1.2801, 4.8255, 2.8317],
    [-23.7463, 2.5, -0.0],
    [0.0, 2.5, -23.8984],
    [0.0, 2.5, 23.3859],
];
 
const rot = [
    [0.0, 0.0, -0.0, 1.0],
    [0.0, 0.0, -0.0, 1.0],
    [0.1504, 0.4924, -0.0868, 0.8529],
    [0.0874, 0.851, -0.1501, 0.4957],
    [-0.0057, 0.9843, -0.1736, -0.0321],
    [-0.0938, 0.8286, -0.1461, -0.5322],
    [-0.1441, 0.5494, -0.0969, -0.8173],
    [0.0, 0.0, -0.0, 1.0],
    [0.0, 0.7071, -0.0, 0.7071],
    [0.0, 0.7071, -0.0, 0.7071],
];
 
const scale = [
    [23.3104, 0.5, 23.3104],
    [0.5, 2.5, 23.2828],
    [1.5, 0.25, 2.5],
    [1.5, 0.25, 2.5],
    [1.5, 0.25, 2.5],
    [1.5, 0.25, 2.5],
    [1.5, 0.25, 2.5],
    [0.5, 2.5, 23.2828],
    [0.5, 2.5, 23.2828],
    [0.5, 2.5, 23.2828],
];
Вложения
Тип файла: zip Snake2DNoobTuts_OpenGLES20_Qt5Cpp.zip (11.09 Мб, 0 просмотров)
0
Просто Икс
 Аватар для Mc X
692 / 234 / 47
Регистрация: 15.12.2009
Сообщений: 696
23.01.2022, 16:50
Наткнулся на нее у Рона Гилберта (автор Monkey Island и один из разработчиков игрового движка SCUMM на Grumpy Gamer (его блог\сайт)
Несмотря на то, что откровением для меня не стала, но мне статья очень понравилась.
Она подходит, как тем кто задается вопросом "какой движок выбрать", так и тем, кто задается вопросом "хочу написать свой движок. с чего начать?"

Добавлено через 12 минут
Цитата Сообщение от 8Observer8 Посмотреть сообщение
и этот код я вставляю в своё приложение
Не проще сделать своеобразную подгрузку карт из файла?
Где указывать все нужные параметры объектов с указанием файла модели, текстуры, файла для физики и т.д.?
1
23.01.2022, 16:56

Не по теме:

Цитата Сообщение от Mc X Посмотреть сообщение
Не проще сделать своеобразную подгрузку карт из файла?
Да, из файла надо. Но я на скорую руку делал. Копипаст оказался быстрее на первых парах. Далее, да, конечно, из файла.

0
фрилансер
 Аватар для Алексей1153
6506 / 5753 / 1134
Регистрация: 11.10.2019
Сообщений: 15,402
23.01.2022, 17:09
Цитата Сообщение от Eddy_Em Посмотреть сообщение
Qt — жирное неповоротливое УГ
сразу видно, что ты явно не в теме
0
Нарушитель
447 / 888 / 106
Регистрация: 23.11.2021
Сообщений: 5,209
Записей в блоге: 19
23.01.2022, 17:18
Алексей1153, я уже практически 20 лет - линуксоид. И прекрасно в теме. Культяпки были говном еще 20 лет назад. Но тогда они были хотя бы не таким отстойным говном, как сейчас. Сейчас они ни для чего нормального не годятся - так, разве что тупые интерфейсики кроссплатформенные лепить… Но я против кроссплатформы: такая универсальность всегда приводит к ограничениям и излишествам. Что мы прекрасно и наблюдаем в культяпках.
0
фрилансер
 Аватар для Алексей1153
6506 / 5753 / 1134
Регистрация: 11.10.2019
Сообщений: 15,402
23.01.2022, 17:20
Eddy_Em, почему же у меня (и у многих других) всё прекрасно и быстро работает?
0
Нарушитель
447 / 888 / 106
Регистрация: 23.11.2021
Сообщений: 5,209
Записей в блоге: 19
23.01.2022, 17:27
Алексей1153, это у тебя самоубеждение работает. А фактически - нет.
0
9991 / 2963 / 497
Регистрация: 05.10.2013
Сообщений: 8,135
Записей в блоге: 243
23.01.2022, 17:27
Igor3D, в ближайшее время я буду занят этой игрой. Играбельную демку опубликую в разделе Бета-тестирование. Может она будет с мультиплеером. Не знаю, сколько времени уйдёт, не делал ещё физику по сети, но у меня есть хороший пример под рукой: Real Time Multiplayer in HTML5. Там описано, как делать на вебсокетах и Node.js на основе, как это сделано в движке Source компании Valve в игре Counter-Strike и других их сетевых проектах: Networking of the Source Engine from Valve Software. В статье по вебсокетам делается по два цикла на клиенте и сервере. Один цикл - это цикл физики, который запущен на клиенте и сервере, это сама игра, этот цикл работает с фиксированным интервалом 15 миллисекунд (66 раз в секунду). Второй цикл на клиенте - это цикл отрисовки. На сервере второй цикл - это цикл отправки сообщений клиентам для синхронизации физики с сервером с интервалом 45 миллисекунд (22 раза в секунду). На клиенте движение по клавишам происходит сразу (предсказание клиента), ещё клиент принимает данные позиций других клиентов, чтобы интерполировать их позиции для плавной их анимации движения. Я собрал из статьи эту демку и разместил на бесплатном хостинге Heroku: https://battle-world.herokuapp.com/?debug В ней для каждой пары клиентов создаётся отдельная комната. Можете запустить в разных вкладках браузера, чтобы управлять обоими клиентами. Справа есть панель управления, где можно менять параметры, например, можно отключить "предсказание клиента" ("client prediction") и посмотреть, как будет работать. Не отвечайте на это сообщение, потом.



Миниатюры
0
фрилансер
 Аватар для Алексей1153
6506 / 5753 / 1134
Регистрация: 11.10.2019
Сообщений: 15,402
23.01.2022, 17:29
Eddy_Em, логика просто огонь
0
53 / 7 / 1
Регистрация: 06.10.2020
Сообщений: 221
23.01.2022, 17:38  [ТС]
Цитата Сообщение от alecss131 Посмотреть сообщение
GLFW это библиотека для создания окна и обработки ввода, не только OpenGL, но и еще Vulkan и OpenGL ES, кросплатформенная. Без нее создавать окно либо средствами ОС (winapi под виндой, что еще большая боль), либо использовать похожие библиотеки, например SFML, SDL
glew glu glut freeglut это устаревшие библиотеки, не рекомендованные к использованию
Glad библиотека загрузчик функций OpenGL, без нее или подобных руками грузить (на винде опять винапи и надо знать что и как)
Glm библиотека для математики, без нее придется разбираться в линейной алгебре и писать все руками
Спасибо! Единственный ответ, который мне помог!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.01.2022, 17:38

Как определить, существует ли найденный компонент на форме или не существует?
Как определить, существует ли найденный(с помощью FindComponent) компонент на форме или не существует?

Определить существует ли треугольник с такими длинами сторон и, если существует, будет ли он прямоугольным
помогите проверить правильно ли составил программу. т.к на семерке проверить возможности нет ( CLS DIM SHARED X#, Y#, Z#, A% ...

Существует треугольник со сторонами длиной a, b, c и, если существует, то найти его периметр и площадь
Помогите решить задачи на языке Паскаль. Дело в том что это задали на практике в колледже, когда меня не было потому, что я болел и...

Visual Studio 2017 существует только 32-битная или 64-х тоже в природе существует?
Хочу скачать новую студию и поиграться немного. А потом уже принять решение о том, ставить ли на работе ее. На всех торрент-трекерах пишут,...

Выяснить, существует ли треугольник с длинами сторон x, y, z, если существует, то определить его тип
Здравствуйте пользователи этого форума !Необходима срочная помощь в решении семестровых задач по программированию, среда CODEBLOCKs язык С...


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

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