2014-10-20 2 views
1

정점 배열을 사용하여 원점 정점과 색상을 저장하고 있습니다.회전하는 정점 배열 오브젝트가 작동하지 않습니다.

void setup1(void) 
{ 
    glClearColor(1.0, 1.0, 1.0, 0.0); 

    // Enable two vertex arrays: co-ordinates and color. 
    glEnableClientState(GL_VERTEX_ARRAY); 
    glEnableClientState(GL_COLOR_ARRAY); 

    // Specify locations for the co-ordinates and color arrays. 
    glVertexPointer(3, GL_FLOAT, 0, Vertices1); 
    glColorPointer(3, GL_FLOAT, 0, Colors1); 
} 

어레이의 글로벌 선언 여기에서 : 여기

가 설치 함수 배열은 모두 여기에 설정된

static float Vertices1[500] = { 0 }; 
static float Colors1[500] = { 0 }; 

(R은, X 및 Y는 반경이다 인 t는 원의 각도 매개 변수입니다.

void doGlobals1() 
{ 
    for (int i = 0; i < numVertices1 * 3; i += 3) 
    { 
     Vertices1[i] = X + R * cos(t); 
     Vertices1[i + 1] = Y + R * sin(t); 
     Vertices1[i + 2] = 0.0; 
     t += 2 * PI/numVertices1; 
    } 

    for (int j = 0; j < numVertices1 * 3; j += 3) 
    { 
     Colors1[j] = (float)rand()/(float)RAND_MAX; 
     Colors1[j + 1] = (float)rand()/(float)RAND_MAX; 
     Colors1[j + 2] = (float)rand()/(float)RAND_MAX; 
    } 
} 

마지막으로, 여기에서 모양이 dr입니다 (X, Y) 중심입니다. 까끄라기.

// Window 1 drawing routine. 
void drawScene1(void) 
{ 
    glutSetWindow(win1); 
    glLoadIdentity(); 

    doGlobals1(); 
    glClear(GL_COLOR_BUFFER_BIT); 

    glRotatef(15, 1, 0, 0); 
    glDrawArrays(GL_TRIANGLE_FAN, 0, numVertices1); 

    glFlush(); 
} 

회전이 없으면 원이 잘게 끕니다. 원은 Scale/Translate 기능으로도 잘 그려집니다. 버텍스 배열로 그려진 객체를 회전시키는 데 필요한 몇 가지 특별한 프로토콜이 있다고 생각합니다.

누구나 내가 잘못 갔는지, 내가 물건을 회전 시키거나 조언을 해줄 필요가있는 곳을 말해 줄 수 있습니까?

+0

그래서 갑자기 당신이 사진을 더 이상 볼 수없는 이유는 무엇입니까? – TheBlindSpring

+0

네, 바로 그 것입니다. 원을 축척 할 때 (일반적으로 문제와 관련이 없을 수도 있음) 축의 크기가 변하는 방향으로 변환됩니다 (예 : 1.5 배 Scaling X 또한 X 방향으로 변환). – 404Cat

+0

Modelview 매트릭스로 이동하십시오. 나는 OpenTK를 중심으로 C++에 대한 코드를 모르기 때문에 주로 identity matrix를로드하기 전에'glMatrixMode (MatrixMode.Modelview)'와 같은 것을해라. – TheBlindSpring

답변

3
glRotatef(15, 1, 0, 0); 
      ^why the X axis? 

기본 직교 투영 행렬은 꽤 꽉 가까운/먼 클리핑면이있다 : -1

X의 당신의 원을 회전하는/Y가 X의 외부 조정 1.를/Y 평면들을 수 있도록하는 경향이 포인트가 잘립니다. 대신 Z 축을 중심으로

회전 : 당신이 회전을 포함 할 때

glRotatef(15, 0, 0, 1); 
+0

이것은 해결책이었습니다. 내가 아는 것보다 훨씬 더 간단하다. 스케일링 할 때 오브젝트가 스케일 된 축에서 변환됩니다 (예 : 1.5, 1.0, 1.0으로 스케일링하면 오브젝트가 + X 방향으로 변환됩니다). 이것에 대한 조언을 주시면 감사하겠습니다! – 404Cat

+0

원을 생성 할 때 (0,0) 가운데에 X/Y 오프셋을 제거합니다. – genpfault

+0

당신이 옳습니다. 나는 회전하는 동안에 만 물체의 좌표가 중요하다고 생각 했었고, 규모에서도 중요한 것을 알지 못했습니다. 당신의 도움을 주셔서 감사합니다! – 404Cat