2013-07-07 7 views
0

제목에 설명 된대로 삼각형 목록을 사용하여 BSpline 패치를 테셀레이션하려고합니다.삼각형 목록 (OpenGL)을 사용하여 BSpline 패치 테셀레이션

정확히 어떻게 보이는지 정면에서 본 내 패치 이미지입니다.

patch front

내 문제는이 효과를주는 패치의 후면입니다 :

patch rear

당신은 삼각형의 이전 행이되고있는 새 행에 연결하는 볼 수 있듯이 그어진. 행의 끝 부분에 도달 할 때 인덱스 값을 1 씩 증가시키는 등의 문제를 피하기 위해 여러 가지 방법을 시도했습니다. 내가 찾을 수있는 유일한 빠른 수정은 각 행을 별도의 루프에 넣는 것입니다 (루프 행의 크기 때문에 루프 범위가 있음). 이는 직관적이지 않습니다.

void drawBSplinePatch1(std::vector<int>& sample_elements_out, const int samples) 
{ 
    for(int i = 0; i <= 379; i++) 
    { 
     // first triangle 
     sample_elements_out.push_back(i); 
     sample_elements_out.push_back(i + 1); 
     sample_elements_out.push_back(i + samples); 

     // second triangle 
     sample_elements_out.push_back(i + samples); 
     sample_elements_out.push_back(i + 1); 
     sample_elements_out.push_back(i + samples + 1); 
    } 
} 
+0

왜 행과 열에 별도의 루프가있는 것이 직관적이지 않습니까? 나 한테 똑바로 들리는데 ...? 사람들이 당신의 질문을 이해하기를 원한다면 아마도 루프를 게시해야합니다 ... –

+0

그것은 직관적이지 않습니다. 결국 하나의 파일에 허용되는 루프의 한계를 초과하는 100 개의 루프 이상으로 끝날 것입니다. . – user2484294

+0

그래서 루프를 중첩하지 않았습니까? 이 정확히 두 개의 중첩 된 루프를 기대하고있다. 어쩌면 작업 버전의 일부도 게시 할 수 있습니다. 이렇게하면 사람들이 좀 더 간결한 형식으로 이것을 작성하는 방법을 보여줄 수 있습니다. 현재 코드에서는 행 분리를위한 올바른 인덱스를 추측하기가 어렵습니다. –

답변

0

각 행, 예를 들면위한 쿼드 건너 뛰기 : 여기

내 패치의 드로잉 코드입니다 이렇게.

for(int i = 0; i <= 379; i++) 
{ 
    if (i % ROW_LENGTH != ROW_LENGTH - 1) { 
     // first triangle 
     sample_elements_out.push_back(i); 
     sample_elements_out.push_back(i + 1); 
     sample_elements_out.push_back(i + samples); 

     // second triangle 
     sample_elements_out.push_back(i + samples); 
     sample_elements_out.push_back(i + 1); 
     sample_elements_out.push_back(i + samples + 1); 
    } 
} 

두 개의 중첩 루프가 더 읽기 쉽습니다.

+0

대단히 고마워요! 이것은 잠시 동안 나의 두뇌를 열중시켜 왔습니다. – user2484294

+0

Np; 이 방법이 문제가 해결되지 않으면 대답을 올바른 것으로 간주하십시오. –