OpenGL 순환적으로 원(구)그리기 소스를 분석중인데 질문이 있습니다.

조회수 1548회
#define PI  3.1415926
#define No_theta    36
#define No_phi      18 


float theta, phi;
float delta_theta, delta_phi;
float start_theta, start_phi;

float Radius;

void Vertex_Generation(void)
{
    start_theta = 0.0;
    delta_theta = 2 * PI / No_theta; // 얼만큼 쪼갤건가? 2*PI = 2파이 라디안 즉,360도를 의미

    start_phi = -PI / 2.0;
    delta_phi = PI / (No_phi - 1);

    for (int j = 0; j < No_phi; j++)
    {   
        for (int i = 0; i < No_theta; i++)
        {
            theta = start_theta + i * delta_theta;
            phi = start_phi + j * delta_phi;
            ver[i][j].x = Radius * cos(phi) * cos(theta);
            ver[i][j].y = Radius * cos(phi) * sin(theta);
            ver[i][j].z = Radius * sin(phi);
            v_count++;
        }
    }
}

안녕하세요 OpenGL을 혼자 공부중인 학생입니다. 순환적 원(구)를 생성하는 방법의 소스를 혼자서 읽고있는데 이해가 잘안가는 부분이 있어 질문드립니다.

1.Vertex_Generation 이라는 함수의 의미. 이 함수가 정확히 어떤 기능을 하는 함수인지 감이 잘 안잡히네요. Generation 이라는걸 어떻게 해석해야 좋을지..본래 시대,세대 라는 뜻이지만 그런 뜻으로는 사용되지 않았다고 생각되는데..어떻게 해석해야할까요? 함수가 그 기능을 의미하는지라 함수의 이름만 알아도 이해하는데 도움이 될거같은데 잘모르겠습니다.

2. start_phi = -PI / 2.0; 와 delta_phi = PI / (No_phi - 1); 가 의미하는 바를 잘 모르겠습니다. 여기선 호도법을 이용하기때문에 start_phi 와 delta_phi가 각도를 의미하는 것같은데 어떤 역할을 하는지 잘모르겠습니다..혹시 잘 아신다면 답변좀 부탁드리겠습니다 감사합니다

  • Generation은 여기서 아마도 "생성"으로 번역해야 할거에요. 엽토군 2018.9.30 22:14

1 답변

  • 순환적으로 원그리기가 음 반복문을 통해 좌표를 만드는 것을 말씀하시는게 맞겠죠??(코드도 그렇게 보이고;;)

    우선 질문에 답변을 드리면

    1. Vertex_Generation 함수는 Vertex_Generate 라고 이해하시면 됩니다. 즉 버텍스를 생성하는 역할을 하고 있는 함수이죠. 그래픽 파이프라인으로 올릴 버퍼 자체를 생성하는 것은 아니고, 구를 이루는 하나의 버텍스(점)을 ver 배열의 Vector형식의 자료구조에 넣는 형식 같습니다.

    2. start_phi는 해당 구를 이루는 점을 구할때의 시작 각도, delta_phi는 PI(180도)를 얼마만큼의 각도로 쪼갤 것인가를 나타냅니다. start_phi에서 -PI를 한 이유는 -PI/2 -> PI/2 의 방향으로 순환하기 위해서이고, 이는 개발자의 의도에 따라 달라질 수 있습니다.(0~PI, -PI~0 이렇게 순환해도 구는 만들어집니다)

    위키에 보시면 https://ko.wikipedia.org/wiki/%EA%B5%AC%EB%A9%B4%EC%A2%8C%ED%91%9C%EA%B3%84 구면좌표계 관련한 문서가 있는데요, 삼각함수의 경우엔 좌표축을 어떻게 순환하느냐에 따라 공식은 달라질 수 있습니다. 위키는 x-y평면에서 위쪽 z축을 기준으로 theta값을 0~PI로 이동하면서 값을 구하는 방식이고, 올려주신 코드는 -y ~ y 축까지 phi값을 순환하고 x-z평면을 PI*2(360도) 돌면서 값을 구하는 수식 같네욤

    저도 이 분야 공부한지 별로 되진 않았습니다만, 전 위키를 참고해서 구를 만들어봤던 것 같습니다.

    추가로 처음부터 구를 연구하시는 것보다, 2차원인 원을 먼저 그려보신후에 구를 접근하면 축 하나만 더 추가되는 형태라 더 이해하기 쉬우실 겁니다.

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)