jrand 함수의 예제 파일:

myCustom_jrand_exam.hipnc


jrand 함수의 소스 코드:

Houdini_Jeon_jrand.txt


밑의 캡쳐 사진에서 보면 Houdini의 rand() 함수는 숫자가 중복된다. 

숫자가 중복되지 않도록 하기 위해 고민을 하다가, 그냥 Houdini 내의 함수로 만들었다.  Houdini의 내장 함수를 만들 때, 문법 상 안되는 것들이 상당히 많아서 골머리를 썩었지만 다른 방식으로 해결되어서 참 좋다.

jrand 함수를 만들었는데 사용법은 이렇다.

jrand(최소범위, 최대범위, 생성할 난수 개수) 이렇게 3개의 인자를 받고 그에 맞는 난수를 생성해 준다. 중복되지 않는 숫자들로만!!


그리고, 시스템 시간으로 seed값을 주어서 jrand를 적용한 노드의 작은 변화가 생겨도 난수가 바뀌도록 하였다. 그 외의 노드에서 변경 안됨. 



Posted by scii
:

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


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





// 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
:
우선 후디니의 distance() 함수는 float 자료형 6개를 받아서 두 점간의 거리를 구해주는 함수이다.

정말 좋은 함수이다.

하지만 내가 원했던 것은 한 포인트를 중심으로 그 포인트와의 모든 포인트의 거리를 구해주는 함수가 필요했다.

그래서 기준 포인트를 기점으로 모든 포인트들의 거리를 구해주는 함수를 짜봤다.


일단 Houdini에서 제공하는 포인트간의 거리는 구해주는 distance() 함수이다.

0번 포인트와 6번포인트의 거리를 구하고있다.

보다시피 attribute create 노드로 distance() 함수를 쓰면 모든 포인트 속성에 0과 6번 포인트 거리값이 들어간다. 

하지만, 내가 원하는 것은 이런것이 아니었다. 





내가 원하는 것을 나타나기위한 함수 MyDistFunc()


기준이 되는 포인트를 0번 포인트로 잡고있다.


디테일뷰에서 보이듯이, 0번포인트를 기준으로 모든 포인트들의 거리값을 구해주었다. 0번을 기준으로 6번 포인트가 제일 멀어서 가장 높은 값이 나왔다.






컴스텀으로 만든 함수를 가지고 간단한 테스트


기준포인트가 18번 포인트다.


기준 포인트에서 가장 먼 포인트부터 차례대로 지우는 애니메이션.




기준을 잡은 포인트를 기점으로 거리가 먼곳의 포인트들은 녹색이 적게 들어가고 기준포인트의 인접한 포인트일수록 녹색이 많이 들어간다. 


그 색을 기준으로 포인트들을 지워주고 있다.




거리의 따라 색의 변화를 주었다. 기준이 되는 포인트와 가까운 포인트의 색은 녹색이고, 가장 멀리 떨어진 곳은 빨강색이다.


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

숫자가 중복되는 않는 Random Function  (0) 2013.03.28
문자열 관련 함수  (0) 2012.12.19
Houdini 안에서 쓸 수 있는 함수 만들기  (0) 2012.11.20
Posted by scii
:

후디니안에서 쓸 수 있는 함수를 만들어 보았다. 

후디니안에서 존재하는 함수중에 strcmp() 함수가 있는데 두 개의 문자열을 인수로 받아서 두 문자열이 같으면 0을 리턴, 첫번째 문자열이 앞서면(ASCII 상에서) 1을 리턴, 두번째가 앞서면 -1을 리턴하는 함수이다.

그런데, 숫자말고 앞서는 문자열을 출력하고싶어서 strCompare() 라는 함수를 만들어 보았다.



현재 여기서는 bcdf라는 문자열이 앞선다.



여기서는 두 문자열의 같다.


소스코드를 만들어보니까 C++ 언어와 정말 유사하다고 생각했다.

그런데 안되는 부분이 있었다. 함수를 만들면서 반환값이 배열값(배열의 첫번째 주소값)으로 하는 함수를 만들고 싶었는데... float[] asdf() 이런식으로.. float* asdf() 이것도 안되고... 문자열 반환도 주소값을 반환하는건데 배열은 왜...?


여하튼, 컴파일 에러가 난다. 아무래도 후디니 안에서 쓰는 함수의 경우, 반환값이 배열일 필요가 없어서 그런가보다.

attribute create 노드를 봐도 자료형 타입에 배열이 없으니..

그리고, 후디니 안에서 쓰는 함수를 만들 때, int형 자료형 타입을 쓰지못한다... 계속 컴파일 에러가 나서 소스코드를 세밀히 살펴보아도 아무 문제가 안보였는데 int형 자료형 타입을 써서 그러했다.. int형을 왜 못쓰게했는지 그 까닭을 모르겠다.

또한, 변수를 만들때, 자료형 타입을 입력하지 않으면 저절로 float형이 들어간다. 

※ 변수를 초기화해주지 않으면 컴파일 에러발생.

Posted by scii
: