2011-09-29 6 views
1

일반적으로 glOrtho()와 같은 코드 조각에서 OpenGL 함수가 수행하는 작업을 확인하고자합니다.누군가이 코드가 무엇을하는지 명확하게 설명 할 수 있습니까? - OpenGL & SDL

나는 그들이 의미하는 바를 자세히 조사하려고 노력했지만 주위를 둘러 보았지만 코드에 대한 좋은 설명을 찾는 데 어려움이 있습니다. SDL 코드는 내가 괜찮아.

누군가 gltranslatef()에 대해 잘 설명 할 수 있는지 궁금합니다.

bool init_GL() 
{ 
    glClearColor(0, 0, 0, 0); 
    //Set projection 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    glOrtho(0, SCREEN_WIDTH, SCREEN_HEIGHT, 0, -1, 1); 
    //Initialize modelview matrix 
    glMatrixMode(GL_MODELVIEW); 
    glLoadIdentity(); 
    //If there was any errors 
    if(glGetError() != GL_NO_ERROR) 
     return false; 
    return true; 
} 

bool init() 
{ 
    if(SDL_Init(SDL_INIT_EVERYTHING) < 0) 
     return false; 
    //Create Window 
    if(SDL_SetVideoMode(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP, SDL_OPENGL) == NULL) 
     return false; 
    //Initialize OpenGL 
    if(init_GL() == false) 
     return false; 
    //Set caption 
    SDL_WM_SetCaption("OpenGL Test", NULL); 
    return true; 
} 

이 코드는 lazyfoo 자습서에서 가져 왔지만 많은 코드를 설명하지는 않습니다.

도움을받을 수있는 사람에게 크게 감사드립니다.

+1

http : //www.opengl.org/sdk/docs/man/xhtml/glOrtho.xml, http://www.opengl.org/sdk/docs/man/xhtml/glTranslate.xml –

+0

http://www.sdltutorials.com/sdl-opengl- 튜토리얼 - 기초 – YAHOOOOO

+0

Viktor 전에 내가 본 튜토리얼을 보았지만, 괜찮 았지만 나에게는 완전히 정리하지 못했다. YAHOOOOO 나는이 자습서를 검색하는 동안 결코 분노를 느끼지 않았다. 그들은 좋아 보인다. 두 분 모두 도와 주셔서 감사합니다. –

답변

1

기본적으로 glOrtho와 glTranslate는 현재 렌더링 행렬에 곱하는 행렬을 생성한다고 말할 수 있습니다. 최종 렌더링 행렬은 조명, 도려 내기, 원근감에 영향을주는 장면의 모든 정점을 변환하는 데 사용됩니다. 결국,이 모든 행렬은 객체가 화면에 렌더링되는 방식을 제어합니다.

이들을 다른 매트릭스 함수와 함께 사용하면 장면의 객체를 크기 조절, 회전, 변환 할 수 있으며 직각 (평행) 투영 또는 원근 투영을 사용해야하는지 제어 할 수 있습니다. 당신이 여기에 읽을 수 있습니다

glOrtho:

glOrtho는 평행 투영을 생성하는 변환을 설명합니다. 현재 매트릭스 (glMatrixMode 참조)이 매트릭스 곱한 결과는 현재 행렬

gltranslatef 대체된다

glTranslate가 (X, Y, Z)에 의해 변환을 생성한다. 현재 매트릭스 ( glMatrixMode 참조) 이 번역 매트릭스

곱하지만 생각 당신은 정말 OpenGL을 배우고, 재미가 그렇게 가지고, 튜토리얼을 따라 이론, 그래픽 후속하려면 프로그래밍은 독자적인 세계의 비트입니다.

0

OpenGL을 사용하는 진정한 초보자 인 것 같습니다. 나는 모든 것을 매우 잘 설명하는 "OpenGL Super Bible"이라는 책 (http://www.starstonesoftware.com/OpenGL/ 참조)을 가지고 있으며 OpenGL을 배우는 데 많은 도움이되었습니다.

내가 당신에게 glOrthoglTranslatef을 설명 할 수 있지만, 하루에 당신은 glRotatefgluPerspective, glBegin, glClear, glFlush, glVertex3f 등 등을 설명을 필요로하기 위하여려고하고있다 그리고 당신은 여기 질문을 유지할 수 없습니다.

제 제안은 멋진 OpenGL 책 (OpenGL 슈퍼 성경과 같은)을 사서 책으로 배우기 시작하는 것입니다.

예를 들어 변형 섹션에서 this을 볼 수도 있지만 충분히 읽었는지 모르겠다.이 부분은 OpenGL의 초기 버전에 있지만 아이디어를 얻기 시작할 때만 유용합니다. 현대 OpenGL에서, 당신은 그렇게 프로그래밍하지 않을 것입니다.

한마디의 조언으로, 현대 OpenGL에서 OpenGL 1.x의 일반적인 관행은 더 이상 사용되지 않습니다. Google을 검색하여 NeHe의 웹 사이트에 올랐다면 해당 웹 사이트에서 배운 내용을 기억하면 OpenGL의 최신 버전으로 이동할 때를 잊어 버릴 수 있습니다.

7

나는 당신을 위해 그것을 무너 뜨리는 것 :

bool init_GL() 
{ 

내 말은이 기능, init_GL이 나쁜 스타일입니다. 모두가 무엇을 실제로 그리기 기능

glClearColor(0, 0, 0, 0); 

glClearColor는 프레임 버퍼가 채워집니다 색상을 설정에 속한 (cleard)을 GL_COLOR_BUFFER_BIT 세트 glClear를 호출 할 때.

//Set projection 
    glMatrixMode(GL_PROJECTION); 

glMatrixMode는 OpenGL 행렬 조작 함수가 적용되는 행렬을 전환합니다. OpenGL은 행렬 "Projection", "Modelview", "Texture"및 "Color"를 알고 있습니다. 마지막 두 개는 거의 만지지 않습니다.

glLoadIdentity(); 

로드 ID는 매트릭스 스택의 현재 위치에 단위 매트릭스를 넣습니다. 벡터로 곱한 항등 행렬은 매우 동일한 벡터를 산출합니다.

glOrtho(0, SCREEN_WIDTH, SCREEN_HEIGHT, 0, -1, 1); 

glOrtho는 orthographic projection 행렬로 항등 행렬을 곱합니다. 정사영 또는 아핀 원근법과 같은 일부 투영법은 선형 전송으로 설명 할 수 있습니다. 선형 변환은 행렬로 나타낼 수 있습니다. 어떤면에서는 프로젝션 매트릭스를 OpenGL 카메라의 "렌즈"라고 생각할 수 있습니다 (OpenGL에는 카메라가 없습니다!).

//Initialize modelview matrix 
    glMatrixMode(GL_MODELVIEW); 
    glLoadIdentity(); 

여기서 매트릭스 모드는 Modelview 매트릭스로 전환됩니다. Modelview 행렬은 세계에 객체를 배치하고 (모델 -), "카메라"(-view, 따라서 modelview)를 기준으로 세계를 움직이는 데 사용됩니다.

//If there was any errors 
    if(glGetError() != GL_NO_ERROR) 
    { 
     return false; 
    } 

이 오류 검사 코드가 잘못되었습니다. OpenGL에서는 GL_NO_ERROR를 반환 할 때까지 루프에서 glGetError를 호출해야합니다.

return true; 
} 

bool init() 
{ 

    if(SDL_Init(SDL_INIT_EVERYTHING) < 0) 
    { 
     return false; 
    } 

SDL 라이브러리를 초기화 할 수 있으므로 사용할 수 있습니다. (A 윈도우 그래픽 시스템에서, 벌거 벗은 프레임 버퍼에서 작동하는 경우는 이름에서 알 같은 비디오 모드를 설정하지 않을 경우) 어쩌면 다른 디스플레이 해상도로 비디오 모드를 변경

//Create Window 
    if(SDL_SetVideoMode(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP, SDL_OPENGL) == NULL) 
    { 
     return false; 
    } 

SDL_SetVideoMode은 (만약 윈도우를 작성합니다 전체 화면 모드에서) OpenGL 컨텍스트를 만듭니다.

//Initialize OpenGL 
    if(init_GL() == false) 
    { 
     return false; 
    } 

    //Set caption 
    SDL_WM_SetCaption("OpenGL Test", NULL); 

마지막으로이 항목은 창 제목을 설정합니다.

return true; 
} 

지금까지 아무 것도 렌더링되지 않습니다. 또한이 프로그램에는 이벤트 루프가 없으므로 화면이 깜박이며 사라지고 프로그램이 종료됩니다.

+0

+1 아주 잘 했어. –

관련 문제