【Houdini】한 포인트를 포함한 페이스를 여러가지 vex 코드로 얻는다
딱딱한 vex로 열심히 할 때의 메모이므로, 그 노드로 하면 간단하게 할 수 있는, 같은 것은 고려하고 있지 않다.
특정 포인트가 포함 된 얼굴 목록을 얻고 싶습니다.
포인트 12를 정점으로서 포함하는 페이스에 색을 붙이는 코드를, 포인트, 정점, 프리미티브(페이스), 디테일의 각각의 랜오버 지정으로 써 보았습니다. 모두 같은 결과입니다. 코드는 대상 얼굴을 hoge 그룹에 저장하고 해당 그룹 대상으로 색상을 지정합니다.
포인트
if(@ptnum==12)
{
int prims[] = pointprims(0, @ptnum);
foreach(int prim;prims)
{
setprimgroup(0, "hoge" , prim, 1);
}
}
다만
@primnum
로 프림 번호를 취하는 것만으로는, 대표의 1 페이스 밖에 돌아오지 않기 때문에 복수의 페이스를 돌려준다 pointprims
명령을 사용하고 있습니다.정점
if(@ptnum==12)
{
setprimgroup(0, "hoge" , @primnum, 1);
}
정점을 대상으로 하는 코드는 매우 간결해졌습니다. 1 정점에 대응하는 포인트도 페이스도 각각 하나이기 때문이군요.
프리미티브
int pts[] = primpoints(0, @primnum);
foreach(int pt; pts) {
if(pt==12) {
setprimgroup(0, "hoge" , @primnum, 1);
}
}
프리미티브의 경우, 포인트와 같은 코드가 되었습니다.
디테일
int numvert = nvertices(0);
for(int i=0;i<numvert;i++)
{
if(vertexpoint(0, i)==12)
{
setprimgroup(0, "hoge" , vertexprim(0, i), 1);
}
}
디테일의 경우, 여러가지 쓸 수 있을 것 같습니다만, 정점 일람을 취득해 처리를 진행하는 형태로 해 보았습니다. 가장 안쪽의 if 문 이후는 정점의 코드와 같은 구조(사용하는 명령은 다르지만)가 되어 있습니다. 뭐 당연하네요. foreach 가 아니라 for 로의 처리가 되고 있는 것은, 정점 일람을 얻는 명령이 우선은 보이지 않았기 때문입니다.
요약
프로시저 모델링을 할 때 기존 노드에서는 할 수 없다 || 누를 수 있도록 이러한 간단한 명제를 다른 런오버로 기술하는 시도를 하고 있습니다. 일반적인 튜토리얼이나 교재에서는 포인트로 처리를 돌리는 예가 많습니다만, 모델링을 실시할 때는 정점의 처리가 빠뜨릴 수 없기 때문에, 처리 대상을 정점으로 하는 편이, 간결하게 하는 것이 많다, 라고 생각합니다.
Reference
이 문제에 관하여(【Houdini】한 포인트를 포함한 페이스를 여러가지 vex 코드로 얻는다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/harayoki/items/95ca19792ce5097a8a97텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)