2014-04-15 5 views
0

사인 곡선에 이동 점을 그리고 곡선의이 점에 접선과 법선을 그려야합니다. 나는 또한이 선들을 정상화하고 싶지만 이것이 나의 주요 관심사는 아니다.OpenGL - 탄젠트 및 사인 곡선에 법선을 그립니다.

지금까지 나는 나의 접선이 좋다고 생각하지만 정상을 그리는 방법을 찾을 수는 없습니다. 코드

#define SIN(A, y, x) A * sin(((2 * M_PI)/y) * x) 
#define COSDY(A, y, x) A * ((2 * M_PI)/y) * cos(((2 * M_PI)/y) * x) 

의 중간에 입력을 방지하기 두 정의를 그리고 그 내가 곡선의 접선 후 정상을 위해 할 도면입니다 : 여기

는 내가 지금까지 무엇을 가지고 :

glBegin(GL_LINE_STRIP); 

for (x = -1.f; x <= 1.f; x += 0.01) { 
    glVertex3f(x, SIN(1, 2, x), 1.f); 
} 

glEnd(); 

glPointSize(10.0); 
glBegin(GL_POINTS); 

glVertex3f(position, SIN(1, 2, position), 1.f); 

glEnd(); 
glPointSize(1.0); 

float dx = 1; 
float dy = COSDY(1, 2, position); 

float mag = sqrtf(dx * dx + dy * dy); 
dx /= mag; 
dy /= mag; 

glBegin(GL_LINES); 

glVertex3f(position, SIN(1, 2, position), 1.f); 
glVertex3f(position + dx, position + dy, 1.f); 

glEnd(); 

glBegin(GL_LINES); 

glVertex3f(position, SIN(1, 2, position), 1.f); 
glVertex3f(position + dy, position - 1/dx, 1.f); 

glEnd(); 

내가 말했듯이 탄젠트는 정상적으로 보였지만 정상적인 것은 아닙니다.

Bad normals

당신은 문제가이에 무엇을 볼 수 있습니까?

+0

나쁜 법선의 스크린 샷을 추가 할 수 있습니까? –

답변

1

접선 계산은 기본적으로 괜찮습니다. 그래도 그걸 그리는 방법을 이해하지 못합니다. (dx, dy)가 접선 벡터 인 경우 드로잉 코드가 이렇게 보이지 않아야합니까? 접선 벡터 인 (DX, DY) 어떤 경우에,

glVertex3f(position, SIN(1, 2, position), 1.f); 
glVertex3f(position + dx, SIN(1, 2, position) + dy, 1.f); 

는 법선 벡터에 대한 두 가지 옵션은 (DY, -dx) 및 (-dy, DX). 두 벡터의 스칼라 곱은 두 벡터가 직교 할 때 0이어야한다는 것을 기억하십시오. 평소 그리기 :

glVertex3f(position, SIN(1, 2, position), 1.f); 
glVertex3f(position + dy, SIN(1, 2, position) - dx, 1.f); 
+0

잘 부탁드립니다. 제 Y 좌표가 잘못되었다는 사실을 알지 못해서 그냥 덤벼 들었습니다 ... – Manny42