2012-07-04 5 views
1

이 간단한 프로그램은 미국 국기에서와 같이 번갈아 배치 된 13 개의 짝수 인 빨간색과 흰색 줄무늬를 그리도록 설계되었습니다.드로잉 2D 줄무늬

// A Simple OpenGL Project 
// Author: Michael Hall 
// 
// This C++ code and project are provided "as is" without warranty of any kind. 
// 
// Copyright 2010 XoaX - For personal use only, not for distribution 
// 
// Elaborated by me :) 

#include <glut.h> 

void DrawStripes(const int quantity) 
{ 
    glBegin(GL_QUADS); 

    for(int i=1; i <= quantity ; i++) 
    { 
     if(i%2) 
      glColor3f(1.0,0.0,0.0); 
     else 
      glColor3f(1.0,1.0,1.0); 

      glVertex2f(0,static_cast<float>(i-1)/static_cast<float>(quantity)); 
      glVertex2f(1.0,static_cast<float>(i-1)/static_cast<float>(quantity)); 

      glVertex2f(0,static_cast<float>(i)/static_cast<float>(quantity)); 
      glVertex2f(1.0,2*static_cast<float>(i)/static_cast<float>(quantity)); 
    } 
} 



void Draw() 
{ 
    glClear(GL_COLOR_BUFFER_BIT); 
    glColor3f(0.0, 0.0, 1.0); 
    DrawStripes(13); 


    glEnd(); 
    glFlush(); 
} 

void Initialize() 
{ 
    glClearColor(0.0, 0.0, 102.0/255.0, 0.0); 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0); 
} 

int main(int iArgc, char** cppArgv) 
{ 
    glutInit(&iArgc, cppArgv); 
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); 
    glutInitWindowSize(950,500); 
    glutInitWindowPosition(200, 200); 
    glutCreateWindow("Rough draft"); 
    Initialize(); 


    glutDisplayFunc(Draw); 
    glutMainLoop(); 

    return 0; 
} 

이 실제로 어떻게 보이는지 이것은 : final window 이유가있는 파란색 삼각형을 전경에? Draw/DrawStripes 함수 내에 "QUADS"만 지정했습니다.

답변

2

쿼드 정점을 잘못된 순서로 그릴 것이라고 생각합니다. 그들은 반 시계 방향이어야하지만, 당신은 '꼬인'쿼드를 그려야합니다.

for 루프에서 3 번째와 4 번째 버텍스를 바꿔보십시오.

3

파란색은 투명 색상에서 온다 : 세 번째 매개 변수는 맑은 색의 파랑 채널입니다

glClearColor(0.0, 0.0, 102.0/255.0, 0.0); 

있다. glClear (GL_COLOR_BUFFER_BIT)를 호출 할 때; 렌더링 대상을 선명한 색상으로 초기화합니다.

따라서 파란색은 전체 렌더 타겟을 덮지 않고 파란색 선명한 색상을 전달하는 정점에서 발생합니다. 이를 확인하려면 와이어 프레임을 활성화하십시오 (glPolygonMode (GL_FRONT_AND_BACK, GL_LINE);).

또한 왼쪽 상단, 왼쪽 하단, 오른쪽 하단, 오른쪽 상단 등 현명한 방식으로 그려야합니다. 그 결과 폴리곤이 정면을 향하게됩니다 (일반적으로은 뒷면면 제거를 피하기위한 것입니다).

왼쪽 상단 오른쪽 상단에 왼쪽 하단을 수행 한 다음 다각형을 "접는"순간에 본질적으로 4 분면을 뒤틀어 버립니다. 시계 방향으로 (오른쪽 아래와 왼쪽 아래로 반전) 순서대로 시도하고 여전히 폴리곤을 볼 수 있는지 확인하십시오 (뒷면면 제거가 켜져 있으면 안됩니다).

마지막으로 에만의 오른쪽 하단 Y 좌표를 2로 곱합니다. 이유는 무엇입니까? 그게 당신의 변형을 일으키는 원인입니다 (왜곡의 맨 위에). 직사각형을 만들기 위해 동일한 Y 좌표를 가진 두 개의 하단 정점이 있어야합니다 (오른쪽 아래와 왼쪽 아래 Y 좌표가 일치해야 함).

+0

나를 위해 비논리적 인 것처럼 보이지만 올바른 출력을 얻으려면 3 번째 및 4 번째 버텍스를 바꿔 쓰면 충분합니다. 나는 2로 곱하는 것과 아무런 차이가 없다는 것을 의미합니다. – 0x6B6F77616C74

+1

단지 차이가 ​​없다고해서 차이가 없다는 것을 의미하지는 않습니다. 비뚤어진 쿼드는 다음에 그릴 쿼드 뒤에 멋지게 숨길 것이므로 볼 수 없지만 쿼드 하나만 그리면 볼 수 있습니다. 당신은 내가 단지 보행자라고 말할 수 있습니다 : p –

관련 문제