본문 바로가기
기타 공부하기/후디니

파티클 시스템 구현3

by 대마왕J 2024. 1. 2.

이쯤 돼서 이쁘게 정리함 해보자 

나이 소멸에서는 age 만들고 더해주고,
특정 숫자 넘으면 removepoint 해주고 

충돌/반사에서는 포지션이 특정 범위 넘어가면 (범위는 받아오고)  벨로시티 반사해주는데,
여기는 이렇게 되어 있다. 

float Xmin = point(1,"xmin",0);
float Xmax = point(1,"xmax",0);
float Ymin = point(1,"ymin",0);
float Ymax = point(1,"ymax",0);

if(@P.x > Xmax || @P.x < Xmin){
    @vel = @vel*{-1,1,1};
}

if(@P.y > Ymax || @P.y < Ymin){
    @vel = @vel*{1,-1,1};
}


그리고 그 뒤에 포인트/ 합류되는 merge가 돈다. 이 때 switch를 통해 특정 조건때 @vel을 가지고 있는 포인트가 합류한다. 
어라 근데 @vel은 바로 위에 썼는데? 이게 들어오면 덮어쓰게 되는거 아닌가? 왜 자연스럽게 같이 연산되고 그러는거지???  merge 라서 그런가??? 

개념상 충돌/ 반사 때 @vel 이 *{-1,1,1} 로 정의 되고
그 다음 merge에 @vel 값이 들어오게 되는데, 느낌상 둘이 순서가 바뀌어야 하는거 아닌가...????  
이 순서대로라면 @vel 을 변수라고 봤을때 merge되는 순간 switch에서 들어온 @vel값이 이전의 @vel 값을 덮어써야 정상 아닌가..? 

merge 너 뭐하고 있는거냐...???

 

여하간 포인트 합류하고 

이후엔 이렇게 연산된 벨로시티로 포지션을 업데이트하면 된다. 

 

 

이제 속도 제어해야지

vel_update_by_force 로 속도 제어를 해보자. 

 

심플하게 이렇게 하면 

뭐야

뭐야 이상해

일단 궤적이나 볼까나. 
ID 를 주자 

일단 포인트를 생성하는 곳에  이렇게 id를 만들어 주면, 
@Frame을 int로 형변환해서 넣어주면.... 동생변환 아님 형변환임... 

그럼 ID 가 나옴. 

그리고 trail을 박아주면, 
기본으로 오리지날부터 2프레임 전 포인트가 나옴. 저거 조절가능

그럼 ID가 같은 포인트가 2개 생기잖아? Add로 연결해 주면됨
바이 어트리뷰트로. id 로 연결해주면 id 같은 놈들끼리 연결됨. 

이렇게 

근데 문제가.. 

점이 생길때 중력이 높으면 리밋점을 통과 못하는 사태가 벌어지고, 그럼 다시 방향전환이 이루어지고, 그래도 리밋점을 통과 못하고, 또 방향전환이 일어나고.. 가정이 무너지고 사회가 무너지고... 

이거 시뮬레이션 정밀도를 올려야 할 필요가 생김. 이건 다음에

 

반응형

댓글