[away3d] Face Normals in Away3DLite

43 views
Skip to first unread message

Michael Iv

unread,
May 2, 2010, 5:38:49 PM5/2/10
to away3d.dev
Hi Guys , I was looking for Normal Face Vector in Lite and found none . I tried to write my own . From my check It seems working ... But I would like to get a confirmation from Math
experts here  .
I used the tuvs to create 2 vectors on the Face plane, then did cross product . Was that right ?

Here is the code:
var face:Face=sp.faces[45];
                var v1:Vector3D=new Vector3D(face.t0,face.u0,face.v0);
                var v2:Vector3D=new Vector3D(face.t1,face.u1,face.v1);
                v1.normalize();
                v1.normalize();
                var normVect:Vector3D=new Vector3D();
                normVect=v1.crossProduct(v2);
               normVect.normalize();


Thanks.
             

--
Michael Ivanov ,Programmer
Neurotech Solutions Ltd.
Flex|Air |3D|Unity|
www.neurotechresearch.com
Tel:054-4962254
explo...@gmail.com
te...@neurotech.co.il

Ken Railey

unread,
May 2, 2010, 10:24:05 PM5/2/10
to away3...@googlegroups.com
So using the texture coordinates is a bit of an unorthodox approach.  I would take the cross product of two face edges and normalize that.  Beyond that, I am not sure why to are normalizing v1 twice (or even once, just skip it).  Also, that call to new Vector3D() when initializing normVect is wasted, since it gets overwritten on the next line.

Also, after a quick glance at svn it seems like the Face class had a normal at some point that is just commented out.  Maybe try using that?

Michael Iv

unread,
May 3, 2010, 1:33:04 AM5/3/10
to away3...@googlegroups.com
You are right , I just like to keep things sorted as much as possible . Actually I thought also about Vertex Vectors , but then desired to try this out .
v1.normalize x2 IS TYPING MISTAKE   :)
Why they commented normal?

Thanks For Help

savagelook

unread,
Jun 21, 2010, 11:09:00 AM6/21/10
to Away3D.dev
I would also like to know why the normals are commented out in
away3dlite, as of the latest trunk revision (2613)? In the mean time
I'm going to use them and see if they work as expected.

On May 3, 1:33 am, Michael Iv <explomas...@gmail.com> wrote:
> You are right , I just like to keep things sorted as much as possible .
> Actually I thought also about Vertex Vectors , but then desired to try this
> out .
> v1.normalize x2 IS TYPING MISTAKE   :)
> Why they commented normal?
>
> Thanks For Help
>
>
>
>
>
> On Mon, May 3, 2010 at 5:24 AM, Ken Railey <ken.rai...@gmail.com> wrote:
> > So using the texture coordinates is a bit of an unorthodox approach.  I
> > would take the cross product of two face edges and normalize that.  Beyond
> > that, I am not sure why to are normalizing v1 twice (or even once, just skip
> > it).  Also, that call to new Vector3D() when initializing normVect is
> > wasted, since it gets overwritten on the next line.
>
> > Also, after a quick glance at svn it seems like the Face class had a normal
> > at some point that is just commented out.  Maybe try using that?
>
> >http://code.google.com/p/away3d/source/browse/trunk/fp10/Away3DLite/s...
>
> > On Sun, May 2, 2010 at 4:38 PM, Michael Iv <explomas...@gmail.com> wrote:
>
> >> Hi Guys , I was looking for Normal Face Vector in Lite and found none . I
> >> tried to write my own . From my check It seems working ... But I would like
> >> to get a confirmation from Math
> >> experts here  .
> >> I used the tuvs to create 2 vectors on the Face plane, then did cross
> >> product . Was that right ?
>
> >> Here is the code:
> >> var face:Face=sp.faces[45];
> >>                 var v1:Vector3D=new Vector3D(face.t0,face.u0,face.v0);
> >>                 var v2:Vector3D=new Vector3D(face.t1,face.u1,face.v1);
> >>                 v1.normalize();
> >>                 v1.normalize();
> >>                 var normVect:Vector3D=new Vector3D();
> >>                 normVect=v1.crossProduct(v2);
> >>                normVect.normalize();
>
> >> Thanks.
>
> >> --
> >> Michael Ivanov ,Programmer
> >> Neurotech Solutions Ltd.
> >> Flex|Air |3D|Unity|
> >>www.neurotechresearch.com
> >> Tel:054-4962254
> >> explomas...@gmail.com
> >> t...@neurotech.co.il
>
> --
> Michael Ivanov ,Programmer
> Neurotech Solutions Ltd.
> Flex|Air |3D|Unity|www.neurotechresearch.com
> Tel:054-4962254
> explomas...@gmail.com
> t...@neurotech.co.il

savagelook

unread,
Jun 21, 2010, 11:33:26 AM6/21/10
to Away3D.dev
Also, why are the vertices of faces now private with no getters or
setters? Why were mapping coordinates used to calculate the normals
instead of the vertices like in Away3D 3.x?

savagelook

unread,
Jun 21, 2010, 11:56:42 PM6/21/10
to Away3D.dev
While I'm still hoping for answers to my questions, I wanted to note
that I uncommented the normals code in the faces in away3dlite and it
works well. I also was able to use it to put basic face linking
functionality into lite. I'll post it up on my blog soon if any is
interested.

Michael Iv

unread,
Jun 22, 2010, 3:10:54 AM6/22/10
to away3...@googlegroups.com
I talked to Rob Bateman about this issue a few weeks ago in relation to another class. He said that some properties became private in order to not be exposed for a regular user .(Still don't understand a reason for this).But you can still access most of these using arcane namespace.

katopz

unread,
Jun 22, 2010, 3:38:01 AM6/22/10
to away3...@googlegroups.com
Hey guys

it's for speed reason, dot access is slower, so private _vertices is just bypass that dot and acting like referrer, you can saw bypass like this every where in lite libs

if you really want to access vertices you can use mesh.vertices and provide faceIndex for each face, or mesh.faces[index]

for normal comment out there is just under development for light somehow,
it's not in my field btw

hth
--
Regards
-----------------------------------------------------------
Todsaporn Banjerdkit, katopz, http://sleepydesign.com
Away3DLite and JigLibFlash Developer Team

savagelook

unread,
Jun 23, 2010, 11:37:42 AM6/23/10
to Away3D.dev
Thanks for the insights katopz.

For anyone interested I have just got face linking (on steroids)
working in lite. All credit goes to the original FaceLink author as
98% is just copied code from there. The rest is just minor
computational changes using Vector3D in the absence of Number3D. The
code I have now requires minor changes to Face.as, but I'm going to
see if I can also do it without changing the source and maintain a
good framerate. I'll post it up once I have it all ironed out.

On Jun 22, 3:38 am, katopz <kat...@gmail.com> wrote:
> Hey guys
>
> it's for speed reason, dot access is slower, so private _vertices is just
> bypass that dot and acting like referrer, you can saw bypass like this every
> where in lite libs
>
> if you really want to access vertices you can use mesh.vertices and provide
> faceIndex for each face, or mesh.faces[index]
>
> for normal comment out there is just under development for light somehow,
> it's not in my field btw
>
> hth
>
> On 22 June 2010 14:10, Michael Iv <explomas...@gmail.com> wrote:
>
>
>
>
>
> > I talked to Rob Bateman about this issue a few weeks ago in relation to
> > another class. He said that some properties became private in order to not
> > be exposed for a regular user .(Still don't understand a reason for
> > this).But you can still access most of these using arcane namespace.
>
> > explomas...@gmail.com
> > t...@neurotech.co.il
>
> --
> Regards
> -----------------------------------------------------------
> Todsaporn Banjerdkit, katopz,http://sleepydesign.com

savagelook

unread,
Jun 24, 2010, 9:00:15 AM6/24/10
to Away3D.dev
http://savagelook.com/blog/away3d/away3dlite-normals-and-face-linking

normals and face linking in away3dlite. The face linking is not a
rolled up class like FaceLink in Away3D since the modifications were
minimal. I did make changes to Face.as to include a normal and center
at creation time, so as long as you don't deform the mesh, everything
should work. If you do deform the mesh (like with as3mod or manually)
you would just need to recalculate the normal and center for each face
affected.

One note, katopz mentioned that you could access a face's vertices
through face.mesh.vertices, but I never got around to trying that. By
doing that and maintaining your own vectors of face centers and
normals, you could create this face linking code without making
changes to Face.as, if you were so inclined.

Michael Iv

unread,
Jun 24, 2010, 9:58:18 AM6/24/10
to away3...@googlegroups.com
Thanks for this info :))

Peter Kapelyan

unread,
Jun 24, 2010, 10:44:30 AM6/24/10
to away3...@googlegroups.com
Hmm it doesn't seem aligned to the face (those things should be turning too, no?).
--
___________________

Actionscript 3.0 Flash 3D Graphics Engine

HTTP://AWAY3D.COM

savagelook

unread,
Jun 24, 2010, 12:04:16 PM6/24/10
to Away3D.dev
Shoot, I forgot to mention I didn't do the alignment yet. I'm gonna
make another demo soon using planes to show the alignment part.
Should look pretty neat with just the planes and an invisible source
mesh.

On Jun 24, 10:44 am, Peter Kapelyan <flashn...@gmail.com> wrote:
> Hmm it doesn't seem aligned to the face (those things should be turning too,
> no?).
>

savagelook

unread,
Jun 24, 2010, 11:08:00 PM6/24/10
to Away3D.dev
http://www.savagelook.com/demos/normals_align/sandbox.html

I started on the alignment but I had a problem. For some reason the
planes keep rotating along the normals even after adding the lookAt()
call when I'm updating the linked planes. Can anyone who knows 3d
math better than me explain why this is happening, its in the link
above. Thanks, its driving me nuts and I can't figure it out.

Shawn

unread,
Jun 25, 2010, 3:59:37 AM6/25/10
to Away3D.dev
I believe the problem is with the lookAt's upAxis. lookAt first points
the z axis at the target and then tries to align a local up axis with
the scene's Y_AXIS. So, as your faces move they keep adjusting to
match their up axes with the scene's Y_AXIS.

Unless you want to use parenting, the only way I know to fix this is
to use an "up object" to aim the up axis at after the lookAt has been
done. I have a test of an up object with a link to the code here:
http://moosemouse.com/up-object-test.html

I have been using this for something quite different so it may not
immediately make sense to your project. But I *think* this is one way
to fix your problem. It is late so I am calling it a night, but let me
know if you would like further clarification.

Best,
Shawn

savagelook

unread,
Jun 25, 2010, 8:22:26 AM6/25/10
to Away3D.dev
I'm looking at your code now to see how I can apply it, but what do
you mean by "use parenting" to solve this problem? I'm open to
anything.
> ...
>
> read more »

savagelook

unread,
Jun 25, 2010, 9:02:51 AM6/25/10
to Away3D.dev
Well, I think your code/math is over my head for now, but I get what
you meant by parenting. I put the source object and the linked
objects inside an ObjectContainer3D and everything works as expected.
This should suit my needs for now. I've got a book on 3d math I
ordered a little while ago that I haven't had time to dive into yet.
Looks like this might be the catalyst for finally reading it.
> ...
>
> read more »

Shawn

unread,
Jun 25, 2010, 11:36:52 AM6/25/10
to Away3D.dev
Yes, that is how I would have done it with parenting :)
> ...
>
> read more »

savagelook

unread,
Jun 25, 2010, 11:09:20 PM6/25/10
to Away3D.dev
http://savagelook.com/blog/away3d/away3dlite-face-linking-take-2

ok, there's my code using an ObjectContainer3D to keep the alignment
correct. I'm guessing there's a way to do it with upAxis, but it's
beyond me until I do some 3d math studying. Oh, and I left a little
something special for you peter ;)
> > > > > > > > > > >> > > > >>                ...
>
> read more »

katopz

unread,
Jun 25, 2010, 11:32:35 PM6/25/10
to away3...@googlegroups.com
Hey guys

ObjectContainer3D approach is easy, but  it will slow thing down a bit,
if you seek for better speed, you can try apply matrix transforms directly to it vertices (like freeze transforms prev mail)
just like ObjectContainer3D did this automatically while render loop
get rid of ObjectContainer3D will reduce look up time obviously

you can learn this approach via Sprite3D, credit by mr. incredible Rob :)

fyi : it's a bit complex, try it only if you want to learn, need more fps or more headache ;)

hth
--
Regards
-----------------------------------------------------------
Todsaporn Banjerdkit, katopz, http://sleepydesign.com

Peter Kapelyan

unread,
Jun 26, 2010, 9:52:17 AM6/26/10
to away3...@googlegroups.com
Hmmm,

I don't know if to take that as a compliment or if thems fightin' words :O

J/k But, here comes the rain again.

A (the?) correct Facelink should work on animated models as well like in this demo:
http://www.closier.nl/playground/facelink/facelink2.html

However, I don't think Fabrices code works right 100% of the time. When a certain face in an animation faces a certain way (opposite? etc), the link seems to rotate the object the wrong way.This may be one of the hardest things to get right, since it's pretty hard to test.

The coolest thing about this feature to me is the ability to attached a gun or backpack on a moving model for a game. You can then have tons of separate models made that just magically "stick" to where they are supposed to be. And there is the problem, it seems more like magic than something that is possible :O

I have seen this feature in other 3d engines, not sure, but I think I usually saw it as attach to vertice, not face.

Anyways I wanted to congratulate you for getting stuff to work so far, it looks like it could be really handy!

-Peter "Party" Pooper :P
--
___________________

Fabrice3D

unread,
Jun 26, 2010, 3:15:15 PM6/26/10
to away3...@googlegroups.com
thats why the offset is made for, you can pass a negative offset as well,
but this also means that in certain cases the object would look like if its inverted.

When a certain face in an animation faces a certain way (opposite? etc), the link seems to rotate the object the wrong way.
Problem here is more of a visual perception kind than a math one I think.

This may be one of the hardest things to get right, since it's pretty hard to test.
actually, it remembers me I started wrote a "face" explorer just for this purpose a while ago for Prefab for a personal project, but never finsihed it.
may be I will as it seems the class is being used fairly often.

The coolest thing about this feature to me is the ability to attached a gun or backpack on a moving model for a game. 
I've seen already pretty creative uses of it, but yes, tmp attached items such as guns while keeping independant object behavior were
the reasons why I wrote it in the first place :)

Fabrice

Shawn

unread,
Jun 27, 2010, 3:39:01 AM6/27/10
to Away3D.dev
I am probably opening myself up for my own Clark Griswold moment, but
I took a shot at the FaceLinking in away3dlite. I tweaked the
FaceLink.as from away3D the best I know how to get it to work with
away3Dlite. I am not an expert programmer, but I *think* it works...

Here is a test swf and some links to faceLinkTest.as and my tweaked
for lite FaceLink.as :
http://moosemouse.com/face-link-test.html

Shawn

P.S. - I don't really know the protocols for tweaking someone else's
code, so if I have done something uncool please let me know.



On Jun 26, 12:15 pm, Fabrice3D <fabric...@gmail.com> wrote:
> thats why the offset is made for, you can pass a negative offset as well,
> but this also means that in certain cases the object would look like if its inverted.
>
> > When a certain face in an animation faces a certain way (opposite? etc), the link seems to rotate the object the wrong way.
>
> Problem here is more of a visual perception kind than a math one I think.
>
> > This may be one of the hardest things to get right, since it's pretty hard to test.
>
> actually, it remembers me I started wrote a "face" explorer just for this purpose a while ago for Prefab for a personal project, but never finsihed it.
> may be I will as it seems the class is being used fairly often.
>
> > The coolest thing about this feature to me is the ability to attached a gun or backpack on a moving model for a game.
>
> I've seen already pretty creative uses of it, but yes, tmp attached items such as guns while keeping independant object behavior were
> the reasons why I wrote it in the first place :)
>
> Fabrice
>
> On Jun 26, 2010, at 3:52 PM, Peter Kapelyan wrote:
>
> > Hmmm,
>
> > I don't know if to take that as a compliment or if thems fightin' words :O
>
> > J/k But, here comes the rain again.
>
> > A (the?) correct Facelink should work on animated models as well like in this demo:
> >http://www.closier.nl/playground/facelink/facelink2.html
>
> > However, I don't think Fabrices code works right 100% of the time. When a certain face in an animation faces a certain way (opposite? etc), the link seems to rotate the object the wrong way.This may be one of the hardest things to get right, since it's pretty hard to test.
>
> > The coolest thing about this feature to me is the ability to attached a gun or backpack on a moving model for a game. You can then have tons of separate models made that just magically "stick" to where they are supposed to be. And there is the problem, it seems more like magic than something that is possible :O
>
> > I have seen this feature in other 3d engines, not sure, but I think I usually saw it as attach to vertice, not face.
>
> > Anyways I wanted to congratulate you for getting stuff to work so far, it looks like it could be really handy!
>
> > -Peter "Party" Pooper :P
>
> ...
>
> read more »

savagelook

unread,
Jun 27, 2010, 1:51:56 PM6/27/10
to Away3D.dev
Oy, I'm out of my element here! Thanks guys for the patience and
guidance. My notes are just the ramblings of a programmer not
particularly proficient in 3d programming or 3d math, just one thats
finds it all very cool.
> > > > > > > > > > > > > >> that I uncommented the...
>
> read more »

Fabrice3D

unread,
Jun 27, 2010, 3:15:40 PM6/27/10
to away3...@googlegroups.com
Since you do share, I do not see anything uncool here :)

Fabrice

Reply all
Reply to author
Forward
0 new messages