Also, the deformation is noticeable mainly because the dimensions of
the bitmap that I'm using for the terrain mesh are not square (i.e.
100 x 100).  They're more like 240 x 380 for a variety of reasons.

Ari

On Sep 2, 9:23 pm, Ari Braginsky <[EMAIL PROTECTED]> wrote:
> Perhaps there is some sort of formula that could be applied to the 2D
> coordinate on the mesh such that similar to "undoing" the terrain
> scaling to get the corresponding 2D bitmap coordinate by X and Y by
> the terrain scaling factores, you can "undo" the subdivision by some
> procedure?
>
> This is ultimately what I need to solve this problem...
>
> Ari
>
> On Sep 2, 8:18 pm, Ari Braginsky <[EMAIL PROTECTED]> wrote:
>
> > Li,
>
> > Thank you for your post.  I'm not sure if your solution is the same as
> > the solution that I need for my problem.
>
> > To clarify, I'm moving a point around on a mesh that has a bitmap
> > image inside of it.  When I move that point, I need to track the
> > relative position of that point on the bitmap in normal 2D space in
> > order to measure the pixel color value at that point.
>
> > Because of the subdivision values, the bitmap image inside of the mesh
> > is deformed such that when your point is on top of a feature in the
> > bitmap mesh, it doesn't exactly line up with the same converted (by
> > way of the mesh X and Y scale division method) point on the 2D
> > bitmap.  It is somewhat off.
>
> > I need to be able to adjust for the subdivision distortion.
>
> > Is this similar to your problem that was solved with your solution?
>
> > Thanks,
> > Ari
>
> > On Sep 2, 8:06 pm, Li <[EMAIL PROTECTED]> wrote:
>
> > > Hey Ari,
>
> > > Ive been working with a similar issue in reflections. The solution I used
> > > might be useful to you. The particular problem I had was, once I obtained 
> > > a
> > > 3d point that I knew was on the surface of a plane, what would be the 2d
> > > coordinates of that point on the plane? The solution involved determining
> > > the top side and left side vectors of the plane, obtaining a vector from 
> > > the
> > > top left corner of the plane to the 3d point, and then using dot products 
> > > to
> > > project that vector onto the side vector. That gives you a scalar value 
> > > that
> > > corresponds to the coordinate system transformation of the point.
>
> > > If you think it might help you, here is the code:
>
> > > //Three vertices.
> > >                edgePoint = getVertexGlobalPosition(plane.vertices[0],
> > > plane);
> > >                 var p2:Number3D = 
> > > getVertexGlobalPosition(plane.vertices[1],
> > > plane);
> > >                 var p3:Number3D = 
> > > getVertexGlobalPosition(plane.vertices[4],
> > > plane);
>
> > >                 //Side vectors.
> > >                 topVector = new Number3D();
> > >                 topVector.sub(p2, edgePoint);
> > >                 sideVector = new Number3D();
> > >                 sideVector.sub(p3, edgePoint);
>
> > > wRatio = MovieMaterial(plane.material).movie.width/plane.width;
> > >                 hRatio =
> > > MovieMaterial(plane.material).movie.height/plane.height;
>
> > > //TRANSLATE GLOBAL TO PLANE.
> > >                 //Translates a world 3D point to a corresponding 2D point 
> > > on
> > > the plane's material.
> > >                 private function
> > > translateGlobalToPlane(point:Number3D):Point
> > >                 {
> > >                     /*
> > >                         Finds a vector from one of the corners of the 
> > > plane
> > > to the point,
> > >                         and projects this vector on its sides, considering
> > > scaling.
> > >                     */
> > >                     var v:Number3D = new Number3D();
> > >                     v.sub(point, edgePoint);
> > >                     return new
> > > Point(wRatio*v.dot(topVector)/topVector.modulo, hRatio*(this.height -
> > > v.dot(sideVector)/sideVector.modulo));
> > >                 }
>
> > > //GET VERTEX GLOBAL POSITION.
> > >                 //Translates vertex coordinates to world coordinates.
> > >                 private function getVertexGlobalPosition(vertex:Vertex,
> > > vertexContainer:Object3D):Number3D
> > >                 {
> > >                     var m:Matrix3D = new Matrix3D();
> > >                     m.tx = vertex.x;
> > >                     m.ty = vertex.y;
> > >                     m.tz = vertex.z;
> > >                     m.multiply(vertexContainer.transform, m);
> > >                     return new Number3D(m.tx, m.ty, m.tz);
> > >                 }
>
> > > On Tue, Sep 2, 2008 at 9:34 PM, Ari Braginsky <[EMAIL PROTECTED]> wrote:
>
> > > > I'm having an issue retrieving 2D coordinates off of a mesh based on a
> > > > 3D object's position on the mesh.
>
> > > > You can normally retrieve the 2D coordinates on the bitmap making up
> > > > the mesh by dividing the coordinates of the object by the mesh's X and
> > > > Y scale values (see extrusions/CollisionMap.as class).
>
> > > > However, if you look at the position on the mesh and compare it to the
> > > > raw bitmap, due to some deformations that happen to the mesh with
> > > > certain subdivision values, the objects that appear in the bitmap
> > > > don't line up with the 2D coordinates on the raw bitmap.  If you tweak
> > > > the subdivision values, the objects on the bitmap in the mesh move
> > > > around/get squashed/etc.
>
> > > > Example:
>
> > > > Create a bitmap with a circle in the center filled with the color red.
>
> > > > Create an elevation using a flat height map and use the bitmap for its
> > > > skin.
>
> > > > When rendered in 3D, you will see the red circle in the center of the
> > > > mesh.  If you move your mouse over it, you can translate the 3D
> > > > coordinates into 2D space and divide them by the mesh's X and Y scale
> > > > values to get the real coordinates on the raw bitmap.
>
> > > > What I'm seeing with subdivision values X = 200 and y = 200 is that my
> > > > point on the mesh doesn't correlate to the same point on the 2D bitmap
> > > > when I convert the 3D coordinates to 2D, taking into account the mesh
> > > > scale values.
>
> > > > Is there something else I need to do to account for the subdivision
> > > > values?
>
> > > > If I didn't want any deformation of the mesh, are there subdivision
> > > > values I can use such that 3D points on the mesh would exactly match
> > > > up with 2D points on the associated bitmap?
>
> > > > Thanks,
> > > > Ari

Reply via email to