후디니 내에서 쓸 수 있는 함수를 만들때의 기본 틀:

[return_type] functionName([[arg_type1] arg_name1 [, [arg_type2] arg_name2] ...])
{
...
}
반환형 타입과 인수 타입은 float,  string, vector, or matrix 를 쓸 수 있다.

#은 주석처리.


만약 반환형과 인수의 타입을 명시하지 않으면 후디니는 자료형에 float이 있는 것처럼 인식한다.

그리고, 만약 인수타입에 string을 넣어야 하는데 그것을 잊고 넣지않으면, float으로 인식해서 잠재적 버그를 

열심히 찾는다고 한다.

자료형을 꼭 명시해야겠다.



Examples

# Function to find the minimum value of two
# floating point numbers

min(v1, v2) {
    if (v1 < v2) {
        return v1;
    } else {
        return v2;
    }
}

# Function to reverse the order of a string

string strreverse(string in) {
    float len = strlen(in);
    
    string result = "";
    
    for (src = len-1; src >= 0; src--) {
        result += in[src]; return result;
    }
}

# Example to find the minimum element in a vector

float vecmin(vector vec) {
    min = vec[0];
    
    for (i = 1; i < vsize(vec); i++) {
        if (vec[i] < min)  min = vec[i];
    }
    
    return min;
}

# Example to transform a vector into the space
# of an object passed in.

vector opxform(string oname, vector v) {
    matrix xform = 1;
    
    if (index(oname, "/obj/")) {
        xform = optransform(oname);
    } else {
        xform = optransform("/obj/"+oname);
    }
    
    return v * xform;
}

# Example to find all objects which have their
# display flag set

string opdisplay() {
    string objects = run("opls /obj");
    string result = "";
    nargs = argc(objects);
    
    for (i = 0; i < nargs; i++) {
        string obj = arg(objects, i);
        if ( index(run("opset " + obj), " -d on") >= 0 ) result += " " + obj;
    }
    
    return result;
}

'Houdini > Houdini etc' 카테고리의 다른 글

Houdini User가 갖춰야 할...  (0) 2012.12.02
Cross Product  (0) 2012.11.27
12.08.20 MON  (0) 2012.08.23
짝수 공식  (0) 2012.05.16
$F, $FF 의 차이점  (0) 2012.05.04
Posted by scii
:

12.06.18_MON

Houdini/SOP 2012. 7. 7. 04:00 |


exam.hipnc


◎ Vector Normalize (벡터 정규화) 단위 벡터


vector의 normalize 방법 3가지


1. facet 노드의 Make Normals Unit Length.



2. normalize 익스프레션.

 ex) point노드에서 normalize(vector3($NX, $NY, $NZ))[0]

※ [0]은 컴퍼넌트 (x 를 뜻함, [1]이면 y).



3. length 익스프레션.

ex) point 노드에서 1/length($NX, $NY, $NZ) * $NX





◎ Vector Add


두 벡터를 합하면 그 사이에 합한 벡터의 길이만큼의 벡터가 생긴다.




◎ Vector Subtract


$TX2 - $TX

$TY2 - $TY

$TZ2 - $TZ


ex) TX2는 $TX의 위치를 바라보게 된다.



sort 노드를 이용하며 포인트 넘버를 shift 하는 이유?


 - 그것은 각각의 포인트들을 서로 subtract 하기 위해서이다.




◎ Dot Product


dot(vector3($NX, $NY, $NZ), vector3($NX2, $NY2, $NZ2))

# 이렇게 닷을 구하면 벡터의 그림자 길이를 구한다.




※ 각도 구하기(벡터와 벡터의 사이) 

acos(dot(normalize(vector3($NX, $NY, $NZ), normalize(vector3($NX2, $NY2, $NZ2)))



※ Dot Product의 활용 예


dot(normalize(vector3($NX, $NY, $NZ), normalize(vector3($VX, $VY, $VZ))

# 이렇게 닷을 구하면 velocity가 향하는 닷을 구할 수 있다.







◎ Cross Product


- cross product는 vector 사이의 기준을 만듦(축)





# cross product 구하는 또 다른 공식 

point sop의 normals에서...


x = $NX * $NZ2 - $NZ * NY2


y = $NZ * NX2 - $NX * $NZ2


z = $NX * $NY2 - $NY * $NX2



◎ point Expression


point 익스프레션 -> REFout에서 현재 진행중인 모든 포인트의 컬러값 중 R을 가져온다.


'Houdini > SOP' 카테고리의 다른 글

12.06.25_MON  (0) 2012.07.11
12.06.21_THU  (0) 2012.07.10
12.06.07_THU  (0) 2012.07.05
높은 지역에서만 파티클 날리기  (0) 2012.07.04
ramp를 활용한 애니메이션  (0) 2012.05.18
Posted by scii
: