본문 바로가기
C++ 200제/코딩 IT 정보

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

by vicddory 2018. 5. 10.

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 프로그래밍)

댓글