네희 튜토리얼 - 너의 첫 번째 다각형

7925 단어 자습서
원문: Your First Polygon
 
1절에서 나는 OpenGL 창을 만드는 방법을 설명했다.이 절에서 나는 어떻게 삼각형과 사각형을 만드는지 설명할 것이다.저희가 GL로...TRIANGLES를 사용하여 삼각형을 생성하고 GLGUADS는 사각형을 생성합니다.
첫 번째 코드의 DrawGLScene 함수에 추가합니다.나는 다음에 이 함수의 전체 코드를 다시 제시할 것이다.만약 당신이 이전 코드에서 수정하려고 한다면, 당신은 직접 다음 코드로 바꾸거나, 이전 코드에 없는 부분을 추가할 수 있습니다.
int DrawGLScene(GLvoid)                         // Here's Where We Do All The Drawing

{

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);     // Clear The Screen And The Depth Buffer

    glLoadIdentity();                       // Reset The View

 
glLoadIdentity 함수를 호출할 때, 앞부분의 동작은 시각을 화면 가운데로 되돌릴 뿐입니다. 사실은 X축이 왼쪽에서 오른쪽으로, Y축이 위에서 아래로, Z축이 화면 외부에서 내부로 이동하는 것입니다.
화면의 중간은 X, Y축의 0.0f이다.왼쪽은 마이너스다.오른쪽은 정값입니다.화면의 맨 위로 이동하는 것은 양수이고, 밑으로 이동하는 것은 음수이다.화면의 깊은 곳으로 이동하는 것은 마이너스이고, 보는 사람에게 이동하는 것은 플러스이다.
glTranslatef(x, y,z)는 X, Y 및 Z축을 따라 이동합니다.다음은 X축에서 1.5개의 단위를 왼쪽으로 이동한 것이다.그것은 Y축에서 이동하지 않고 화면 내부로 6.0개의 단위를 이동했다.실행할 때, 화면 사이로 이동하는 것이 아니라, 현재 화면의 위치에서 이동하는 것을 발견할 수 있습니다.
glTranslatef(-1.5f,0.0f,-6.0f);                 // Move Left 1.5 Units And Into The Screen 6.0

 
현재 우리는 화면의 왼손으로 이동해야 한다. 우리는 화면(-6.0)에 깊이 들어가는 시각을 충분히 설정해서 삼각형을 만드는 전체 장면을 볼 수 있다.
glBegin(GL TRIANGLES)은 삼각형을 그리기 시작한다는 뜻이고, glEnt() 함수는 OpenGL에 삼각형이 생성되었다는 것을 알려준다.보통 점 3개를 그리려면 GLTRIANGLES.대다수의 그래픽 카드는 삼각형을 그리는 것이 상당히 빠르다.네 점을 그리려면 GL 을 사용하세요.QUADS.내가 들은 것은 대부분의 비디오 카드는 백그라운드에서 삼각형 단위로 물체를 그린다고 한다.마지막으로 네 점 이상을 그릴 필요가 있다면 GLPOLYGON.
우리의 간단한 시범 프로그램에서 우리는 삼각형 하나만 그렸다.만약 우리가 두 번째 삼각형을 그려야 한다면, 우리는 직접 세 줄의 새로운 위치 코드를 원래의 세 줄 코드 뒤에 추가할 수 있다.이렇게 6줄 코드는 모두 glBegin(GL TRIANGLES)과 glEnd() 함수 사이에 중첩되어 있습니다.매번 세 개의 점을 그릴 때마다 이 두 함수로 한 번 포함하지 않아도 된다.사각형도 마찬가지다. 만약 당신이 만들고자 하는 모든 사각형의 위치를 알고 있다면, 모두glBegin (GL TRIANGLES) 과glEnd () 함수 사이에 끼워 넣을 수 있다.다른 한편, 다각형(GL POLYGON)은 임의의 점으로 구성될 수 있기 때문에 glBegin(GL POLYGON)과 glEnd() 사이에 몇 줄의 코드를 끼워 넣든 상관없다.
glBegin 함수 뒤의 첫 번째 줄은 다각형을 설정하는 첫 번째 점입니다.교점(glVertex)의 첫 번째 값은 X축이고, 두 번째 값은 Y축이며, 세 번째 값은 Z축이다.첫 번째 줄에서 우리는 X축과 Y축에서 이동하지 않고 Y축에서 한 단위만 이동한다.이것은 삼각형의 꼭대기 점이다.두 번째 교점(glVertex)은 X축에서 왼쪽으로, Y축에서 아래로 단위를 이동했다.이것은 삼각형의 왼쪽 하단의 점이다.세 번째 정점(glVertex)은 오른쪽으로 단위를 이동하고 아래로 단위를 이동합니다.이것은 삼각형의 오른쪽 하단의 점이다.glEnd () 함수는 OpenGL이 점을 완성했다고 알려 줍니다.그런 다음 채워진 삼각형이 표시됩니다.
glBegin(GL_TRIANGLES);                      // Drawing Using Triangles

    glVertex3f( 0.0f, 1.0f, 0.0f);              // Top

    glVertex3f(-1.0f,-1.0f, 0.0f);              // Bottom Left

    glVertex3f( 1.0f,-1.0f, 0.0f);              // Bottom Right

glEnd();                            // Finished Drawing The Triangle

 
현재 이미 삼각형이 화면 왼쪽에 표시되어 있는데, 우리는 오른쪽에 정사각형을 표시해야 한다.이 단계를 하기 위해서glTranslate 함수를 다시 호출해야 합니다.이번에는 오른쪽으로 이동하기 때문에 X는 정값이다.이전에는 이미 왼쪽으로 1.5개 단위를 이동했는데, 이번에는 오른쪽으로 1.5개 단위를 이동해야 한다.먼저 중간점에 도착한 다음에 오른쪽으로 1.5개의 단위를 이동한다는 뜻이다.그래서 모두 3.0개의 단위를 오른쪽으로 이동해야 한다.
glTranslatef(3.0f,0.0f,0.0f);                   // Move Right 3 Units

 
이제 정사각형을 만듭니다.GLQUADS.사각형은 말 그대로 네 변이 있는 다각형이다.사각형 특성(GL GUADS)은 사각형을 생성하는 데 가장 적합합니다.정사각형을 만드는 과정과 삼각형을 만드는 것은 매우 비슷하다.그냥 GL로...GUADS 대신 GLTRIANGLES, 정사각형의 네 번째 점을 나타내는 숫자 세트가 추가되었습니다.우리는 왼쪽 위, 오른쪽 위, 오른쪽 아래, 왼쪽 아래 (시계 방향) 의 순서로 그릴 것이다.시계 방향으로 그리면 정사각형이 뒷면으로 그려진다.우리가 본 사각형의 변이 실제로는 뒷면이라는 뜻이다.시계 반대 방향으로 물체를 그리는 것이야말로 우리를 향한 것이다.그러나 이런 것들은 당분간 중요하지 않다. 이것은 늦어야 주의해야 할 일이다.
    glBegin(GL_QUADS);                      // Draw A Quad

        glVertex3f(-1.0f, 1.0f, 0.0f);              // Top Left

        glVertex3f( 1.0f, 1.0f, 0.0f);              // Top Right

        glVertex3f( 1.0f,-1.0f, 0.0f);              // Bottom Right

        glVertex3f(-1.0f,-1.0f, 0.0f);              // Bottom Left

    glEnd();                            // Done Drawing The Quad

    return TRUE;                            // Keep Going

}

 
마지막으로 창/전체 화면 모드의 전환 단축키를 추가하고 창 제목을 추가합니다.
"//Create Our OpenGL Window"주석의 코드의 제목도 바꾸어야 한다는 것을 기억하세요.그렇지 않으면 '전체 화면' 창의 제목이 '창 모드' 의 제목과 달라집니다.
if (keys[VK_F1])                // Is F1 Being Pressed?

{

    keys[VK_F1]=FALSE;          // If So Make Key FALSE

    KillGLWindow();             // Kill Our Current Window

    fullscreen=!fullscreen;         // Toggle Fullscreen / Windowed Mode

    // Recreate Our OpenGL Window ( Modified )

    if (!CreateGLWindow("NeHe's First Polygon Tutorial",640,480,16,fullscreen))

    {

        return 0;           // Quit If Window Was Not Created

    }

}

좋은 웹페이지 즐겨찾기