2011-11-01 3 views
2

GLUT를 사용하지 않고 OpenGL에서 토러스를 렌더링해야합니다. C# 및 Tao Framework 바인딩을 사용하고 있습니다. 다음 코드는 here에서 가져 왔습니다.GLUT를 사용하지 않고 OpenGL에서 텍스처 토러스를 그리는 방법은 무엇입니까?

private void DrawTorus() { 
     int numc = 100, numt = 100; 

     double TWOPI = 2 * Math.PI; 
     for (int i = 0; i < numc; i++) { 
      Gl.glBegin(Gl.GL_QUAD_STRIP); 
      for (int j = 0; j <= numt; j++) { 
       for (int k = 1; k >= 0; k--) { 

        double s = (i + k) % numc + 0.5; 
        double t = j % numt; 

        double x = (1 + 0.1 * Math.Cos(s * TWOPI/numc)) * Math.Cos(t * TWOPI/numt); 
        double y = (1 + 0.1 * Math.Cos(s * TWOPI/numc)) * Math.Sin(t * TWOPI/numt); 
        double z = 0.1 * Math.Sin(s * TWOPI/numc); 

        Gl.glVertex3d(2 * x, 2 * y, 2 * z); 
       } 
      } 
      Gl.glEnd(); 
     } 
    } 

이 코드는 원환 체를 그으나 이제는 그 위에 텍스처를 넣어야합니다. 텍스처 좌표에 these 수식을 사용하려하지만 R 및 r (내부 및 외부 각각의 반지름)에 사용할 것을 결정할 수 없습니다.

v = arccos (Y/R)/2pi 
u = [arccos ((X/(R + r*cos(2pi * v))] * 2pi 

그 코드를 이해하는 몇 가지 문제가, 나는 그것의 설명 혹은 대안, 의견보다 직관적 인 코드를 부탁드립니다. 어떤 도움을 많이 주시면 감사하겠습니다.

답변

3

우리

double x = (1 + 0.1 * Math.Cos(s * TWOPI/numc)) * Math.Cos(t * TWOPI/numt); 
double y = (1 + 0.1 * Math.Cos(s * TWOPI/numc)) * Math.Sin(t * TWOPI/numt); 
double z = 0.1 * Math.Sin(s * TWOPI/numc); 

분명 코드 화학식

X = (R + r cos (2 pv)) cos (2 pu) 
Y = r sin (2 pv) 
Z = (R + r cos (2 pv)) sin (2 pu) 

를 비교하면, X를 =의 X, Y = Z, Z = Y, R = 1, R = 0.1, 2 pv = s * TWOPI/numc2 pu = t * TWOPI/numt. 그런 다음

v = arccos (Y/R)/2p 
u = [arccos ((X/(R + r*cos(2 pv))]2p 

v = arcos (z/1)/TWOPI 
u = [arcos ((x/(1 + 0.1*cos(s * TWOPI/numc)]/TWOPI 

편집을 제공합니다

: 솔직히 말해서, 나는 ... 공식을 이해하기 위해 열심히 노력 코드를 읽기하지 않았다, 나는이 트릭을 할해야한다고 생각
u = (i + k)/(float)numc; 
v = t/(float)numt; 

+0

맞습니다. 나는 거기에 그 연결을 보지 못했습니다. 이것은 이제 정상적으로 작동하는 것 같습니다. 단지 v와 u가 정규화되지 않았습니다 (구간 [0, 1]이 아님). 나는 이상한 텍스쳐 맵핑을 얻고있는 것 같아요 (스크린 샷 참조 : http://www.shrani.si/f/1Z/wY/1YtmOwkg/scr.png). 이걸로 나를 도울 수 있니? – brozo

+0

@brozo - 잘하면이 작동합니다. – Ishtar

+0

당신이 제안한 수정 프로그램을 적용했지만 결과는 여전히 내가 원하는 바가 아닙니다. 적용된 수정 사항으로 텍스처가 원환 체의 바깥쪽에 뻗어있는 것처럼 보입니다 (스크린 샷 참조 : http://www.shrani.si/f/17/OK/7a1oZek/scr.png). – brozo