- Home /
This question was
closed Dec 17, 2012 at 08:21 AM by
Fattie for the following reason:
The question is answered, right answer was accepted
Question by
MountDoomTeam · Dec 16, 2012 at 05:13 PM ·
meshfiltertransformpoint
TransformPoint trouble
I have 2 scripts, one that is added straight to the GameObject to change its mesh,and the same script in a function and it changes the mesh of other game objects. the 2nd code changes the mesh but it seems to ignore the transform.transformpoint function.
This one works:
private var org = Vector3.zero;
var basescale =3;
//var currentobject = gameObject;
private var vtxArray : Vector3[];
var radius = 100;
var transition = 50;
function Start () {
var mesh : Mesh = GetComponent(MeshFilter).mesh;
var scale = basescale;
if (vtxArray == null)
vtxArray = mesh.vertices;
var objectscale = (gameObject.transform.localScale);
var vertices = new Vector3[vtxArray.Length];
for (var i=0;i<vertices.Length;i++)
{
//var vertex = vtxArray[i];
vtxArray[i] = transform.TransformPoint(vtxArray[i]);
var vertex = vtxArray[i];
var dist = Vector3.Distance(org, vtxArray[i]);//lines that set mutation in a bubble and smooth edges
if ( dist > radius ){ scale = 0*basescale;}
if ( dist <= radius && dist >= radius-transition) {scale = ((radius-dist)/transition)*basescale;}
if ( dist < radius-transition ){ scale = 1*basescale;}
vertex.x += Mathf.Sin(vtxArray[i].y*.1 + vtxArray[i].z*.1) * scale;
vertex.y += Mathf.Sin(vtxArray[i].z*.1 + vtxArray[i].x*.1) * scale;
vertex.z += Mathf.Sin(vtxArray[i].x*.1 + vtxArray[i].y*.1) * scale;
vertices[i] = transform.InverseTransformPoint(vertex);
//Debug.Log (vtxArray[i]);
}
mesh.vertices = vertices;
mesh.RecalculateNormals();
mesh.RecalculateBounds();
DestroyImmediate(collider);
gameObject.AddComponent("MeshCollider");
//gameObject.GetComponent(MeshCollider).sharedMesh = gameObject.GetComponent(MeshFilter).mesh;
}
this one doesn't work:
function sinus1 ( multiplier:int ){//this function takes mesh objects and changes their vertices in XY and Z into mountains
//var process : Collider[] = Physics.OverlapSphere(selzone.transform.position, selzone.transform.localScale*1.1;);
var mymeshfilters : MeshFilter[] = FindObjectsOfType(MeshFilter) as MeshFilter[];
for (var mymeshfilter in mymeshfilters) {
var mydistance = Vector3.Distance(selzone.transform.position, mymeshfilter.transform.position);
//print( mydistance );
if ( mydistance < selzone.transform.localScale.x * .5 && mydistance!= 0){
//mymeshfilter.gameObject.AddComponent ("noisemesh");
var org = selzone.transform.position;
var basescale =3;
//var currentobject = gameObject;
var vtxArray : Vector3[];
var radius = transform.localScale.x * .5;
var transition = transform.localScale.x * .25;
var mesh : Mesh = mymeshfilter.mesh;
print( mesh.vertices.length );
var scale = basescale;
if (vtxArray == null)
vtxArray = mesh.vertices;
var objectscale = (gameObject.transform.localScale);
var vertices = new Vector3[vtxArray.Length];
for (var i=0;i<vertices.Length;i++)
{
//var vertex = vtxArray[i];
vtxArray[i] = transform.TransformPoint(vtxArray[i]);
var vertex = vtxArray[i];
var dist = Vector3.Distance(org, vtxArray[i]);//lines that set mutation in a bubble and smooth edges
if ( dist > radius ){ scale = 0*basescale;}
if ( dist <= radius && dist >= radius-transition) {scale = ((radius-dist)/transition)*basescale;}
if ( dist < radius-transition ){ scale = 1*basescale;}
vertex.x += Mathf.Sin(vtxArray[i].y*.1 + vtxArray[i].z*.1) * scale;
vertex.y += Mathf.Sin(vtxArray[i].z*.1 + vtxArray[i].x*.1) * scale;
vertex.z += Mathf.Sin(vtxArray[i].x*.1 + vtxArray[i].y*.1) * scale;
vertices[i] = transform.InverseTransformPoint(vertex);
//Debug.Log (vtxArray[i]);
}
mesh.vertices = vertices;
mesh.RecalculateNormals();
mesh.RecalculateBounds();
DestroyImmediate(collider);
gameObject.AddComponent("MeshCollider");
//gameObject.GetComponent(MeshCollider).sharedMesh = gameObject.GetComponent(MeshFilter).mesh;
}
}
}
Comment
Answer by MountDoomTeam · Dec 17, 2012 at 04:21 AM
vertices[i] = transform.InverseTransformPoint(vertex);
vertices[i] = transform.TransformPoint(vertex);
the above 2 lines have the error, I didn't specify from what objects to calculate the transform point, if I am messing with a 3rd party GameObject I should be writing
vertices[i] = 3rdpartyobject.transform.InverseTransformPoint(vertex);