2012-09-20 4 views
3

최신 OpenGL의 회전이 더 이상 사용되지 않으므로 삼각형을 어떻게 회전합니까? 중단하기 전에 :최신 OpenGL에서 회전

gl.glRotated(i, 0, 0, 1); 

    gl.glBegin(GL2.GL_TRIANGLES);  
    gl.glVertex3f(0.0f, 1.0f, 0.0f); 
    gl.glVertex3f(-1.0f, -1.0f, 0.0f); 
    gl.glVertex3f(1.0f, -1.0f, 0.0f); 
    gl.glEnd(); 

내가이 일을 시도, 그냥 번역은 생각입니다 :

double rotCos = Math.cos(i); 
    double rotSine = Math.sin(i); 


    gl.glBegin(GL2.GL_TRIANGLES);  
    gl.glVertex3d(0.0f + rotSine, 1.0f + rotCos, 0.0f);  
    gl.glVertex3d(-1.0f + rotSine, -1.0f + rotCos, 0.0f); 
    gl.glVertex3d(1.0f + rotSine, -1.0f + rotCos, 0.0f); 
    gl.glEnd(); 

어떻게 glRotated 뒤에 수학을 달성하기 위해?

+0

나는 잠시 동안 OpenGL 루프를 빠져 있었지만 이것이 매트릭스 변환을 사용해야하는 곳이라고 생각한다. http://www.songho.ca/opengl/gl_transform.html – Matthew

답변

4

당신이 한 일은 그 기능의 비추천이 무엇인지에 대한 아이디어가 아닙니다. 당신이 점을 놓치고, 그를 사용하는 경우 있도록이 중단는의 glBegin, 너무 많은 glVertexglEnd, 기능 을 포함 당신이해야에이 버텍스 쉐이더를 구현이다

하는 당신 꼭지점 변환의 일반적인 단계를 수행합니다. 즉, 꼭짓점을 먼저 모델 뷰와 곱한 다음 투영 행렬을 곱합니다. 당신은 또한 하나의 매트릭스에 모델 뷰와 투영을 계약 할 수 있지만, 이것은 조명에 관해서는 조금 더 까다 롭습니다.

매트릭스는 유니폼을 통해 OpenGL로 전달됩니다. 행렬을 생성하려면 GLM 또는 Eigen (Eigen과 함께 제공되는 비공식 OpenGL 모듈 포함)과 같은 벡터 수학 라이브러리를 사용하십시오.

0

감가 상각 된 함수를 사용해도 괜찮습니다. 그러나 "현대적인"OpenGL (OpenGL 3 이상)을 사용하려면 다르게 처리해야합니다.

하나는 더 이상 glBegin/glEnd을 사용하지 않고 대신 정점 버퍼 개체를 사용하여 모든 것을 그립니다. 두 번째로 고정 함수 파이프 라인이 제거되었으므로 꼭지점 및 조각 쉐이더는 아무 것도 그려야합니다. 또한 다른 변경 사항 (정점 배열 객체 및 지오메트리 셰이더 추가 포함)이 많이 있습니다.

OpenGL 3에서 회전을 수행하는 방법은 modelView 및 프로젝션 매트릭스를 유니폼으로 전달하고이를 사용하여 버텍스 쉐이더에서 버텍스 위치를 계산하는 것입니다.

궁극적으로 "현대적인"OpenGL을 배우려면 OpenGL 3.0 이상의 튜토리얼을 온라인으로 보는 것이 가장 좋습니다.

관련 문제