jasu's blog
블로그 메뉴검색결과 리스트
Programming/Physics Engine에 해당되는 글 6건
- 2007.08.18 [AS3] APE : CollisionCircleParticle 2
- 2007.08.12 APE UML 다이어그램
- 2007.08.09 2D 물리엔진을 이용한 벽돌깨기 게임 8
- 2007.08.09 SPE(Simple Physics Engine) 4
- 2007.08.08 [AS3] APE에 추가된 클래스
- 2007.08.08 [AS3] 3대(APE, Revive, Fisix) Physics Engine 정리 8
글
[AS3] APE : CollisionCircleParticle
화면에서 마우스를 down한 상태에서 시간의 흐름에 따라 원형의 크기가 커지는데 Max 값은 반지름 80으로 한정하였다. 생성한 오브젝트를 MouseDown and Drag하면 힘의 방향을 바꿀 수 있으며 MouseUp을 하게 되면 마우스 포인트와의 SpringConstraint를 removeConstraint를 실행하여 연결을 끊어 주었다. 이러한 형태는 앙드레 미쉘이 만들고 있는 Revive의 엔진 자체에 있는 마우스 이벤트와 비슷하지만 구현 방법은 아마 다를 듯싶다.
오브젝트가 없는 화면에서 위에서 생성한 방법으로 생성할 수 있는 오브젝트의 개수는 10개로 한정하였다. 생성한 모든 오브젝트들은 서로 collision이 가능하다.(외벽 또한 그러함) 8개로 오브젝트를 한정한 이유는 오브젝트가 많으면 지누 컴이 뻑난다.(쿠쿠)
이러한 형태를 어디에 쓸 수 있을 지는 생각해 봐야겠다. 원래 이런 형태로 테스트 하려고 했던 것은 아니었는데 하다 보니…
원래 하려고 했던 것은 위에서 언급했던 것과 같이 RectangleParticle의 경우 자체 angle이 지원되지 않아서 중력에 의해서 외부의 충격을 받았을 때 WheelParticle처럼 회전을 하지 못한다는 것을 고민하다가 APE 제작자 alec cove와 APE를 사용하는 kiosk(키오스크 작업을 하는지 이름이 그러한지 모르겠다.) 와의 대화를 보고 알게 되었다. 방법은 아래와 같다.
4면에 대한 충돌과 각도에 따라 회전이 가능한 사각형의 오브젝트를 만들 때는 4점이 되는 모서리 부분에 CircleParticle을 생성하고 그 모서리의 외각선을 따라 각각 4개의 SpringConstraint로 연결해 준다. 이렇게만 하면 4점이 모두 연결 되었으나 외각선에 따라 연결되었기 때문에 충격을 받으면 쓰러지듯이 퍼져버린다. 이를 방지하기 위해서 모서리 4개 중에서 대각선으로 마주보는 CircleParticle들을 연결하는 2개의 SpringConstraint로 연결하되, 그 연결은 non-collidable springs 이어야 한다는 점이다.
위와 같은 방법으로 Group에 추가하면 사각형이 생기고 그 사각형 안에 X자 모양의 두 개의 선이 대각선으로 연결된 모양이 된다. 이렇게 만들어지면 외부의 충격이나 중력에 의해서 다른 그룹에 있는 particle들과의 충돌에 의해서 각도와 좌표가 바뀌는 CustomRectangleParticle을 생성할 수 있다. 이런 방법으로 사각형뿐만 아니라 다각형들도 연결을 통해서 생성할 수가 있다.
그러데 하다 보니 문제가 좀 있다. 4개의 모서리에 있는 CircleParticle의 크기를 작게 할 경우 SpringConstraint도 함께 무게가 실리지 않아서 다른 오브젝트와 충돌했을 때 그 안쪽으로 collision된 오브젝트들이 뚫고 들어온다는 점이다. 엔진의 계산 값이 벗어 났을 때는 오류가 발생한다. 이는 좀더 고민해 봐야겠다.
글
APE UML 다이어그램
글
2D 물리엔진을 이용한 벽돌깨기 게임
글
SPE(Simple Physics Engine)
그 변화의 주축이 플래시라면... 앞으로의 기술 발전에 따라 충분히 가능한 일이 되지 않을 까 싶다. 자료를 다운 받아서 실행하면 바로 데모를 볼 수 있는데 시간 있는 분들은 한번 받아서 즐겨 보시길....
글
[AS3] APE에 추가된 클래스
형태로 Vector 클래스를 사용하였으나 이와 구분되는 VectorForce를 통해서
이러한 형태로 사용하게 되었다. 추가된 VectorForce는 APEngine 클래스의 internal static Array 변수 forces에 등록됨으로써 중력에 관련하여 복합적으로 적용이 가능하게 되었다.
CollsionEvent 클래스는 충돌을 체크하기 위해 Event 클래스를 확장하여 만들어 놓았다. 이는 AbstractItem 클래스를 확장하고 있는 클래스에 대한 충돌을 이벤트처리하기 위해 만들어져 있다. 실제로 code repository에 있는 AbstractItem 클래스는 EventDispatcher를 상속하고 있다. CollsionEvent에는 아래와 같은 이벤트타입이 있다.
COLLIDE는 충돌이 발생할 때마다 매번 dispatch 하며 FIRST_COLLIDE는 처음 충돌이 발생한 시점에서 한번만 dispatch하게 된다.
이 이벤트 처리는 Flade에서 지원하던 충돌 관련 기능을 추가한 것이다. 이로서 Flade에서 지원하던 대부분의 기능은 APE에 포함된 것으로 보이며 앞으로 오브젝트에 관련된 클래스들이 추가 될 것으로 기대된다.
글
[AS3] 3대(APE, Revive, Fisix) Physics Engine 정리
3대 Physics Engine 정리
타이틀 |
|||
제작 |
MIT(Alec Cove) |
Andre michelle |
Fisix 회사 |
라이센스 |
LGPL |
Free |
Free(제한적) |
규모 |
소 |
중 |
대 |
API 문서 |
다운로드 한 소스로부터 |
||
특징 |
Simple |
고속, 정확 |
다기능 |
표현 범위 |
정방형 파티클 등 |
베이지어곡석 표면 처리 등 |
로프, 프렉탈, 지형
등 |
테스트 예 |
APE
먼저 처음 접했던 것은 APE 물리엔진이었다. 이것은 AS2 버전으로 이미 알려졌던 Flade 엔진을 AS3로 고치면서 새롭게 APE라는 이름으로 나오게 되었다. 위 3개의 엔진 중에 가장 심플한 클래스 구조를 가지고 있다. 19개의 클래스 중에 public 클래스는 불과 12개 밖에 되지 않기 때문에 소스를 분석하는데도 그리 어렵지 않을 것 같다.
Revive
Revive는 두 번째로 접하게 된 물리 엔진이다. 2005, 2006 MAX conference에도 스피커로 참여했던 Andre michelle이 만든 엔진이다. Revive의 경우는 베이지어 곡선 처리가 가능하여 surface 표현할 때 곡선처리가 가능하다. 물리엔진의 계산 표현이 비교적 정교하여 움직임이 매끄럽고 속도가 빠르다. 마우스 이벤트에 대해 기본적으로 제공하고 있기 때문에 약간의 확장을 통해서 마우스를 통한 인터렉션이 자유롭다.
클래스 구조
* de/
o popforge/
+
revive/
# application/ - 어플리케이션
* SceneContainer.as
– 뷰어
* Simulation.as - 물리
엔진
# display/ - 표시
* ExtDrawAPI.as – Graphics을 사용하고 호를 그리는
확장
* IDrawAble.as – 표시오브젝트
관련 Interface
# forces/ - 힘
* FixedSpring.as - 고정
용수철
* IForce.as - 힘을
가지는 오브젝트를 위한 Interface
* Spring.as - 용수철
# geom/ - 지오메트리
* BezierCubic.as – 3 베이지어곡선
* BezierQuadric.as - 4 베이지어곡선
* BoundingBox.as - 바운딘
* ICurve.as - 곡선을
위한 Interface
* Vector.as - 2 차원
벡터
# member/ - 물체
* Immovable.as - 움직이지
않는 물체의 base class
*
ImmovableBezierQuadric.as - 움직이지 않는 4 베이지어곡선
*
ImmovableCircleInner.as - 움직이지 않는 원
*
ImmovableCircleInnerSegment.as - 움직이지 않는 호
*
ImmovableCircleOuter.as - 움직이지 않는 원
*
ImmovableCircleOuterSegment.as - 움직이지 않는 호
* ImmovableGate.as
* ImmovableGroup.as
- 움직이지 않는 그룹
* ImmovablePoint.as
- 움직이지 않는 점
* Movable.as - 움직이는
물체의 base class
* MovableCircle.as - 움직이는
원
*
MovableParticle.as - 움직이는 점
* MovableSegment.as
- 움직이는 선
# resolve/
*
DynamicIntersection.as - 동적 접점
* IDynamicIntersectionTestAble.as
- 동적인 접점을 테스트하는Interface
* IResolvable.as
+ surface/ - 인터페이스
# display/ - 표시
*
DefaultTextFormat.as - 이 라이브러리의 디폴트 텍스트 포맷
* FPSCounter.as -
FPS 카운터
# io/ - IO
* PopKey.as – 키
코드 상태를 관리
* PopMouse.as - mouse button의 상태를 관리
# valuation/ -
* Potentiometer.as –
미터
Fisix
Fisix 엔진은 0.5 alpha버전으로 공개되어 있으나 위의 APE, Revive 보다 많은 기능을 포함하고 있다. 소스를 다운로드 하면 API문서, 라이브러리, 샘플 6개와 나머지 라이선스와 관련된 텍스트 파일을 볼 수 있다. Public 클래스는 47개 정도 되어 꽤 많은 기능을 제공하고 있다. as파일은 없으며 swc 파일만을 배포하고 있는 듯 하다.
* Example1 … 타이머, 엔진 표현, 직선 표면 1 개, 차
바퀴
* Example2 … ENTER_FRAME , 엔진 표현, 차 바퀴
*
Example3 … ENTER_FRAME , 엔진 표현, 용수철, 마우스 interaction
*
Example4 … 숫자 키1 ~4 ,5 ~6 모드 변환,
파티클의 자동 삭제
*
Example5 … 로프, SWF 부품(타이어)
*
Example6 … 유모차