2012-10-31 4 views
0

다각형을 반복적으로 그려야합니다. 예를 들어, 저는 8 코너가있는 다각형을 그려보고 싶습니다. 첫 번째 줄을 GL_LINES으로 그려야하고 두 번째 줄은 동일한 길이와 그 사이에 135°의 각도로 그립니다. 세 번째 줄 또한 두 번째 줄에 135°의 각도를 갖습니다. 루프를 만들고 싶습니다. 그것을 렌더링하는 방법을 모르겠다. 접근 방법이 있지만 제대로 작동하지 않습니다. 라인 n-1GL_LINES 및 선간 각도로 OpenGL 드로잉 다각형

두 번째 점은 n의 첫 번째 점해야한다 등등 ... 끝에 , 나는 닫힌 다각형을 얻을 필요가있다. 마지막 줄의 마지막 점은 첫 번째 줄의 첫 번째 점이어야합니다.

+1

"나는 접근 방식을 가지고 있지만, 제대로 작동하지 않습니다. "... 가지고있는 것을 게시하십시오. – genpfault

답변

1

자동으로 첫 번째로 마지막 정점을 연결합니다 사용 GL_LINE_LOOP : 당신이 GL_LINES에 죽은-설정하는 경우

#include <GL/glut.h> 
#include <cmath> 

void glPolygon(unsigned int sides) 
{ 
    if(sides < 3) return; 

    const float PI = 3.14159; 
    const float step = (2 * PI)/static_cast<float>(sides); 

    glBegin(GL_LINE_LOOP); 
    for(unsigned int i = 0; i < sides; ++i) 
    { 
     glVertex2f(cos(i * step), sin(i * step)); 
    } 
    glEnd(); 
} 

void display() 
{ 
    glClear(GL_COLOR_BUFFER_BIT); 

    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    double ar = glutGet(GLUT_WINDOW_WIDTH)/(double)glutGet(GLUT_WINDOW_HEIGHT); 
    glOrtho(-2 * ar, 2 * ar, -2, 2, -1, 1); 

    glMatrixMode(GL_MODELVIEW); 
    glLoadIdentity(); 

    glColor3ub(255, 0, 0); 
    glPolygon(8); 

    glutSwapBuffers(); 
} 

int main(int argc, char **argv) 
{ 
    glutInit(&argc, argv); 
    glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE); 
    glutInitWindowSize(640, 480); 
    glutCreateWindow("Polygons"); 
    glutDisplayFunc(display); 
    glutMainLoop(); 
    return 0; 
} 

이 작품 :

void glPolygonLines(unsigned int sides) 
{ 
    if(sides < 3) return; 

    const float PI = 3.14159f; 
    const float step = (2 * PI)/static_cast<float>(sides); 

    glBegin(GL_LINES); 
    for(unsigned int i = 0; i < sides; ++i) 
    { 
     unsigned int cur = (i + 0) % sides; 
     unsigned int nxt = (i + 1) % sides; 
     glVertex2f(cos(cur * step), sin(cur * step)); 
     glVertex2f(cos(nxt * step), sin(nxt * step)); 
    } 
    glEnd(); 
} 
+0

많은 도움을 주셔서 감사합니다. gl_line_loop을 사용하여 폴리곤을 매우 쉽게 그릴 수 있습니다. 내 문제는 첫 번째 선 (첫 번째 두 정점) 그리기 다각형의 방향을 결정할 수 있도록 예 : glVertex2f (-. 5, 0.5); glVertex2f (1.0, 1.0); 그리고 다각형에 대한 루프를 렌더링하십시오 – Roya

+0

안녕하세요 도와주세요 ............ – Roya

+0

첫 번째'for'-loop의 처음 두 반복을 가져 가면됩니다. 그러면 다각형의 처음 두 점이 생깁니다. – genpfault

관련 문제