어제 지돌스타님의 10만개 입자를 이용한 유체 시뮬레이션 포스팅에서 최적화에 관한 팁을 보고 간단한 시뮬레이션을 만들어 보았습니다.
대충 모양은 그림 1-1과 같습니다. 마우스 포지션에 따라 각각의 파티클들이 적절한 힘을 받도록 해보았습니다. 그런데 분명 지돌스타님의 시뮬레이션보다 연산하는 양이 매우 적었음에도 불구하고 지돌스타님의 시뮬레이션과 같은 속도는 나오지 않았습니다.
그래서 차이점이 무엇인가 곰곰히 생각해보니, 마우스에 대한 인터랙션 부분이 보였습니다.
매번 프레임마다 수행되는 mouseX, mouseY의 값을 임의의 특정한 값으로 고정시켜 보았습니다.
var dx : Number = pt.x - mouseX ;
var dy : Number = pt.y - mouseY ;
//이부분을 아래와 같이..
var dx : Number = pt.x - 200 ;
var dy : Number = pt.y - 200 ;
var dy : Number = pt.y - mouseY ;
//이부분을 아래와 같이..
var dx : Number = pt.x - 200 ;
var dy : Number = pt.y - 200 ;
그랬더니 체감 속도가 엄청 향상된것을 느낄수 있었습니다. (디버깅 모드는 귀찮아서 패스..)
아무래도 mouseX와 mouseY 가 많은 비용을 필요로 한다는것을 경험할수 있었습니다.
*추가사항
위와 같은 문제점에 대해서 hika님이 해결 방법을 알려주셨습니다.
실시간으로 fps를 측정하여서 render주기를 조절하는 방법입니다.
var time:uint
++fps;
time = getTimer();
if( time > fpsNext ){
fpsNext = time + 1000;
renderRate = 1000 / fps;
fps = 0;
}
if( time > renderNext ){
mx = mouseX;
my = mouseY;
renderNext = time + renderRate;
}
'프로그래밍 > Actionscript3.0' 카테고리의 다른 글
| 벡터의 외적 연산 (0) | 2010/04/07 |
|---|---|
| 플레시 Actionscript 3.0 - 10만개 파티클 테스트 mouseX의 비용 체험 (6) | 2010/04/03 |
| flash - 3D rendering Test 와이어 프레임 (0) | 2010/03/20 |
| Actionscript 3 - Catmull-Rom Spline curve code (0) | 2010/03/03 |
ScrewMain.as


