【Houdini】한 포인트를 포함한 페이스를 여러가지 vex 코드로 얻는다

5325 단어 VEXHOUDINI
여러가지 런오버로 같은 일을 해보자 시리즈 그 2입니다.
딱딱한 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 로의 처리가 되고 있는 것은, 정점 일람을 얻는 명령이 우선은 보이지 않았기 때문입니다.

요약



프로시저 모델링을 할 때 기존 노드에서는 할 수 없다 || 누를 수 있도록 이러한 간단한 명제를 다른 런오버로 기술하는 시도를 하고 있습니다. 일반적인 튜토리얼이나 교재에서는 포인트로 처리를 돌리는 예가 많습니다만, 모델링을 실시할 때는 정점의 처리가 빠뜨릴 수 없기 때문에, 처리 대상을 정점으로 하는 편이, 간결하게 하는 것이 많다, 라고 생각합니다.

좋은 웹페이지 즐겨찾기