ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 파티클 소스
    웹프로그래밍/LSL(세컨드라이프) 2009. 2. 25. 03:57
    반응형

    // ===================
    // 다음은 Ama Omega라는 분이 만든 파티클 스크립트 0.5버젼입니다. 파티클을 사용하실 분은 이 프로그램을 그대로     //
    // 따다가 변경해서 사용하시면 됩니다. 물론 다른 스크립트도 그렇듯, 이 스크립트도 그대로 붙여넣으면 한글이 깨지   //
    // 므로 되도록  한글 주석 부분은 빼고 복사해 넣어 사용하도록 하세요. 참고로 프리비로 나와 있는 두가지 예시 스크  //

    // 립트를 함께 첨부해 놓았습니다.                                                                                //
    // ============================================================================================================= //

     

    // ============================================================================================================= //
    // 실제로 파티클 시스템에서 사용자가 변경해야 하는 부분은 프로그램 부분이 아니라 아래의 변수 부분의 수치를 변경  //

    // 해 주어야 합니다. 한번 이 부분들을 변경하면서 연구를 해 보세요.                                               //
    // ============================================================================================================= //

     

    // 마스킹 플래그들입니다. TRUE로 설정하면 활성화됩니다.

    integer glow          = FALSE;    // 파티클이 빛이 나게 하는 플래그입니다.
    integer bounce        = FALSE;    // 파티클이 오브젝트의 Z 축 위상으로 튀어오르게 합니다.
    integer interpColor   = TRUE;     // 파티클의 색깔이 인터폴레이션에 의해 점진적으로 변합니다.
    integer interpSize    = TRUE;     // 파티클의 크기가 인터폴레이션에 의해 점진적으로 변합니다.
    integer wind          = TRUE;     // 파티클이 바람의 영향을 받습니다.
    integer followSource  = FALSE;    // 파티클이 대상의 방향을 따라갑니다.
    integer followVel     = FALSE;    // 파티클이 관성 방향을 따라갑니다.

     

    // 패턴은 다음 다섯가지 중 하나를 선택해주세요:
    // PSYS_SRC_PATTERN_EXPLODE           사방으로 폭발하듯 퍼지는 폭발 패턴 파티클입니다.
    // PSYS_SRC_PATTERN_DROP              기준위치에서부터 아래로 떨어지는 파티클입니다. (초기 관성속도 없음)
    // PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY  PSYS_SRC_PATTERN_ANGLE_CONE 의 영역을 제외한 지역으로 퍼지는

    //                                    원뿔 패턴 파티클입니다.
    // PSYS_SRC_PATTERN_ANGLE_CONE        3차원적 원뿔 구조로 퍼지는 원뿔 패턴 파티클입니다.
    // PSYS_SRC_PATTERN_ANGLE             2차원적 호 구조로 퍼지는 원뿔 패턴 파티클입니다.

     

    integer pattern = PSYS_SRC_PATTERN_EXPLODE;

     

    // 파티클이 향하게 될 대상을 지정해주세요.
    // 따로 타겟을 지정하지 않고자 할 경우는 "" 를, 소유자를 향하려면 "owner",
    // 그리고 이 스크립트가 들어있는 오브젝트 자체를 가리키게 하려면 "self"라고
    // 지정하면 되고, 그 외의 경우는 대상 오브젝트의 key를 지정하시면 됩니다.
       
    key target = "";

     

    // 다음은 파티클 변수들입니다.

     

    float age      = 2.5;                 // 각각의 파티클 조각들이 나타났다 사라질 때 까지의 시간입니다.
    float maxSpeed = 0.3;                 // 파티클이 발사되는 최대 속도입니다.
    float minSpeed = 0.8;                 // 파티클이 발사되는 최소 속도입니다.

     

    string texture = "4f714019-c1cf-6b16-994f-44b217022f1a";  // 파티클의 텍스쳐 key값. 공백으로 남겨둘 수도 있습니다.

     

    float startAlpha = 0.8;               // 시작지점의 투명도 값
    float endAlpha = 0.0;                 // 끝 지점의 투명도 값
    vector startColor = <0.5,0.5,0.5>;    // 파티클의 시작지점 색깔 <빨강, 녹색, 파란색>
    vector endColor = <0,0,0>;            // 파티클의 끝 지점 색깔 <빨강, 녹색, 파란색> (interpColor 값이 셋팅된 경우)
    vector startSize = <0.01,0.01,0.0>;   // 파티클의 시작지점 사이즈 <X, Y, Z>
    vector endSize = <2.0,2.0,0.0>;       // 파티클의 시작지점 사이즈 <X, Y, Z> (interpSize 값이 셋팅된 경우)
    vector push = <.2,0,3>;               // 파티클에 가해지는 힘의 정도 <X, Y, Z>

     

    // 다음은 시스템 변수입니다.

    float rate = 0.1;                     // 파티클을 얼마나 빨리(자주) 퍼트릴것인가 입니다 (초 단위).
    float radius = 0.0;                   // 폭발 패턴 하에서 파티클이 퍼지는 각도를 지정합니다.
    integer count = 5;                    // 한 번의 폭발 단위마다 얼마나 많은 파티클이 퍼지는지를 결정하는 수치입니다.
    float outerAngle = 0;                 // 원뿔 패턴에서 외부 각도를 지정합니다.
    float innerAngle = 0.1;               // 원뿔 패턴에서 내부 각도를 지정합니다.
    vector omega = <0,0,0>;               // 원뿔 패턴 파티클의 기준 대상 주변에서 파티클이 회전하는 각도입니다.
    float life = 0;                       // 파티클 시스템이 파티클을 뿌리는 기간을 지정합니다.

    // ============================================================================================================= //
    // 사용하시는 분들이 주로 변경해 주어야 하는 부분은 여기까지입니다. 이하 변수선언과 updateParticles() 함수는     //
    // 굳이 변경하실 필요는 없을 거에요. 그 아래 default 부분은 파티클을 어떠한 조건으로 가동시키고 어떠한 조건으로  //
    // 끌 것인지궁리하셔서 자신이 원하는 대로 바꿔주시면 됩니다.                                                     //
    // ============================================================================================================= //

    integer flags;
    list sys;
    integer type;
    vector tempVector;
    rotation tempRot;
    string tempString;
    integer i;

    updateParticles()
    {
        flags = 0;
        if (target == "owner") target = llGetOwner();
        if (target == "self") target = llGetKey();
        if (glow) flags = flags | PSYS_PART_EMISSIVE_MASK;
        if (bounce) flags = flags | PSYS_PART_BOUNCE_MASK;
        if (interpColor) flags = flags | PSYS_PART_INTERP_COLOR_MASK;
        if (interpSize) flags = flags | PSYS_PART_INTERP_SCALE_MASK;
        if (wind) flags = flags | PSYS_PART_WIND_MASK;
        if (followSource) flags = flags | PSYS_PART_FOLLOW_SRC_MASK;
        if (followVel) flags = flags | PSYS_PART_FOLLOW_VELOCITY_MASK;
        if (target != "") flags = flags | PSYS_PART_TARGET_POS_MASK;
        sys = [  PSYS_PART_MAX_AGE,age,
                 PSYS_PART_FLAGS,flags,
                 PSYS_PART_START_COLOR, startColor,
                 PSYS_PART_END_COLOR, endColor,
                 PSYS_PART_START_SCALE,startSize,
                 PSYS_PART_END_SCALE,endSize,
                 PSYS_SRC_PATTERN, pattern,
                 PSYS_SRC_BURST_RATE,rate,
                 PSYS_SRC_ACCEL, push,
                 PSYS_SRC_BURST_PART_COUNT,count,
                 PSYS_SRC_BURST_RADIUS,radius,
                 PSYS_SRC_BURST_SPEED_MIN,minSpeed,
                 PSYS_SRC_BURST_SPEED_MAX,maxSpeed,
                 PSYS_SRC_TARGET_KEY,target,
                 PSYS_SRC_INNERANGLE,innerAngle,
                 PSYS_SRC_OUTERANGLE,outerAngle,
                 PSYS_SRC_OMEGA, omega,
                 PSYS_SRC_MAX_AGE, life,
                 PSYS_SRC_TEXTURE, texture,
                 PSYS_PART_START_ALPHA, startAlpha,
                 PSYS_PART_END_ALPHA, endAlpha
              ];
        llParticleSystem(sys);
    }

    default
    {
        state_entry()
        {
            updateParticles() ; 
        }
       
    }

    반응형

    댓글

Designed by Tistory.