철이의 컴노리
  • 안녕하세요!
  • KOTLIN
  • ANDROID
    • Architecture Components
      • 프로젝트에 추가하기
      • 데이터 바인딩 라이브러리
        • 시작하기
        • 레이아웃 및 바인딩 표현식
      • 라이프 사이클 처리
      • ViewModel
    • CameraX
      • CameraX 아키텍처
      • 구성
      • 미리보기
      • 이미지 분석
      • 이미지 캡처
      • 제조 업체 확장 기능
    • View
      • 커스텀뷰의 크기 정하기
    • JNI 튜토리얼
      • 1장. 저자 소개
      • 2장. Hello JNI
      • 3장. 메서드 등록
      • 4장. int 데이터형 값 주고 받기
      • 5장. boolean 데이터형 값 주고 받기
      • 6장. double 데이터형 값 주고 받기
      • 7장. float 데이터형 값 주고 받기
      • 8장. long 데이터형 값 주고 받기
      • 9장. short 데이터형 값 주고 받기
      • 10장. char 데이터형 값 주고 받기
      • 11장. byte 데이터형 값 주고 받기
      • 12장. JNI에서 문자열 다루기 1/3
      • 13장. JNI에서 문자열 다루기 2/3
      • 14장. JNI에서 문자열 다루기 3/3
      • 15장. 레퍼런스 이해하기
      • 16장. 배열 다루기 1/4
      • 17장. 배열 다루기 2/4
      • 18장. 배열 다루기 3/4
      • 19장. 배열 다루기 4/4
      • 20장. 중간 요약
      • 21장. 자바 클래스 찾기 1/2
      • 22장. 자바 클래스 찾기 2/2
      • 23장. 정적 메서드 찾기
      • 24장. 정적필드 찾기
      • 25장. 자바 클래스 인스턴스 생성하기
      • 26장. 자바 클래스 인스턴스 메서드 찾기
      • 27장. 자바 클래스의 인스턴스 필드 찾기
      • 28장. 네이티브 쓰레드 실행하기
  • Swift
    • What' New
      • Swift 5.0
        • Result 타입
        • Raw 문자열
        • 커스텀 문자열 보간
    • Codable
      • 커스텀 타입 인코딩 및 디코딩
  • iOS
  • OpenGL
    • OpenGL Tutorial
      • 1장. 저자 소개
      • 2장. OpenGL 윈도우 프레임웍 만들기 1편
      • 3장. OpenGL 윈도우 프레임웍 만들기 2편
      • 4장. 점그리기
      • 5장. 선 그리기
      • 6장. 다각형 그리기
      • 7장. 색 표현하기
      • 8장. 3차원 폴리곤 그리기
      • 9장. 투영변환
      • 10장. 이동, 회전, 크기 변환
      • 11장. 빛, 재질 표현하기
      • 12장. 텍스춰매핑
    • OpenGL ES Tutorial for iOS
      • 1장. 저자 소개
      • 2장. 튜토리얼 소개
      • 3장. OpenGL|ES 개발 환경 만들기
      • 4장. 뷰 배경색상 변경하기
      • 5장. 투영에 대해서 1/2
      • 6장. 투영에 대해서 2/2
      • 7장. 선분 및 삼각형 그리기
      • 8장. 색상칠하기
      • 9장. 텍스춰맵핑
      • 10장. 종횡비
      • 11장. 텍스춰 UV좌표
      • 12장. 텍스춰매핑 파라미터
      • 13장. 깊이버퍼
      • 14장. 원근투영
  • ENV
    • oh-my-zsh
      • 특정 git 폴더에서 zsh 이 느려질 때
  • Ubuntu
    • UEFI USB
    • nvidia driver
    • /dev/kvm on Android Studio
    • install oracle-jdk8
  • chromium
    • javap
Powered by GitBook
On this page

Was this helpful?

  1. OpenGL
  2. OpenGL Tutorial

7장. 색 표현하기

https://github.com/skyfe79/OpenGLTutorial

  • glColor3f()

  • glShadeModel()

  • GL_SMOOTH

  • GL_FLAT

OpenGL 에서의 색(color)은 세가지 색의 혼합으로 이루어진다. 그 세가지 색은 적색(RED), 녹색(GREEN), 청색(BLUE) 이고 흔히 부르는 RGB 이다. 컴퓨터에서 이 세가지 색으로 모든 색을 표현하는 것은 우리 인간의 눈이 이 세가지 색에 가장 민감하기 때문이다. 즉 이 세가지 색의 변화를 가장 잘 느낀다는 것이다. 아래는 OpenGL 에서 색을 나타내는 함수의 목록이다.

void glColor3b( GLbyte red, GLbyte green, GLbyte blue ) 
void glColor3d( GLdouble red, GLdouble green, GLdouble blue ) 
void glColor3f( GLfloat red, GLfloat green, GLfloat blue ) 
void glColor3i( GLint red, GLint green, GLint blue ) 
void glColor3s( GLshort red, GLshort green, GLshort blue ) 
void glColor3ub( GLubyte red, GLubyte green, GLubyte blue ) 
void glColor3ui( GLuint red, GLuint green, GLuint blue ) 
void glColor3us( GLushort red, GLushort green, GLushort blue ) 
void glColor4b( GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha ) 
void glColor4d( GLdouble red, GLdouble green, Ldouble blue, GLdouble alpha ) 
void glColor4f( GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha ) 
void glColor4i( GLint red, GLint green, GLint blue, GLint alpha ) 
void glColor4s( GLshort red, GLshort green, GLshort blue, GLshort alpha ) 
void glColor4ub( GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha ) 
void glColor4ui( GLuint red, GLuint green, GLuint blue, GLuint alpha ) 
void glColor4us( GLushort red, GLushort green, GLushort blue, GLushort alpha )
void glColor3bv( const GLbyte *v ) 
void glColor3dv( const GLdouble *v ) 
void glColor3fv( const GLfloat *v ) 
void glColor3iv( const GLint *v ) 
void glColor3sv( const GLshort *v ) 
void glColor3ubv( const GLubyte *v ) 
void glColor3uiv( const GLuint *v ) 
void glColor3usv( const GLushort *v ) 
void glColor4bv( const GLbyte *v ) 
void glColor4dv( const GLdouble *v ) 
void glColor4fv( const GLfloat *v ) 
void glColor4iv( const GLint *v ) 
void glColor4sv( const GLshort *v ) 
void glColor4ubv( const GLubyte *v ) 
void glColor4uiv( const GLuint *v ) 
void glColor4usv( const GLushort *v )

위의 함수들을 보면 정수형의 컬러값을 인자로 받는 함수와 부동소수형 컬러값을 인자로 받는 함수로 나눌 수 있다. 정수형은 컬러값을 0~255 값 즉 각 색깔마다 색을 256단계로 설정할 수 있다. 따라서 256256256 = 16777216 의 색을 표현할 수 있다. 부동소수형은 0.0 ~ 1.0 까지 컬러값을 설정할 수 있다. 0.0 과 1.0 의 사이의 수는 무한대이기 때문에 이론상으로는 무한대의 단계로 색을 표현할 수 있다. 정수형보다는 더욱 세밀하게 색을 표현할 수 있다는 것을 기억하면 될 것이다. 그리고 알파(alpha) 값이 있는데 이 것은 색의 투명도를 나타낸다.

BOOL eglSubWindow::InitGL(void)
{
    eglWindow::InitGL();

    glShadeModel(GL_SMOOTH);
    return TRUE;
}
void eglSubWindow::RenderGLScene(void)
{
    eglWindow::RenderGLScene();

    glTranslatef(0.0f, 0.0f, -3.0f);
    glBegin(GL_TRIANGLES);
        glColor3f(1.0f, 0.0f, 0.0f); //RED
        glVertex3f( 0.0f, 1.0f, 0.0f);
        glColor3f(0.0f, 1.0f, 0.0f); //GREEN
        glVertex3f(-1.0f,-1.0f, 0.0f);
        glColor3f(0.0f, 0.0f, 1.0f); //BLUE 
        glVertex3f( 1.0f,-1.0f, 0.0f);
    glEnd();
}

윗 코드의 실행 결과를 보면 색이 각 정점에서 시작해서 삼각형의 중심에서는 서로의 색이 고르게 혼합되어 있다. 이 것은 쉐이딩 모델을 설정하는 glShadeModel() 함수에 의해서 결정되는 것이다. 이 함수의 원형은 아래와 같다.

glShadeModel( GLenum mode )

mode 값으로는 GL_SMOOTH 와 GL_FLAT 이 있다. GL_SMOOTH 는 두 정점 간에 설정된 색을 부드럽게 이어주며 GL_FLAT 은 마지막 정점에 설정된 색으로 폴리곤의 내부를 채운다.

BOOL eglSubWindow::InitGL(void)
{
    eglWindow::InitGL();

    glShadeModel(GL_FLAT);
    return TRUE;
}
void eglSubWindow::RenderGLScene(void)
{
    eglWindow::RenderGLScene();

    glTranslatef(0.0f, 0.0f, -3.0f);
    glBegin(GL_TRIANGLES);
        glColor3f(1.0f, 0.0f, 0.0f); //RED
        glVertex3f( 0.0f, 1.0f, 0.0f);
        glColor3f(0.0f, 1.0f, 0.0f); //GREEN
        glVertex3f(-1.0f,-1.0f, 0.0f);
        glColor3f(0.0f, 0.0f, 1.0f); //BLUE 
        glVertex3f( 1.0f,-1.0f, 0.0f);
    glEnd();
}

쉐이딩 모델을 GL_FLAT 으로 설정하자 폴리곤의 내부가 마지막 정점에 설정된 청색으로 채워졌다.

Previous6장. 다각형 그리기Next8장. 3차원 폴리곤 그리기

Last updated 6 years ago

Was this helpful?