티스토리 뷰

목차

    반응형

    OpenGL ES 3.1 Tutorial, Color Line 예제 (Qt 프로그래밍)


    OpenGL ES Color Line 예제[OpenGL ES 3.1 Tutorial] Qt 프로그래밍


    작업 환경

    - Ubuntu 14.04

    - OpenGL ES 3.1

    - Qt 5.3

    - ARM Cortex A-15



    ARM용 보드에서 Opengl ES를 설치하면 예제 폴더가 생성됩니다.

    이하 소스는 기본 예제를 수정한 내용입니다.


    1. 버전 설정

    저는 OpenGL ES 3.1을 사용하기에 setVersion() 함수에 3과 1을 넘겼습니다.


    1
    2
    3
    4
    5
    6
    7
    8
    9
    void Widget::start()
    {
        QSurfaceFormat fmt;
     
        fmt.setVersion(31); // ES 3.1
        fmt.setProfile(QSurfaceFormat::NoProfile);
        fmt.setOption(NULL);
        fmt.setRenderableType(QSurfaceFormat::OpenGLES);
    }
    cs


    2. 라인과 색상 초기화

    OpenGL ES 3.1 기본 코드에 보면 좌표와 색상을 설정하는 부분이 있습니다.


    라인이 총 4개이니 좌표는 5개가 필요합니다. 그리고 각 좌표에 이르는 동안 그라데이션에 필요한 색상도 필요하죠.


    원하는 색상과 위치로 설정해 보세요.


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    static GLfloat vertices[] = {
        0.0f, 0.707f,
        -0.5f, -0.5f,
        0.5f, -0.5f,
        0.2f, 0.907f,
        -0.7f, -0.7f
    };
     
    static GLfloat colors[] = {
        1.0f, 0.0f, 0.0f,
        1.0f, 1.0f, 1.0f,
        1.0f, 1.0f, 1.0f,
        0.0f, 1.0f, 0.0f,
        1.0f, 1.0f, 1.0f
    };
    cs


    3. 메모리 할당


    1
    2
    3
    4
    5
    m_vbo.create();
    m_vbo.bind();
    m_vbo.allocate(vertices, sizeof(vertices) + sizeof(colors));
    m_vbo.write(sizeof(vertices), colors, sizeof(colors));
    m_vbo.release();
    cs


    vbo를 생성하고 메모리를 할당해 줍니다.


    일반 라인에 색상을 입혀야 하니 OpenGL ES 3.1에서 allocate() 할 땐 좌표와 색상 모두의 사이즈를 합친 형태가 되어야 합니다.


    Opengl es 3.1 tutorial[Qt 프로그래밍 그래픽 예제]


    4. 실제로 그리기


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    void RenderWindow::render()
    {
        if (!m_context->makeCurrent(this)) {
            emit error(tr("makeCurrent() failed"));
            return;
        }
        .....
        .....
        .....
        f->glDrawArrays(GL_LINE_STRIP, 05);
    cs


    Render() 함수는 실제로 그리는 데 필요한 함수입니다.


    이미 3번 사항에서 메모리 할당을 끝냈기 때문에 glDrawArrays() 함수만 호출해주면 됩니다.


    OpenGL ES 3.1 Tutorial, Color Line 예제 (Qt 프로그래밍)

    반응형