아는 분이 아이디어를 내주셔서 한번 작성해 본 문자열 함수들


입력한 숫자를 사이사이에 넣어서 문자열로 반환하는 함수





// Append func 


string append(string str, float num)

{

        float len = argc(str);

        string result = eval(num) + " ";


        for(i=0; i<len; i++)

        {

                if(i == (len-1))

                {

                        result += arg(str, i) + " " + num;

                        continue;

                }

                result += arg(str, i) + " " + num + " ";

        }

        if(len != 0)

                return result;

        else

                return "";

}





terahedralize 와 똑같은 효과를 내게할 수 있는... 문자열 패턴을 반환하는 함수.




string appendString(float lastNum)

{

        string result = "";


        for(i=0; i<(lastNum-1); i++)

        {

                if(i == (lastNum-2))

                {

                        result += evals(i) + " " + evals((lastNum-1));

                        continue;

                }

                result += evals(i) + " " + evals((lastNum-1)) + " ";

    }

        return result;

}

Posted by scii
:

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

vex로 코딩해 본 여러가지  (0) 2012.12.11
VEX의 특성  (0) 2012.12.02
나름 약간 변경해본 것...  (0) 2012.11.30
inline code노드  (0) 2012.11.17
Posted by scii
:


curvature_shader.vfl

dturb.vfl

fire_shader.vfl

ex1_.vfl

ex2_.vfl

ex3_dot.vfl

ex4_Quaternion.vfl


cross product 구하기.

vex로 하니까 정말 간단히 된다.


두번째 인풋으로 들어오는 포지션을 원래 포지션의 노말이 가리키도록 하고있다.


카메라의 노말을 구한 후의 일이다.

카메라의 노말과 원래 노말과 dot product를 구하고있다. 그래서 카메라의 노말과 현재 노말이 90도를 넘는지를 판단.


쿼터니언의 회전방식을 적용하고있다.


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

vex로 만들어 본 노이즈의 적용방식  (0) 2012.12.11
VEX의 특성  (0) 2012.12.02
나름 약간 변경해본 것...  (0) 2012.11.30
inline code노드  (0) 2012.11.17
Posted by scii
:

VEX의 특성

Houdini/VEX 2012. 12. 2. 22:43 |



굳이 이렇게까지 할 필요가 없는데 예제로서 간단히 한번 작성해보았다.

참조자로 받는데 리턴까지할 필요는 없지만, 리턴되는 것을 확인하기 위하여!

둘 중 하나를 택하면된다. 리턴으로 받을 것인지... 아니면, 변수를 인자로 보내서 참조자 형태로 할 것인지...참조자(Call-By-Reference)


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

vex로 만들어 본 노이즈의 적용방식  (0) 2012.12.11
vex로 코딩해 본 여러가지  (0) 2012.12.11
나름 약간 변경해본 것...  (0) 2012.11.30
inline code노드  (0) 2012.11.17
Posted by scii
:

sop    // context => sop type

twistScrips(float deg = 0; vector vec = {0,1,0})

{

        vector min, max, center;

        matrix3 mtx3 = {{1,0,0}, {0,1,0}, {0,0,1}};

        float rad = (deg*3.14)/180;

        

        getbbox(min, max);

        center = (min+max)/2;

        

        rad *= ((P.y-min.y) / (max.y-min.y));

        rotate(mtx3, rad, normalize(vec));

        

        P = (P-center) * mtx3 + center;

}

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

vex로 만들어 본 노이즈의 적용방식  (0) 2012.12.11
vex로 코딩해 본 여러가지  (0) 2012.12.11
VEX의 특성  (0) 2012.12.02
inline code노드  (0) 2012.11.17
Posted by scii
:

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

[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.07.09 MON

Houdini/SOP 2012. 7. 22. 16:18 |

◎ foreach 노드는 기본적으로 primitive를 가지고 동작한다.

# each의 tolence는 attribute를 선택했을 때만 사용한다. 만약, 0.001이면 이것을 기준으로 나눈다는 뜻이다.


◎ magnet sop은 R, G, B를 따로따로 컨트롤이 가능.


※ npims()

# 해당 노드의 primitive의 총 개수를 리턴.


※ point sop 보다 attribute create sop이 더 빠르다.


※ prim() 는 point()와 같다.

ex) prim("../ref", $PT, "P", 0) 

# ../ref 경로의 현재진행중인 포인트들의 x축 포지션값을 가지고 온다.


※ closet surface를 만들때는 isooffset sop을 이용한다.


※ strcmp와 비슷한 함수: strmatch

# strcmp는 첫번째 인자가 ASCII 코드상 앞서면 -1을 리턴, 두번째 인자가 앞서면 1을 리턴, 둘 다 같으면 0을 리턴한다.

# strmatch 는 같으면 1, 틀리면 0을 리턴.


◎ ray sop

# normal이 필요하다.

# 내가 원하는 point번호와 primitive의 order를 원할 때 가장 많이 사용한다.

# ray sop을 사용할 때 부딪히지 않으면 절격같은 것이 생기므로 내가 원하는 딱 맞는 것을 transform 으로 조절해서 사용.

(땅을 만들 때, 내가 원하는 point, prim번호로 만들고 싶을 때 그리드를 땅에다 레이를 쏘면 됨)


- point intersection destance

# 광선을 쐇을 때 부딪힌 곳까지의 거리를 계산. (dist라는 attribute를 만들고 값을 저장한다.)

※ dist 는 vector의 길이






- create point group

# 부딪힌 그룹만 포인트 그룹으로 만든다.



- point intersection normal

# 부딪힌 geo의 노말을 쓴다.(geo가 가지고 있는 원래의 노말)


- tolerence

# 얼마나 작은 값까지 허용하여 레이를 적용할 것인지를 조절.


- scale

# 0일때는 디폼이 안되고 1이면 완벽하게 모두 디폼된다. 블래드 sop 처럼.


- lift

# 디폼값에 더하는 값.


- bias

# 레이의 미니멈. 올리면 밑에있는 값은 변하기 않음. (어디부터 어디까지 계산할 것인지)


- sample

# 광선을 여러번쏜다. 숫자가 높으면 느려짐. (1이면 한번쏘고, 2면 두번쏜다.)


- shortest

# 가장 짧은 값


- longest

# 가장 긴 값


- minimum distance

# 현재 나에서 가장 가까운 primitive에 붙는다. 디스턴스 상에서.


- Intersect Farthest Surface

# 활성화하면 가장 멀리있는 것부터 붙는다.


※ attribute transfer sop 은 copy sop보다 유용할 때가 있다.



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

노말 방향으로 폭파  (0) 2013.01.25
12.07.12 THU  (0) 2012.07.23
12.07.05_THU  (0) 2012.07.18
12.07.02_MON  (0) 2012.07.18
12.06.28_THU  (0) 2012.07.12
Posted by scii
:

12.07.02_MON

Houdini/SOP 2012. 7. 18. 01:52 |


eax.hipnc

update.hipnc





# primgroupmask()

# primitive group을 마스크를 씌어 싹다 불러온다. 

ex) primgroupmask("경로명", block_*) => block_으로 시작하는 그룹 싹다 불러옴.


# arg()

# 인자를 번호에 맞게 리턴한다. 

ex) arg("haha hoho", 1) => hoho를 리턴한다. (C언어의 argv와 같음)


# argc()

# 인자의 개수를 리턴한다.

ex) arg("haha hoho") => 2가 리턴. (C언어의 argc와 같음)


# opdigits()

# 인자안에 있는 숫자를 리턴.


※ exhelp -k opd

# 이렇게 "-k" 옵션을 주면 opd로 시작하는 모든 익스프레션이 출력된다.


※ exhelp -k string

# string에 관련된 모든 익스프레션이 출력된다.


◎ foreach sop

# 반복문과 같은 역할을한다.



exam2.hipnc




갑자기 영화 제목이 기억이 안나네... 아무튼 그 영화에서 큐브모양으로 부서지는 원리가 이런 원리로 만들었다고 한다.

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

12.07.09 MON  (0) 2012.07.22
12.07.05_THU  (0) 2012.07.18
12.06.28_THU  (0) 2012.07.12
12.06.25_MON  (0) 2012.07.11
12.06.21_THU  (0) 2012.07.10
Posted by scii
: