이쯤 돼서 이쁘게 정리함 해보자
나이 소멸에서는 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 같은 놈들끼리 연결됨.
이렇게
근데 문제가..
점이 생길때 중력이 높으면 리밋점을 통과 못하는 사태가 벌어지고, 그럼 다시 방향전환이 이루어지고, 그래도 리밋점을 통과 못하고, 또 방향전환이 일어나고.. 가정이 무너지고 사회가 무너지고...
이거 시뮬레이션 정밀도를 올려야 할 필요가 생김. 이건 다음에
'기타 공부하기 > 후디니' 카테고리의 다른 글
Dopnet / 파티클 시스템 셋업 (0) | 2024.01.03 |
---|---|
파티클 시스템 구현 3-1 / 서브스탭과 시뮬레이션 퀄리티 (0) | 2024.01.03 |
파티클 시스템 구현 2 - 충돌 규칙 만들기 (0) | 2024.01.01 |
파티클 시스템 구현 1 - 속도에 따른 이동 (0) | 2024.01.01 |
solver의 작동 (기초) : 조건문 (0) | 2023.12.31 |
댓글