개체를 옮기고 싶습니다. (나는 간단한 직사각형을 가졌습니다.) 특정 위치로 이동하고 싶습니다 (아마도 영원히 반복 할 것입니다).OpenGL Noob -> 2D Animation
매트릭스 변환 (gltranslate)에서 변수를 가져야한다는 것을 알고 있지만, 어떻게하면이 변수를 만들고 각 프레임을 애니메이션으로 만들 수 있습니까?
개체를 옮기고 싶습니다. (나는 간단한 직사각형을 가졌습니다.) 특정 위치로 이동하고 싶습니다 (아마도 영원히 반복 할 것입니다).OpenGL Noob -> 2D Animation
매트릭스 변환 (gltranslate)에서 변수를 가져야한다는 것을 알고 있지만, 어떻게하면이 변수를 만들고 각 프레임을 애니메이션으로 만들 수 있습니까?
그것은 당신이에 있지만 이미 화면에 사각형 그리기를 가정하고 어떤 단계 확신하기 어렵다 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이 후에 행렬 처리.
다소 모호한 질문이지만, 여기에 있습니다. 근본적으로 직사각형의 위치를 어딘가에 저장해야합니다 (직사각형 자체 또는 다른 곳에서).
각 프레임에서는 Update
메서드를 호출하여 애니메이션의 모든 개체를 업데이트합니다. 이렇게하면 사각형의 위치가 업데이트됩니다.
각 프레임에서 Draw
메서드를 호출하여 현재 위치에 사각형을 그립니다 (이 경우 glTranslate
을 사용할 수도 있음).
예를 들어 객체를 동시에 애니메이션화해야한다면 어떻게 될까요? – user461316
얼마나 많은 객체를 가지 냐에 따라 객체에 대한 정보를 하나의 클래스로 추상화 할 수 있습니다.이 클래스는 OpenGL 행렬의 위치에 따라 OpenGL 행렬 스택을 변경 한 다음 화면에 그리는 역할을하는 render() 함수를 포함 할 수도 있습니다. 또한 클래스에는 필요한 애니메이션을 수행하는 update() 함수가 있습니다. – kevintodisco
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;
것은 그래서 채울
내 답변을 수락 해 주셔서 감사 드리며 추가 설명이 필요하면 언제든지 저에게 연락 하시거나 연락해주십시오. –