Форум программистов
 
Регистрация на форуме тут, о проблемах пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль

Купить рекламу на форуме 15-35 тыс рублей в месяц

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail


Оплата за обучение в Kata Academy только после твоего трудоустройства в IT, начни карьеру Middle Java-разработчика


Ответ
 
Опции темы Поиск в этой теме
Старый 07.12.2020, 22:49   #1
Urcaserem
 
Регистрация: 12.09.2020
Сообщений: 8
По умолчанию базовый код для OpenGL

Здравствуйте! Поделитесь, пожалуйста базовым кодом для OpenGL с++ , который открывается в main.cpp в Code::Blocks
И, если не трудно, прокомментируйте что там происходит...

Последний раз редактировалось Urcaserem; 07.12.2020 в 22:53.
Urcaserem вне форума Ответить с цитированием
Старый 17.12.2020, 22:55   #2
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,316
По умолчанию

Я могу только в среде Qt Creator с использованием фреймворка Qt. В Qt есть функции обёртки над OpenGL, что упрощает программирование. Например, в Qt есть своя библиотека для трансформаций объектов: перенос, поворот объекта вокруг заданной оси, задание размера объекта. Эта библиотека называется QMatrix4x4. Она встроена в Qt. Например, там можно задать размер объекта на плоскости, задав scale по X и Y:

Код:
    m_modelMatrix.scale(50.f, 50.f, 1.f);
Там можно нарисовать треугольник:

main.cpp

Код:
// Add to .pro file: win32: LIBS += -lopengl32

#ifdef _WIN32
#include <windows.h>
extern "C" __declspec(dllexport) DWORD NvOptimusEnablement = 0x00000001;
extern "C" __declspec(dllexport) DWORD AmdPowerXpressRequestHighPerformance = 0x00000001;
#endif

#include <QApplication>
#include <QOpenGLWidget>
#include <QOpenGLShaderProgram>
#include <QOpenGLBuffer>

class Widget : public QOpenGLWidget {
    Q_OBJECT
public:
    Widget(QWidget *parent = nullptr) : QOpenGLWidget(parent) {
        setWindowTitle("Qt, OpenGL 3.3");
        resize(268, 268);
    }
private:
    QOpenGLShaderProgram m_program;
    QOpenGLBuffer m_vertPosBuffer;

    void initializeGL() override {
        glClearColor(0.5f, 0.8f, 0.7f, 1.f);
        const char *vertShaderSrc =
                "#version 330 core\n"
                "in vec3 aPosition;"
                "void main()"
                "{"
                "    gl_Position = vec4(aPosition, 1.0);"
                "}";
        const char *fragShaderSrc =
                "#version 330 core\n"
                "out vec4 fragColor;"
                "void main()"
                "{"
                "    fragColor = vec4(0.5, 0.2, 0.9, 1.0);"
                "}";
        m_program.addShaderFromSourceCode(QOpenGLShader::Vertex, vertShaderSrc);
        m_program.addShaderFromSourceCode(QOpenGLShader::Fragment, fragShaderSrc);
        m_program.link();
        m_program.bind();
        float vertPositions[] = {
            -0.5f, -0.5f, 0.f,
            0.5f, -0.5f, 0.f,
            0.f, 0.5f, 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);
    }
    void paintGL() override {
        glClear(GL_COLOR_BUFFER_BIT);
        glDrawArrays(GL_TRIANGLES, 0, 3);
    }
    void resizeGL(int w, int h) override {
        glViewport(0, 0, w, h);
    }
};

#include "main.moc"

int main(int argc, char *argv[]) {
    QApplication a(argc, argv);
    Widget w;
    w.show();
    return a.exec();
}
8Observer8 вне форума Ответить с цитированием
Старый 18.12.2020, 13:56   #3
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,316
По умолчанию

Нужно отметить, сначала OpenGL был нешейдерный до 2004. В 2004 появился шейдерный. В 2010 функции нешейдерного OpenGL (например, glBegin, glEnd и т.д.) были объявлены не рекомендованными к использованию (deprecated). У OpenGL появилось два профиля - основной (Core) и профиль для совместимости (Compatibility). glBegin/glEnd удалили из Android и iOS, а также не стали реализовывать на WebGL. Моё мнение, что нужно сразу изучать шейдерный. Одна из самых лучших книг по введению в шейдеры, матрицы и т.д.: WebGL. Программирование трехмерной графики Здесь примеры: Небольшие примеры на WebGL OpenGL и WebGL - это одно и тоже. Просто в книге очень хорошо объяснено, что такое шейдеры и как они работают. Объяснено на очень доступном языке. Примеры легко переводятся на C++ и на любой другой язык, который поддерживает работу с OpenGL.

Последний раз редактировалось 8Observer8; 18.12.2020 в 14:00.
8Observer8 вне форума Ответить с цитированием
Старый 18.12.2020, 20:38   #4
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,316
По умолчанию

Надеюсь, вы выберите Qt C++, потому что он даёт множество полезных вещей. Если вы его выберете для OpenGL, то ещё скину вам короткий пример, как выводить картинку (то есть текстуру) на OpenGL и Qt C++: Вывод картинки (текстуры) на OpenGL 3.3 и Qt C++ с плавающем диапазоном координат по оси X

8Observer8 вне форума Ответить с цитированием
Старый 05.12.2021, 20:03   #5
Urcaserem
 
Регистрация: 12.09.2020
Сообщений: 8
По умолчанию

8Observer8, спасибо большое!
Urcaserem вне форума Ответить с цитированием
Ответ
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Шейдеры в OpenGL для начинающих. _PROGRAMM_ Gamedev - cоздание игр: Unity, OpenGL, DirectX 12 21.12.2020 23:43
Доброго времени суток,помогите пожалуйста написать код для создания каталога товаров и код для продажи товара на питоне. Illorion Python 2 10.06.2019 18:50
Доброго времени суток,помогите пожалуйста написать код для создания каталога товаров и код для продажи товара. Illorion Python 2 06.06.2019 09:51
[C] Объяснить код код для определения пятизначного палиндром числа raider21 Помощь студентам 7 01.02.2017 17:23
Посоветуйте учебник для изучения OpenGL. spamer Общие вопросы Delphi 7 23.03.2009 22:46

Реклама для незарегистрированных, регистрация на форуме