2012-11-17 11 views
2

저는 본질적으로 b- 스플라인 곡선 그리기 연습 인 OpenGL 프로젝트에서 작업 해 왔습니다. 내 프로그램은 오류를 반환하지 만 커브는 표시되지 않습니다.OpenGL에서 B- 스플라인 곡선 렌더링

'좌표'라는 이름의 길이 (13)의 제어 포인트의 배열을 지정해, (자신이 모든 화면에 볼 수 있습니다 제어 점)이 내 코드입니다 :

"NofU는"혼합 기능을 나타냅니다
glBegin(GL_LINE_STRIP); 

float x=0; 
float y=0; 
float z=0; 
for (double u = 3; u <= 14; u+=0.1){ 

    for (int i = 1; i <=13; i++){ 
     x += NofU(u,i)*coords[i].x; 
     y += NofU(u,i)*coords[i].y; 
     z += NofU(u,i)*coords[i].z; 
    }//for 

}//for 

glVertex3f(x, y, z); 

glEnd(); 

: 나는 인쇄 문을 시도 할 때

double NofU(double u, int i){ 

if (u < i) 
    return 0; 
else if (u < i+1) 
    return (1/6)*pow(u,3); 
else if (u < i+2) 
    return (1/6)*((-3)*pow(u,3)+3*pow(u,2)+3*u+1); 
else if (u < i+3) 
    return (1/6)*(3*pow(u,3)-6*pow(u,2)+4); 
else if (u < i+4) 
    return (1/6)*pow((1-u),3); 
else 
    return 0; 

}//NofU 

, 나는 좌표 값 중 하나를 미친 듯이 크고 작은 끝낼, 아니면 그냥 0

답변

2

어, 당신은 하나의 glVertex3f이 glBegin/End 블록 내부에서 호출하십시오. 그래서 당신은 하나의 포인트 만 가진 라인 스트립을 그려야합니다. 실제로는 할 수 없습니다. (실제로 OpenGL이 오류를보고하는지 여부는 확실하지 않습니다.)

희망이 있습니다.

+0

그래, 그게 내 바보 같았다. 나는 정점을 루프 내부로 옮겼고 이제는 작동합니다. 지금 다른 문제가 있지만 다른 질문을 기다려야합니다. 답변 해주셔서 감사합니다. – JMcMinn

0

B- 스플라인 계산 기능도 확인합니다. 내 참조 (고급 애니메이션 및 렌더링 기법, 와트 & 와트)는 두 개의 u 값을가집니다. 대문자에는 0부터 n까지의 범위에 해당하는 전역 U가 있습니다. 이는 소문자 u에 해당합니다. 그러나 기본 함수 (소문자)의 경우 u는 0 .. 1 범위에 있어야합니다. 코드에서 fmod (u, 1)가됩니다. 나는 당신이 NoFu의 모든 진술에서 그것을 사용하면 더 나은 답을 얻을 것이라고 생각합니다.

+0

감사합니다. 내 코드가이 질문을 올린 후 몇 가지 변화가 있었는데, 지금은 내 형식이 당신이 언급 한 것과 더 가깝게 일치합니다. – JMcMinn

관련 문제