mirror of
https://github.com/OpenTrespasser/JurassicParkTrespasser.git
synced 2024-12-24 01:21:57 +00:00
336 lines
12 KiB
Plaintext
336 lines
12 KiB
Plaintext
|
-- **********************************************************************************************
|
|||
|
-- *
|
|||
|
-- * Copyright <20> DreamWorks Interactive, 1997
|
|||
|
-- *
|
|||
|
-- * Contents:
|
|||
|
-- * Implementation of UVTools.ms
|
|||
|
-- * Bugs:
|
|||
|
-- *
|
|||
|
-- * To do:
|
|||
|
-- *
|
|||
|
-- * Notes:
|
|||
|
-- *
|
|||
|
-- **********************************************************************************************
|
|||
|
|
|||
|
fn UpdateUVsByFace obj FaceArray u v TVertData TVertList =
|
|||
|
(
|
|||
|
vc = TVertData.count
|
|||
|
for i = 1 to vc do
|
|||
|
(
|
|||
|
local CTvert = [TVertData[i].x as float, TVertData[i].y as float, TVertData[i].z as float]
|
|||
|
setTvert obj TvertList[i] [CTvert.x + u, CTvert.y + v, CTvert.z]
|
|||
|
)
|
|||
|
Update obj
|
|||
|
)
|
|||
|
|
|||
|
fn ScaleUVsByFace Cobj FaceArray u v TVertData TVertIndices =
|
|||
|
(
|
|||
|
vc = TVertData.count
|
|||
|
for i = 1 to vc do
|
|||
|
(
|
|||
|
local CTvert = [TVertData[i].x as float, TVertData[i].y as float, TVertData[i].z as float]
|
|||
|
CTvert.x = CTvert.x * u as float
|
|||
|
CTvert.y = CTvert.y * v as float
|
|||
|
setTvert Cobj TVertIndices[i] CTVert
|
|||
|
)
|
|||
|
Update Cobj
|
|||
|
)
|
|||
|
|
|||
|
fn RotateUV obj FaceArray angle TVertArray TVertList UShift VShift =
|
|||
|
(
|
|||
|
UBase = 10000
|
|||
|
VBase = 10000
|
|||
|
UMax = -10000
|
|||
|
VMax = -10000
|
|||
|
|
|||
|
for i = 1 to TVertArray.count do
|
|||
|
(
|
|||
|
local CTvert = TVertArray[i]
|
|||
|
if CTvert.x < UBase do UBase = CTvert.x
|
|||
|
if CTvert.y < VBase do VBase = CTvert.y
|
|||
|
if CTvert.x > UMax do UMax = CTvert.x
|
|||
|
if CTvert.y > VMax do VMax = CTvert.y
|
|||
|
)
|
|||
|
|
|||
|
vc = TVertArray.count
|
|||
|
offsetX = (UBase + ((UMax - UBase) * 0.5))
|
|||
|
offsetY = (VBase + ((VMax - VBase) * 0.5))
|
|||
|
|
|||
|
for i = 1 to vc do
|
|||
|
(
|
|||
|
CTvert = TVertArray[i]
|
|||
|
u = ((((CTVert.x - offsetX) * cos(angle)) - ((CTVert.y - offsetY) * sin(angle)))) + offsetX
|
|||
|
v = ((((CTVert.x - offsetX) * sin(angle)) + ((CTVert.y - offsetY) * cos(angle)))) + offsetY
|
|||
|
setTvert obj TvertList[i] [u, v, CTvert.z]
|
|||
|
)
|
|||
|
Update obj
|
|||
|
)
|
|||
|
|
|||
|
Utility UVTools "UV Tools"
|
|||
|
(
|
|||
|
|
|||
|
local FaceArray, TVertArray, TVertArrayA, RebuildUVs, RebuildUVsR, RebuildUVsS, CObj, OldU, OldV, NewNumU, NewNumV, OriginalTVertArray, NewScaleU, NewScaleV, TVertIndices, TVertData
|
|||
|
|
|||
|
label ObjectLabel "Object:" align:#left
|
|||
|
pickbutton PickObject "" width:100 offset:[3,-20] align:#right
|
|||
|
radiobuttons FacesGroup labels:#("All Faces", "Face Selection")
|
|||
|
group ""
|
|||
|
(
|
|||
|
spinner ShiftU "Shift u:" range:[-100,100,0] type:#float offset:[0,0] fieldwidth:45 enabled:false
|
|||
|
spinner ShiftV "Shift v" range:[-100,100,0] type:#float fieldwidth:45 enabled:false
|
|||
|
Spinner RotateUVs "Rotation:" range:[-1800,1800,0] enabled:false fieldwidth:45
|
|||
|
spinner ScaleU "Scale u: " range:[0.01,1000,100] enabled:false fieldwidth:45
|
|||
|
spinner ScaleV "Scale v: " range:[0.01,1000,100] enabled:false fieldwidth:45
|
|||
|
checkbox LockScale "Lock Scale" align:#right enabled:false checked:true
|
|||
|
)
|
|||
|
|
|||
|
on facesGroup changed state do
|
|||
|
(
|
|||
|
RebuildUVs = true
|
|||
|
RebuildUVsR = true
|
|||
|
RebuildUVsS = true
|
|||
|
RotateUVs.value = 0
|
|||
|
ScaleU.value = ScaleV.value = 100
|
|||
|
)
|
|||
|
|
|||
|
-- ***************************************************************************************************
|
|||
|
on PickObject picked obj do
|
|||
|
(
|
|||
|
CObj = obj
|
|||
|
ConvertToMesh CObj
|
|||
|
PickObject.text = obj.name
|
|||
|
vertexArray = TVertArrayA = #()
|
|||
|
if FacesGroup.state == 1 then
|
|||
|
(
|
|||
|
fc = CObj.numfaces
|
|||
|
FaceArray = for i = 1 to fc collect i
|
|||
|
) else (
|
|||
|
FaceArray = getFaceSelection CObj
|
|||
|
fc = FaceArray.count
|
|||
|
)
|
|||
|
-- build a list of the texture vertices
|
|||
|
for i = 1 to fc do
|
|||
|
(
|
|||
|
CFace = getTVFace CObj FaceArray[i] -- returns a point3 of Texture Verts
|
|||
|
if finditem TVertArrayA Cface.x == 0 do (append TVertArrayA Cface.x)
|
|||
|
if finditem TVertArrayA Cface.y == 0 do (append TVertArrayA Cface.y)
|
|||
|
if finditem TVertArrayA Cface.z == 0 do (append TVertArrayA Cface.z)
|
|||
|
)
|
|||
|
TVertArray = for i = 1 to TVertArrayA.count collect (getTVert CObj TVertArrayA[i])
|
|||
|
OriginalTVertArray = for i = 1 to TVertArrayA.count collect (getTVert CObj TVertArrayA[i])
|
|||
|
ShiftU.value = ShiftV.value = 0.0
|
|||
|
NewScaleU = NewScaleV = NewNumU = NewNumV = 0
|
|||
|
ScaleU.value = ScaleV.value = 100
|
|||
|
RebuildUVs = true
|
|||
|
RebuildUVsR = true
|
|||
|
RebuildUVsS = true
|
|||
|
ShiftU.enabled = ShiftV.enabled = RotateUVs.enabled = ScaleU.enabled = ScaleV.enabled = LockScale.enabled = true
|
|||
|
)
|
|||
|
|
|||
|
-- ***************************************************************************************************
|
|||
|
-- * Shifting UVs
|
|||
|
-- ***************************************************************************************************
|
|||
|
|
|||
|
on ShiftU changed state do
|
|||
|
(
|
|||
|
if CObj != undefined then
|
|||
|
(
|
|||
|
NewNumU = ShiftU.value
|
|||
|
if RebuildUVs == true do
|
|||
|
(
|
|||
|
vertexArray = TVertArrayA = #()
|
|||
|
if FacesGroup.state == 1 then
|
|||
|
(
|
|||
|
fc = CObj.numfaces
|
|||
|
FaceArray = for i = 1 to fc collect i
|
|||
|
) else (
|
|||
|
FaceArray = getFaceSelection CObj
|
|||
|
fc = FaceArray.count
|
|||
|
)
|
|||
|
-- build a list of the texture vertices
|
|||
|
for i = 1 to fc do
|
|||
|
(
|
|||
|
CFace = getTVFace CObj FaceArray[i] -- returns a point3 of Texture Verts
|
|||
|
if finditem TVertArrayA Cface.x == 0 do (append TVertArrayA Cface.x)
|
|||
|
if finditem TVertArrayA Cface.y == 0 do (append TVertArrayA Cface.y)
|
|||
|
if finditem TVertArrayA Cface.z == 0 do (append TVertArrayA Cface.z)
|
|||
|
)
|
|||
|
TVertArray = for i = 1 to TVertArrayA.count collect (getTVert CObj TVertArrayA[i])
|
|||
|
OriginalTVertArray = for i = 1 to TVertArrayA.count collect (getTVert CObj TVertArrayA[i])
|
|||
|
RebuildUVs = false
|
|||
|
)
|
|||
|
UpdateUVsByFace CObj FaceArray -NewNumU ShiftV.value TVertArray TVertArrayA
|
|||
|
RotateUVs.value = 0
|
|||
|
ScaleU.value = ScaleV.value = 100
|
|||
|
RebuildUVsR = true
|
|||
|
RebuildUVsS = true
|
|||
|
) else (
|
|||
|
MessageBox "No object defined"
|
|||
|
ShiftU.enabled = ShiftV.enabled = RotateUVs.enabled = ScaleU.enabled = ScaleV.enabled = LockScale.enabled = false
|
|||
|
)
|
|||
|
)
|
|||
|
|
|||
|
on ShiftV changed state do
|
|||
|
(
|
|||
|
if CObj != undefined then
|
|||
|
(
|
|||
|
NewNumV = ShiftV.value
|
|||
|
if RebuildUVs == true do
|
|||
|
(
|
|||
|
vertexArray = TVertArrayA = #()
|
|||
|
if FacesGroup.state == 1 then
|
|||
|
(
|
|||
|
fc = CObj.numfaces
|
|||
|
FaceArray = for i = 1 to fc collect i
|
|||
|
) else (
|
|||
|
FaceArray = getFaceSelection CObj
|
|||
|
fc = FaceArray.count
|
|||
|
)
|
|||
|
-- build a list of the texture vertices
|
|||
|
for i = 1 to fc do
|
|||
|
(
|
|||
|
CFace = getTVFace CObj FaceArray[i] -- returns a point3 of Texture Verts
|
|||
|
if finditem TVertArrayA Cface.x == 0 do (append TVertArrayA Cface.x)
|
|||
|
if finditem TVertArrayA Cface.y == 0 do (append TVertArrayA Cface.y)
|
|||
|
if finditem TVertArrayA Cface.z == 0 do (append TVertArrayA Cface.z)
|
|||
|
)
|
|||
|
TVertArray = for i = 1 to TVertArrayA.count collect (getTVert CObj TVertArrayA[i])
|
|||
|
OriginalTVertArray = for i = 1 to TVertArrayA.count collect (getTVert CObj TVertArrayA[i])
|
|||
|
RebuildUVs = false
|
|||
|
)
|
|||
|
UpdateUVsByFace CObj FaceArray -ShiftU.value NewNumV TVertArray TVertArrayA
|
|||
|
RotateUVs.value = 0
|
|||
|
ScaleU.value = ScaleV.value = 100
|
|||
|
RebuildUVsR = true
|
|||
|
RebuildUVsS = true
|
|||
|
) else (
|
|||
|
MessageBox "No object defined"
|
|||
|
ShiftU.enabled = ShiftV.enabled = RotateUVs.enabled = ScaleU.enabled = ScaleV.enabled = LockScale.enabled = false
|
|||
|
)
|
|||
|
)
|
|||
|
|
|||
|
-- ***************************************************************************************************
|
|||
|
-- * Rotating UVs
|
|||
|
-- ***************************************************************************************************
|
|||
|
on RotateUVs changed state do
|
|||
|
(
|
|||
|
if CObj != undefined then
|
|||
|
(
|
|||
|
if RebuildUVsR == true do
|
|||
|
(
|
|||
|
format "Rebuilding Rotation UV's\n"
|
|||
|
vertexArray = TVertArrayA = #()
|
|||
|
if FacesGroup.state == 1 then
|
|||
|
(
|
|||
|
fc = CObj.numfaces
|
|||
|
FaceArray = for i = 1 to fc collect i
|
|||
|
) else (
|
|||
|
FaceArray = getFaceSelection CObj
|
|||
|
fc = FaceArray.count
|
|||
|
)
|
|||
|
-- build a list of the texture vertices
|
|||
|
for i = 1 to fc do
|
|||
|
(
|
|||
|
CFace = getTVFace CObj FaceArray[i] -- returns a point3 of Texture Verts
|
|||
|
if finditem TVertArrayA Cface.x == 0 do (append TVertArrayA Cface.x)
|
|||
|
if finditem TVertArrayA Cface.y == 0 do (append TVertArrayA Cface.y)
|
|||
|
if finditem TVertArrayA Cface.z == 0 do (append TVertArrayA Cface.z)
|
|||
|
)
|
|||
|
TVertArray = for i = 1 to TVertArrayA.count collect (getTVert CObj TVertArrayA[i])
|
|||
|
)
|
|||
|
RebuildUVsR = false
|
|||
|
RebuildUVsS = true
|
|||
|
RebuildUVs = true
|
|||
|
RotateUV CObj FaceArray RotateUVs.value TVertArray TVertArrayA ShiftU.value ShiftV.value
|
|||
|
ScaleU.value = ScaleV.value = 100
|
|||
|
) else (
|
|||
|
MessageBox "No object defined"
|
|||
|
ShiftU.enabled = ShiftV.enabled = RotateUVs.enabled = ScaleU.enabled = ScaleV.enabled = LockScale.enabled = false
|
|||
|
)
|
|||
|
)
|
|||
|
|
|||
|
-- ***************************************************************************************************
|
|||
|
-- * Scaling UVs
|
|||
|
-- ***************************************************************************************************
|
|||
|
on ScaleU changed state do
|
|||
|
(
|
|||
|
if CObj != undefined then
|
|||
|
(
|
|||
|
if LockScale.checked do
|
|||
|
ScaleV.value = ScaleU.value
|
|||
|
NewScaleU = ScaleU.value * 0.01
|
|||
|
NewScaleV = ScaleV.value * 0.01
|
|||
|
if RebuildUVsS == true do
|
|||
|
(
|
|||
|
format "Rebuilding Scale UV's\n"
|
|||
|
TVertIndices = #()
|
|||
|
if FacesGroup.state == 1 then
|
|||
|
(
|
|||
|
fc = CObj.numfaces
|
|||
|
FaceArray = for i = 1 to fc collect i
|
|||
|
) else (
|
|||
|
FaceArray = getFaceSelection CObj
|
|||
|
fc = FaceArray.count
|
|||
|
)
|
|||
|
-- build a list of the texture vertices
|
|||
|
for i = 1 to fc do
|
|||
|
(
|
|||
|
CFace = getTVFace CObj FaceArray[i] -- returns a point3 of Texture Verts
|
|||
|
if finditem TVertIndices Cface.x == 0 do (append TVertIndices Cface.x)
|
|||
|
if finditem TVertIndices Cface.y == 0 do (append TVertIndices Cface.y)
|
|||
|
if finditem TVertIndices Cface.z == 0 do (append TVertIndices Cface.z)
|
|||
|
)
|
|||
|
TVertData = for i = 1 to TVertIndices.count collect (getTVert CObj TVertIndices[i])
|
|||
|
RebuildUVsS = false
|
|||
|
)
|
|||
|
ScaleUVsByFace CObj FaceArray NewScaleU NewScaleV TVertData TVertIndices
|
|||
|
RotateUVs.value = 0
|
|||
|
RebuildUVsR = true
|
|||
|
RebuildUVs = true
|
|||
|
) else (
|
|||
|
MessageBox "No object defined"
|
|||
|
ShiftU.enabled = ShiftV.enabled = RotateUVs.enabled = ScaleU.enabled = ScaleV.enabled = LockScale.enabled = false
|
|||
|
)
|
|||
|
)
|
|||
|
|
|||
|
on ScaleV changed state do
|
|||
|
(
|
|||
|
if CObj != undefined then
|
|||
|
(
|
|||
|
if LockScale.checked do
|
|||
|
ScaleU.value = ScaleV.value
|
|||
|
NewScaleU = ScaleU.value * 0.01
|
|||
|
NewScaleV = ScaleV.value * 0.01
|
|||
|
if RebuildUVsS == true do
|
|||
|
(
|
|||
|
format "Rebuilding Scale UV's\n"
|
|||
|
TVertIndices = #()
|
|||
|
if FacesGroup.state == 1 then
|
|||
|
(
|
|||
|
fc = CObj.numfaces
|
|||
|
FaceArray = for i = 1 to fc collect i
|
|||
|
) else (
|
|||
|
FaceArray = getFaceSelection CObj
|
|||
|
fc = FaceArray.count
|
|||
|
)
|
|||
|
-- build a list of the texture vertices
|
|||
|
for i = 1 to fc do
|
|||
|
(
|
|||
|
CFace = getTVFace CObj FaceArray[i] -- returns a point3 of Texture Verts
|
|||
|
if finditem TVertIndices Cface.x == 0 do (append TVertIndices Cface.x)
|
|||
|
if finditem TVertIndices Cface.y == 0 do (append TVertIndices Cface.y)
|
|||
|
if finditem TVertIndices Cface.z == 0 do (append TVertIndices Cface.z)
|
|||
|
)
|
|||
|
TVertData = for i = 1 to TVertIndices.count collect (getTVert CObj TVertIndices[i])
|
|||
|
RebuildUVsS = false
|
|||
|
)
|
|||
|
ScaleUVsByFace CObj FaceArray NewScaleU NewScaleV TVertData TVertIndices
|
|||
|
RotateUVs.value = 0
|
|||
|
RebuildUVsR = true
|
|||
|
RebuildUVs = true
|
|||
|
) else (
|
|||
|
MessageBox "No object defined"
|
|||
|
ShiftU.enabled = ShiftV.enabled = RotateUVs.enabled = ScaleU.enabled = ScaleV.enabled = LockScale.enabled = false
|
|||
|
)
|
|||
|
)
|
|||
|
)
|