tyFlow中的Script運算子使用 C# 提供對粒子的高階控制。但官方網頁文件並不提供詳細API細節,這是一份自用的翻譯文件,方便大家查閱(版本1.120)
/* /////////////////////////////////////////////////////// /////////////////////////////////////////////////////// ////////// ////////// ////////// 指令碼運算子文件 ////////// ////////// ////////// /////////////////////////////////////////////////////// /////////////////////////////////////////////////////// ///////////// 內建鍵盤快捷鍵 ///////////// // // [CTRL+E] = 評估指令碼 // ///////////////////////////////////////// //////////////// 模擬屬性 //////////////// // // [tyFlow] tf = 當前tyFlow // [INode] node = 當前tyFlow的場景節點 // // [tfObj] obj[XXX] = 在操作員可指令碼化物件列表框中單獨訪問物件(例如:'obj001') // [List] objects = 操作員列表框中所有物件的List<tfObj>(例如:'objects[0]') // // [tfTex] tex[XXX] = 在操作員可指令碼化紋理對映列表框中單獨訪問紋理對映(例如:'tex001') // [List] texmaps = 操作員列表框中所有紋理對映的List<tfTex>(例如:'texmaps[0]') // // [float] f = 當前幀 // [float] frameStep = 當前時間步(幀) // [int] t = 當前刻度 // [int] tickStep = 當前時間步(刻度) // [int] ticksPerFrame = 每幀刻度數 // // [int] eventParticleCount = 指令碼執行前該事件中的粒子數量 // [int] totalParticleCount = 指令碼執行前該模擬中的粒子總數,不包括已刪除的粒子 // [int] rawTotalParticleCount = 指令碼執行前該模擬中的粒子總數,包括已刪除的粒子 // [int] eventTerrainCount = 指令碼執行前該事件中的地形數量 // // [List<int>] GetEventParticles(string eventName) = 獲取具有給定名稱(名稱不區分大小寫)的事件的粒子的模擬索引列表 // /////////////////////////////////////////////////////// //////////////////// 雜項功能 /////////////////// // // [float] GetFloat(string name) = 根據名稱(在幀0時)獲取'Floats'卷展開中的浮點值 // [float] GetFloat(string name, float frame) = 根據名稱(在指定幀)獲取'Floats'卷展開中的浮點值 // // [float] Lerp(float f1, float f2, float interp) = 在兩個數值之間線性插值 // [Point3] Lerp(Point3 f1, Point3 f2, float interp) = 在兩個向量之間線性插值 // [Matrix3] Lerp(Matrix3 tm1, Matrix3 tm2, float interp) = 在兩個矩陣之間線性插值 // [Quat] Lerp(Quat tm1, Quat tm2, float interp) = 在兩個四元數之間線性插值 // // [Matrix3] Inverse(Matrix3 m) = 獲取逆矩陣 // [Matrix3] Matrix3.MatrixFromVector(Point3 v) = 從向量生成正交矩陣,其中向量將是上軸 // // [float] Remap(float f1, float inMin, float inMax, float outMin, float outMax) = 在'in'範圍內重新對映浮點值到'out'範圍 // // [void] Print(object value) = 將值列印到maxscript監聽器(每步最多100次列印) // [void] PrintAll(object value) = 將值列印到maxscript監聽器(無限次列印/步 - 可能導致長時間超時!) // // [void] DrawMarker(Point3 pos, int r, int g, int b) = 在視口中的位置繪製彩色(rgb)標記(必須在[simulationStep]中呼叫) // [void] DrawLine(Point3 pos1, Point3 pos2, int r, int g, int b) = 在視口中的位置繪製彩色(rgb)線(必須在[simulationStep]中呼叫) // [void] DrawTM(Matrix3 tm, float size) = 在視口中繪製三色Matrix3軸(必須在[simulationStep]中呼叫) // /////////////////////////////////////////////////////// ////////////// [tyFlow] 類屬性 ////////////// // // [void] SetThreaded(bool val) = 設定指令碼是否多執行緒(SimulationStepThreaded將由多個執行緒評估) // [void] SetThreadedIterations(int n) = 設定SimulationStepThreaded將從頭到尾重新評估的次數 // [int] GetThreadedIteration() = 獲取正在處理的當前迭代(從SimulationStepThreaded內部呼叫) // // [int] GetSimIndex(int eInx) = 獲取當前事件中粒子的模擬索引 // [int] GetSimIndexFromID(int ID) = 根據其ID獲取粒子的模擬索引 [-1 == 已刪除] // // [int] CopyParticle(int sInx) = 複製模擬索引的粒子並獲取新粒子的事件索引 [警告:非執行緒安全!] // [int] NewParticle() = 生成新粒子並獲取其事件索引 [警告:非執行緒安全!] // [int] NewParticles() = 生成指定數量的新粒子並獲取第一個粒子的事件索引(比多次呼叫NewParticle更快)[警告:非執行緒安全!] // [void] DeleteParticle(int sInx) = 透過模擬索引刪除粒子 // // [void] TestTrue(int eInx) = 設定事件粒子的測試條件為真 // [void] OutputParticle(int eInx) = 等同於TestTrue(eInx) // // [int] GetID(int sInx) = 從模擬索引獲取粒子ID // [int] GetParentID(int sInx) = 從模擬索引獲取父粒子ID // // [float] GetAge(int sInx) = 從模擬索引獲取粒子年齡(以幀為單位) // [int] GetAgeTicks(int sInx) = 從模擬索引獲取粒子年齡(以刻度為單位) // [float] GetEventAge(int sInx) = 從模擬索引獲取粒子事件年齡(以幀為單位) // [int] GetEventAgeTicks(int sInx) = 從模擬索引獲取粒子事件年齡(以刻度為單位) // // [Point3] GetPos(int sInx) = 從模擬索引獲取粒子位置 // [Quat] GetRot(int sInx) = 從模擬索引獲取粒子旋轉(四元數)值 // [Point3] GetScale(int sInx) = 從模擬索引獲取粒子縮放 // [Matrix3] GetTM(int sInx) = 從模擬索引獲取粒子變換 // [Point3] GetSpin(int sInx) = 從模擬索引獲取粒子自旋 // [Point3] GetVel(int sInx) = 從模擬索引獲取粒子速度 // [int] GetSimulationGroups(int sInx) = 獲取粒子模擬組標誌(1 << [0-15]) // [int] GetExportGroups(int sInx) = 獲取粒子匯出組標誌(1 << [0-15]) // [int] GetMatID(int sInx) = 從模擬索引獲取粒子材料ID [範圍1-99] [0 == 未分配] // [Point3] GetUVW(int sInx, int channel) = 從模擬索引和對映通道索引獲取粒子對映UVW [範圍0-99] // [float] GetMass(int sInx) = 獲取粒子繫結質量 // [float] GetRadius(int sInx) = 從模擬索引獲取粒子半徑 // [float] GetVolume(int sInx) = 從模擬索引獲取粒子體積 // // [tfMesh] GetMesh(int sInx) = 獲取粒子形狀網格的tfMesh包裝器 // [void] SetMesh(int sInx, tfMesh mesh) = 從模擬索引和tfMesh設定粒子網格 // [int] GetMeshID(int sInx) = 獲取粒子形狀網格的ID // [void] SetMeshID(int sInx, int meshID) = 設定粒子形狀網格ID // // [void] SetPos(int sInx, Point3 pos) = 從模擬索引設定粒子位置 // [void] SetRot(int sInx, Quat rot) = 從模擬索引設定粒子旋轉(四元數)值 // [void] SetScale(int sInx, Point3 scale) = 從模擬索引設定粒子縮放 // [void] SetTM(int sInx, Matrix3 tm) = 從模擬索引設定粒子變換 // [void] SetSpin(int sInx, Point3 spin) = 從模擬索引設定粒子自旋 // [void] SetVel(int sInx, Point3 vel) = 從模擬索引設定粒子速度 // [void] SetSimulationGroups(int sInx, int flags) = 設定粒子模擬組標誌(1 << [0-15]) // [void] SetExportGroups(int sInx, int flags) = 設定粒子匯出組標誌(1 << [0-15]) // [void] SetMatID(int sInx, int matID) = 從模擬索引設定粒子材料ID [範圍1-99] [0 == 取消分配] // [void] SetUVW(int sInx, int channel, Point3 uvw) = 從模擬索引和對映通道設定粒子對映UVW [範圍0-99] // [void] SetMass(int sInx, float mass) = 從模擬索引設定粒子繫結質量 // // [float] GetCustomFloat(int sInx, string channel) = 從模擬索引獲取粒子自定義浮點數 // [Point3] GetCustomVector(int sInx, string channel) = 從模擬索引獲取粒子自定義向量 // [Matrix3] GetCustomTM(int sInx, string channel) = 從模擬索引獲取粒子自定義變換 // // [void] SetCustomFloat(int sInx, string channel, float val) = 從模擬索引設定粒子自定義浮點數 // [void] SetCustomVector(int sInx, string channel, Point3 val) = 從模擬索引設定粒子自定義向量 // [void] SetCustomTM(int sInx, string channel, Matrix3 val) = 從模擬索引設定粒子自定義變換 // // [float] GetNoise(float x, float y, float z) = 從座標獲取隨機噪聲 // [Point3] GetCurlNoise(int time, Point3 pos, float frequency, float scale, float phase) = 從座標獲取捲曲噪聲 // [Point3] GetTurbulence(int time, Point3 pos, float frequency, float scale, float lacunarity, int octaves, float phase) = 從座標獲取湍流噪聲 // // [void] SetSeed(int sInx, int seed) = 從模擬索引設定粒子隨機種子 // [int] GetRandInt(int sInx, int min, int max) = 從模擬粒子獲取隨機整數 [>= min && < max] // [float] GetRandFloat(int sInx, float min, float max) = 從模擬粒子獲取隨機浮點數 [>= min && <= max] // [Point3] GetRandVector(int sInx) = 從模擬粒子獲取單位球上的隨機向量 // // [void] SetBindsActive(int sInx, bool val) = 設定粒子是否受其繫結影響 // [List<tfBind>] GetBinds(int sInx) = 獲取粒子的繫結 [警告:非執行緒安全!] // [void] SetBinds(List<tfBind> binds) = 對使用GetBinds檢索的粒子繫結應用更改 [警告:非執行緒安全!] // [void] NewBind(int sInx1, int sInx2, int id, float length, float stiffness) = 在它們的模擬索引之間建立兩個粒子的新繫結 [警告:非執行緒安全!] // // [void] PrepNeighbors(bool addVelocities) = 構建用於進行鄰居搜尋的資料結構,可選擇整合速度。必須在任何呼叫"GetNeighbors"之前呼叫此方法 [警告:在粒子迴圈外呼叫!] // [void] PrepNeighbors(bool addVelocities, List<int> neighborCandidates) = 與上述'PrepNeighbors'相同,但您可以指定定義將新增到搜尋結構中的粒子的模擬索引列表 // [void] PrepNeighbors(List<Point3> neighborPositions) = 與上述'PrepNeighbors'相同,但您可以指定定義將新增到搜尋結構中的點的位置列表 // [List<int>] GetNeighbors(Point3 pos, float radius) = 獲取位置半徑內的粒子的模擬索引 // [int] GetNearestNeighbor(Point3 pos, int excludeSInx) = 獲取最近的粒子的模擬索引,可以指定一個模擬索引在搜尋中被忽略(-1表示任何索引都可以) // // [void] UpdatePhysXTM(int sInx) = 更新現有粒子的PhysX變換【警告:非執行緒安全!】 // [bool] PhysXOverlapTest(int sInx1, Matrix3 tm1, int sInx2, Matrix3 tm2) = 如果兩個PhysX粒子殼體重疊,返回true,根據模擬索引和變換 // [bool] PhysXSweepTest(int sInx, Matrix3 tm, Point3 sweepVec, bool includeSelf) = 如果一個PhysX粒子殼體與另一個PhysX粒子重疊,返回true,根據模擬索引、變換和掃描向量【includeSelf == 掃描測試將包括查詢粒子】 // // [tfObj] GetObject(string name) = 透過名稱獲取場景物件的tfObj包裝器 // [tfObj] GetObject(int handle) = 透過控制代碼獲取場景物件的tfObj包裝器 // // [tfTerrain] GetTerrain(string name) = 透過名稱獲取現有的tfTerrain // [tfTerrain] GetTerrain(int inx) = 透過索引獲取現有的tfTerrain // /////////////////////////////////////////////////////// ///////////// [tfTex] 類屬性 //////////////// // // [float] GetMonoVal(int t, Point3 uvw) = 根據時間(以ticks為單位)和UVW座標(範圍:0.0 - 1.0)獲取紋理單色值 // [Point3] GetColorVal(int t, Point3 uvw, bool gamma) = 根據時間(以ticks為單位)和UVW座標(範圍:0.0 - 1.0)獲取紋理顏色值(可選,伽馬校正) // /////////////////////////////////////////////////////// ///////////// [tfBounds] 類屬性 //////////////// // // [Point3] min = 邊界框的最小範圍 // [Point3] max = 邊界框的最大範圍 // /////////////////////////////////////////////////////// ///////////// [tfMesh] 類屬性 //////////////// // // [int] GetNumFaces() = 獲取tfObj中的網格面數 // [int] GetNumVerts() = 獲取tfObj中的網格頂點數 // // [tfFace] GetFace(int inx) = 從索引獲取面 // [Point3] GetVert(int inx) = 從索引獲取頂點位置 // // [Point3] GetNormal(int vInx) = 從頂點索引獲取網格上的法線 // [Point3] GetVel(int vInx) = 從頂點索引獲取網格上的速度 // [Point3] GetUVW(int vInx, int channel) = 從頂點索引和對映通道獲取網格上的UVW // // [Point3] GetRandPointOnMesh(int seed) = 使用種子獲取網格上的隨機點 // [tfFace] GetRandFaceOnMesh(int seed) = 使用種子獲取網格上的隨機面 // [int] GetRandVertOnMesh(int seed) = 使用種子獲取網格上的隨機頂點 // // [tfBounds] GetBounds() = 獲取網格的區域性邊界 // [Point3] GetPosOffset() = 獲取網格的區域性樞軸位置偏移 // /////////////////////////////////////////////////////// ///////////// [tfObj] 類屬性 //////////////// // // [tfMesh] GetMesh() = 獲取tfObj的網格 // // [Matrix3] GetTM() = 獲取tfObj的世界空間變換 // [Point3] GetPos() = 獲取tfObj的世界空間位置 // [Quat] GetRot() = 獲取tfObj的世界空間旋轉(四元數) // [Point3] GetScale() = 獲取tfObj的世界空間縮放 // // [tfFace] GetClosestFace(Point3 p) = 從點獲取網格上最近的面(混合) // [tfFace] GetClosestFaceAccurate(Point3 p) = 從點獲取網格上最近的面(精確) // [int] GetClosestVert(Point3 p) = 從點獲取網格上最近的頂點索引 // // [Point3] GetClosestNormal(Point3 p) = 從點獲取網格上最近的法線 // [Point3] GetClosestPoint(Point3 p) = 從點獲取網格上最近的點(混合) // [Point3] GetClosestPointAccurate(Point3 p) = 從點獲取網格上最近的點(精確) // [Point3] GetClosestUVW(Point3 p, int channel) = 從點和對映通道獲取網格上最近的UVW座標 // [Point3] GetClosestVel(Point3 p) = 從點獲取網格上最近的速度 // [Point3] GetClosestBary(Point3 p) = 從點獲取網格上最近的重心座標 // // [RayHit] GetRaycastHit(Point3 p, Point3 dir) = 向網格投射一條射線(從p沿dir方向)並返回命中資料 // // [bool] PointInside(Point3 p) = 測試點是否在網格內 // /////////////////////////////////////////////////////// ///////////// [tfFace] 類屬性 /////////////// // // [int] inx = 獲取面在其網格上的索引 // // [int] v1 = 獲取面的頂點索引1 // [int] v2 = 獲取面的頂點索引2 // [int] v3 = 獲取面的頂點索引3 // // [float] area = 獲取面的面積 // [Point3] normal = 獲取面的法線 // [int] matID = 獲取面的matID // [bool] selected = 獲取面的選擇狀態 // /////////////////////////////////////////////////////// ///////////// [tfBind] 類屬性 /////////////// // // [int] Type() = 獲取繫結的型別(1 = 拉伸,2 = 剪下,3 = 彎曲,4 = 體積) // // [int] id = 獲取繫結的ID // [int] sInx1 = 獲取繫結第一個粒子的模擬索引 // [int] sInx2 = 獲取繫結第二個粒子的模擬索引 // // [float] length = 獲取繫結的靜止長度 // [float] OrigLength() = 獲取繫結的原始靜止長度 // [float] CurrentLength() = 獲取繫結的當前長度 // // [float] stiffness = 獲取繫結的剛度 // [float] OrigStiffness() = 獲取繫結的原始剛度 // // [bool] enableCollisions = 控制繫結是否由CCCS處理 // [bool] enableObjectCollisions = 控制繫結是否與物件碰撞 // [float] collisionThickness = 控制繫結的碰撞厚度 // [float] collisionFriction = 控制繫結的碰撞摩擦力 // // [void] Break() = 斷開繫結 // [void] UnBreak() = 取消斷開繫結 // [bool] IsBroken() = 返回繫結當前是否斷開 // /////////////////////////////////////////////////////// ///////////// [RayHit] 類屬性 /////////////// // // [bool] hit = 如果命中有效,則為true // // [Point3] hitPoint = 獲取命中點 // [int] hitFace = 獲取命中面在網格上的索引 // [Point3] hitBary = 獲取命中點在命中面上的重心座標 // /////////////////////////////////////////////////////// ///////////// [tfTerrain] 類屬性 //////////// // // [string] name = 獲取地形的名稱 // // [int] width = 獲取地形的寬度單元數 // [int] length = 獲取地形的長度單元數 // [Matrix3] tm = 獲取地形的場景變換 // // [Point3] GetColor(string colorChannel, int x, int y) = 獲取指定顏色通道中單元[x, y]的RGB值(作為Point3的XYZ分量) // [void] SetColor(string colorChannel, int x, int y, int r, int g, int b) = 設定指定顏色通道中單元[x, y]的RGB值 // [float] GetHeight(int x, int y) = 獲取地形在單元[x, y]的區域性高度 // [void] SetHeight(int x, int y, float height) = 設定地形在單元[x, y]的區域性高度 // // [Point3] GetPos(int x, int y) = 獲取地形在單元[x, y]的世界空間位置 // [Point3] GetNormal(int x, int y) = 獲取地形在單元[x, y]的世界空間法線 // // [void] UpdateNormals() = 如果您需要在更改高度值後訪問地形的插值法線,請呼叫此方法 // [List<List<Point3>>] GetNormals() = 快取所有法線到列表(使用列表[y][x]與單元座標訪問) // [List<List<float>>] GetHeights() = 快取所有高度到列表(使用列表[y][x]與單元座標訪問) // /////////////////////////////////////////////////////// ////////////// [Point2] 類屬性 ////////////// // // [float] x = 獲取x值 // [float] y = 獲取y值 // /////////////////////////////////////////////////////// ////////////// [Point3] 類屬性 ////////////// // // [float] x = 獲取x值 // [float] y = 獲取y值 // [float] z = 獲取z值 // // [Point3] normalized = 獲取歸一化向量 // [float] magnitude = 獲取向量大小 // [float] sqrMagnitude = 獲取向量平方大小 // // [void] Normalize() = 歸一化向量 // [void] Scale(Point3 p) = 按向量縮放 // // [float] Point3.Angle(Point3 p1, Point3 p2) = 獲取向量之間的角度 // [Point3] Point3.ClampMagnitude(Point3 p1, float length) = 透過最大長度限制向量 // [Point3] Point3.Cross(Point3 p1, Point3 p2) = 獲取向量的叉積 // [float] Point3.Distance(Point3 p1, Point3 p1) = 獲取向量之間的距離 // [float] Point3.Dot(Point3 p1, Point3 p2) = 獲取向量的點積 // [Point3] Point3.Normalize(Point3 p1) = 獲取歸一化向量 // [Point3] Point3.ProjectOnPlane(Point3 p1, Point3 plane) = 將向量投影到平面上 // [Point3] Point3.Reflect(Point3 dir, Point3 plane) = 獲取反射向量 // /////////////////////////////////////////////////////// ////////////// [Point4] 類屬性 ////////////// // // [float] x = 獲取x值 // [float] y = 獲取y值 // [float] z = 獲取z值 // [float] w = 獲取w值 // /////////////////////////////////////////////////////// ////////////// [Matrix3] 類屬性 ///////////// // // [Point3] row1 = 獲取矩陣的第一行(前向) // [Point3] row2 = 獲取矩陣的第二行(右向) // [Point3] row3 = 獲取矩陣的第三行(上向) // [Point3] row4 = 獲取矩陣的第四行(平移) // // [Matrix3] inverted = 獲取逆矩陣 // // [void] PreRotate(int axis, float ang) = 沿(基於0的軸)預旋轉矩陣(角度為ang) // [void] PostRotate(int axis, float ang) = 沿(基於0的軸)後旋轉矩陣(角度為ang) // // [void] Invert() = 逆轉矩陣 // [Point3] Transform(Point3 p) = 使用矩陣變換一個點 // [Point3] VectorTransform(Point3 p) = 使用矩陣變換一個點(不包括平移) // /////////////////////////////////////////////////////// ////////////// [Quat] 類屬性 ///////////// // // [float] x = 獲取四元數的x值 // [float] y = 獲取四元數的y值 // [float] z = 獲取四元數的z值 // [float] w = 獲取四元數的w值 // // [Quat] normalized = 獲取標準化四元數 // [Quat] conjugated = 獲取共軛四元數 // [Quat] inverted = 獲取逆四元數 // // [void] Conjugate() = 共軛四元數 // [void] Invert() = 逆轉四元數 // [void] Normalize() = 標準化四元數 // /////////////////////////////////////////////////////// ////////////// [AngAxis] 類屬性 ///////////// // // [Point3] axis = 獲取AngAxis的軸 // [float] angle = 獲取AngAxis的角度 // /////////////////////////////////////////////////////// //__END__ */