2012-02-08 3 views
-2

개체를 옮기고 싶습니다. (나는 간단한 직사각형을 가졌습니다.) 특정 위치로 이동하고 싶습니다 (아마도 영원히 반복 할 것입니다).OpenGL Noob -> 2D Animation

매트릭스 변환 (gltranslate)에서 변수를 가져야한다는 것을 알고 있지만, 어떻게하면이 변수를 만들고 각 프레임을 애니메이션으로 만들 수 있습니까?

답변

0

그것은 당신이에 있지만 이미 화면에 사각형 그리기를 가정하고 어떤 단계 확신하기 어렵다 translatoryAlpha가 0에서 animatingForward가 1 인 값을 사용하십시오.

다음 부분은 별도의 기능으로 수행하는 것이 좋지만 애니메이션을 단계별로 실행하는 코드가 필요합니다 (

).
void step() 
{ 
    translationAlpha += .01 * animationDirection;//.01 is the per 
    if (animationDirection > 0.0 && translationAlpha >= 1.0 || 
     animationDirection < 0.0 && translationAlpha <= 0.0) { 
     animationDirection *= -1.0; 
    } 
} 

당신이 그렇게 단순하게 유지하는 것처럼 들리므로 그릴 때마다 전화하십시오.

그래서 glPushMatrix와 glPopMatrix가 주위를 둘러야합니다. 내가 사용하고있는 기능 모르기 때문에 당신이 설명 무엇을 할 수있는 정말 원시적 인 방법을 포함

glTranslate2f(startPositionX + translationAlpha * (endPositionX - startPositionX), 
       startPositionY + translationAlpha * (endPositionY - startPositionY)); 

,이 의사를 고려하고 당신이 얼마나 : 당신이 당신의 무승부 추가를 호출하기 전에 pushMatrix이 후에 행렬 처리.

+0

내 답변을 수락 해 주셔서 감사 드리며 추가 설명이 필요하면 언제든지 저에게 연락 하시거나 연락해주십시오. –

0

다소 모호한 질문이지만, 여기에 있습니다. 근본적으로 직사각형의 위치를 ​​어딘가에 저장해야합니다 (직사각형 자체 또는 다른 곳에서).

각 프레임에서는 Update 메서드를 호출하여 애니메이션의 모든 개체를 업데이트합니다. 이렇게하면 사각형의 위치가 업데이트됩니다.

각 프레임에서 Draw 메서드를 호출하여 현재 위치에 사각형을 그립니다 (이 경우 glTranslate을 사용할 수도 있음).

+0

예를 들어 객체를 동시에 애니메이션화해야한다면 어떻게 될까요? – user461316

+0

얼마나 많은 객체를 가지 냐에 따라 객체에 대한 정보를 하나의 클래스로 추상화 할 수 있습니다.이 클래스는 OpenGL 행렬의 위치에 따라 OpenGL 행렬 스택을 변경 한 다음 화면에 그리는 역할을하는 render() 함수를 포함 할 수도 있습니다. 또한 클래스에는 필요한 애니메이션을 수행하는 update() 함수가 있습니다. – kevintodisco

0

OpenGL 호출 및 행렬 스택을 실험하기위한 간단한 프로그램의 경우 전역 변수를 만들어 번역을 추적 할 수 있습니다. 사용중인 윈도우 라이브러리 (GLUT, Qt 등)에 따라 각 프레임을 실행하는 애니메이션 기능을 제공해야합니다. 그러면 번역이 변경됩니다. 그것은 다음과 같이 보일 것이다 (내 예는 GLUT를 사용) : 당신이 언급 한 바와 같이,

glutIdleFunc(animate); 

그리고 마지막으로 :

void animate() 
    { 
     /* Add some value to your translation */ 
     /* Perhaps use a sinusoidal function if you want oscillating behavior */ 

     glutPostRedisplay(); 
    } 

당신은이 기능을 정기적으로 호출 할 필요가 당신의 윈도 라이브러리에 표시해야 쿼트를 그리기 전에 glTranslatef()를 호출하고 전역 변수를 전달해야합니다 (이동하려는 축에 따라 다름). 당신이 당신의 'drawMyRectangle'기능이 어디

이러한 변수를 만들 :

//Your starting position 
float startPositionX; 
float startPositionY; 
//Your ending position 
float endPositionX; 
float endPositionY; 
//The value that describes where in between these positions you are 

float translationAlpha; 
float animationDirection; 

것은 그래서 채울