[14일차] 램프 만들기 (1)
포인트 만드는 법
1) add 노드로 두 점을 만들고, attribute wrangle 로 정가운데 점 만들기
두번째 input으로 들어온 neck 정보는 attribute wrangle에 인식되지 않으므로 point 함수로 불러오기
v@AA = point(1,"P",0);
base 포인트와 neck 포인트의 정 가운데 점(middle) 생성하기
@P = (@P + @AA)/2;
두 벡터의 값을 더해 2로 나눠주면 정 가운데에 점이 만들어진다.
2) Attribute Wrangle 만으로 두 점 가운데 a:b 지점 만들기
a:b비율의 중간 지점의 값 = (ay+bx)/(a+b)
addpoint(몇번 인풋에 대하여, 위치벡터)
addpoint(0,{0,2,0}) : (0,2,0) 위치에 점 생성
run over를 detail로 두고 점 생성하기
addpoint(0,K)
0은 attribute wrangle에 들어온 정보가 없기 때문에 자기 스스로 점을 만들겠다는 뜻
K라는 변수는 위치정보
attribute wrangle로 점 만들어줌
base와 neck을 각각 만들어준 다음, A:B 지점을 구하는 공식을 대입해서 middle 점도 생성
램프 만들기
1. 피타고라스로 구하기
x와 RAD를 구하기
(1) 점 만들어주기
Run Over를 Detail로 두고 base와 neck 점 두개 생성해주기
(2) x와 RAD값을 어트리븃으로 받기
run over를 points로 두고 모든 점에 대해서 실행할 건데, base와 neck에 대한 변수는 다시 선언해줘야함
point 함수로 base와 neck 점을 각각 불러오고,
A,B,C 선언
C는 base에서 neck까지의 거리로 distance 함수 사용
X,RAD 공식으로 적어주기
sqrt는 루트
(run over을 왜 points로 둬야만 하는건지에 대해서는 잘 모르겠다..)
(3) base에서 X만큼 떨어진 점 생성
사이 점 하나만 구하면 되므로 detail로 두기
어트리븃으로 만들어준 RAD와 X도 불러오는 이유는
run over가 디테일로 되어있어, 몇번 점의 포인트를 불러와야할지 명확하지 않기 때문에 구체적인 값을 불러와줘야 함 (중요!)
normalize 단위벡터로 만들어주는 함수
K = NK x K의 크기
벡터 길이(크기)를 1로 만들어주어, 임의의 값 X를 곱했을 때, X 자기자신의 값이 나오도록 만들어줌
괄호 안에 크기를 1로 줄여주고 싶은 벡터를 넣어주면 됨
temp 벡터는 base벡터에서 X만큼 떨어진 점이기 때문에 base에서 Ndir*X를 더해줌
(4) 노말 세팅하기 & 미들점에 붙이기
바라보고 있는 방향 : normal
copytopoints로 cicle을 만들어진 점에 붙이기
그냥 붙이면 원의 방향이 옆을 바라보고있어서 방향을 설정해줘야함
모든 점에 대해 시행할 거기 때문에 run over가 points 인 attribute wrangle 생성
base, temp, neck 점 point 함수로 불러오기
0에서 1로 향하는 방향을 만들어주기 위해 목적지에서 출발지를 빼면 됨
v@N = neck - base
base에서 neck을 향하는 방향
blast로 2번 점만 꺼내서 만들어주기
(5) 원의 사이즈를 RAD값으로 설정하기
circle의 uniform scale에서 포인트 함수로 RAD 값 가져오기
(6) 가능한 지점 중에서 가장 높은 점 택하기
가장 높은 점이 아니고는 선이 휘어지게 됨
(중간에 설명을 위해 carve를 이용해서 원을 돌아가는 점 만들어주는데 furst U만으로는 점이 돌아가지 않아서 second U의 값을 1로 만들어주니 원을 돌아가는 점을 만들 수 있었다.)
원에서 가장 높은 점에 위치해 있어야, 램프가 똑바로 서있을 수 있게 됨
가장 높은 점을 선택하기 위해서 sort 노드를 사용
point sort를 By Y로 변경해주어
포인트가 0부터 가장 낮은 점에서 생기도록 만들어주기
가장 높이 있는 점이 0이어야 하므로
sort를 하나 더 만들어서 point sort를 reverse로 선택
sort를 하나 더 만드는 게 아니라 포인트 솔트 아래에 reverse point sort를 체크해줘도 똑같은 거 아닌가?
circle의 disvision값을 높여서 정확도 높이기
(7) 점 분리해주고 선으로 만들어주기
각 점들을 blast로 떼고 merge, add
2. 작도로 구하기
base와 neck점을 blast로 떼어낸 후
copy to point로 구를 점에 붙이기
구의 반지름을 control의 A,B로 설정해주기 - 각각 카피 파라미터 해서 구의 uniform scale에 붙여넣기
boolean으로 intersect를 해준 후
겹쳐진 구의 edge 를 따로 떼어내기
이렇게만 했을 때 굉장히 지저분하게 생겨나기때문에, 깔끔하게 생성해주기 위해, 원을 노말방향으로 변경해주기
포인트 아래에 attribute wrangle 만들어서 노말방향 설정
sphere를 polygon mesh로 바꿔주고 sphere 로테이션 변경해주기
sphere의 column 수 높여서 점 많이 생성해주고, sort로 가장 높은 점 구해서, 선 연결
*boolean으로 만드는 게 더 무거움
지금은 넘어가도 되는 부분이라고 하신 부분들도 다 이해하고 넘어가고 싶은 욕심에 시간이 굉장히 많이 걸렸다. 계속 완벽하게 이해되는 느낌이 아닌 게 벡터라는 개념이 익숙하지가 않아서인 것 같아서 벡터가 무엇인지부터 다시 검색하고 공부했다.
scalar는 크기만, vector는 크기와 방향을 가진 것!
노말 방향을 구할 때 궁금했던 벡터의 빼기..
우리가 수학을 하는 건 아니니까 다 알 필요는 없을 거라는 걸 알면서도 이걸 알아야지 뭔가 그 답답함이 사라진다.
내용이 더 어려워지면 감당이 안될 것 같으니 좀 더 결과를 보고 직관적으로 받아들일 수 있도록 연습해야겠다.
아직은 익숙하지 않아서 더 어렵게 느끼는거겠지?
🥕🥕🥕