60FPS?  You must be using a non-crap machine!

I have no idea why there's the amount of polys that there are - I'm
just pulling vector data out of GraphicsPath commands, then extruding
it, code below.  If you can think of a cleaner approach then I'm all
ears!

package
{
        import Singularity.Geom.Bezier2;

        import __AS3__.vec.Vector;

        import away3d.containers.ObjectContainer3D;
        import away3d.entities.Mesh;
        import away3d.extrusions.LinearExtrude;
        import away3d.tools.Merge;

        import com.codeazur.as3swf.exporters.AS3GraphicsDataShapeExporter;
        import com.codeazur.as3swf.tags.TagDefineShape;
        import com.codeazur.as3swf.tags.TagDefineSprite;
        import com.codeazur.as3swf.timeline.FrameObject;

        import flash.display.GraphicsPath;
        import flash.display.IGraphicsData;
        import flash.geom.Vector3D;

        public class Walls extends Mesh
        {

                private var _data:Vector.<IGraphicsData>;
                private var _bezier:Bezier2 = new Bezier2();
                private var _graphicsExporter:AS3GraphicsDataShapeExporter;
                private var _curveSegments:int = 4;
                private var _buildContainer:ObjectContainer3D;

                public function Walls(tag:TagDefineSprite)
                {
                        super();



                        _graphicsExporter = new
AS3GraphicsDataShapeExporter(Main.structureSwf);
                        // Initialise a Bezier2 class to calculate points on a 
curve
                        _bezier = new Bezier2();
                        _bezier.addControlPoint(0, 0);
                        _bezier.addControlPoint(0, 0);
                        _bezier.addControlPoint(0, 0);
                        // Create a holder to add the walls to before merging
                        _buildContainer = new ObjectContainer3D();

                        // Grab the graphics data from the Sprite, extrude only 
the paths
                        for each (var frameObject:FrameObject in 
tag.frames[0].objects)
                        {
                                var shape:TagDefineShape =
(Main.structureSwf.getCharacter(frameObject.characterId) as
TagDefineShape);
                                shape.export(_graphicsExporter);
        
Main.testOverlay.graphics.drawGraphicsData(_graphicsExporter.graphicsData);
                                extrudePaths(_graphicsExporter.graphicsData);
                        }

                        var merge:Merge = new Merge(false, true, false);
                        merge.apply(this, 
merge.applyToContainer(_buildContainer));
                        _buildContainer = null;
                        material = Main.wallsMaterial;

                }

                private function
extrudePaths(graphicsData:Vector.<IGraphicsData>):void
                {
                        for each (var graphicsCommand:IGraphicsData in 
graphicsData)
                        {
                                if (graphicsCommand is GraphicsPath)
                                {
                                        extrudePath(graphicsCommand as 
GraphicsPath);
                                }
                        }
                }

                private function extrudePath(path:GraphicsPath):void
                {
                        var profile:Vector.<Vector3D>;
                        profile = new Vector.<Vector3D>;

                        //loop through the remaining commands

                        for (var i:int = 0; i < path.commands.length; i++)
                        {
                                // GraphicsPathCommands: 0 - NO_OP  |  1 - 
MOVE_TO  |  2 -
LINE_TO  |  3 - CURVE_TO
                                switch (path.commands[i])
                                {

                                        case 1: // MOVE_TO - extrude profile if 
exists, start new profile
                                                if (profile.length > 0) 
addExtrusion(profile);
                                                profile = new Vector.<Vector3D>;
                                                profile.push(new 
Vector3D(path.data.shift(), 0, -
path.data.shift()));
                                                break;
                                        case 2: // LINE_TO - add a new profile 
point
                                                profile.push(new 
Vector3D(path.data.shift(), 0, -
path.data.shift()));
                                                break;
                                        case 3: // CURVE_TO - add profile 
points along curve
                                                addCurve(profile, path);
                                                break;
                                }
                        }
                        addExtrusion(profile);
                }

                private function addCurve(profile:Vector.<Vector3D>,
path:GraphicsPath):void
                {
                        _bezier.moveControlPoint(0, profile[profile.length - 
1].x,
profile[profile.length - 1].z);
                        _bezier.moveControlPoint(1, path.data.shift(), 
-path.data.shift());
                        _bezier.moveControlPoint(2, path.data.shift(), 
-path.data.shift());

                        for (var i:Number = 1/_curveSegments; i < 1; i += 
1/_curveSegments)
                        {
                                profile.push(new Vector3D(_bezier.getX(i), 0, 
_bezier.getY(i)));;
                        }
                        profile.push(new Vector3D(_bezier.getControlPoint(2).X, 
0,
_bezier.getControlPoint(2).Y));

                }

                private function addExtrusion(profile:Vector.<Vector3D>):void
                {
                        var linearExtrude:LinearExtrude = new 
LinearExtrude(null, profile,
LinearExtrude.Y_AXIS, 20, 3, false, 2, 3, null, false, false, "",
false);
                        _buildContainer.addChild(linearExtrude);
                }
        }
}

On Jun 9, 9:50 pm, Michael Iv <explomas...@gmail.com> wrote:
> I get 60/60 FPS. But can you tell me why you have almost 100000 polys? I
> think with such a model you can reduce the poly count at least to 20-30%
> less.
>
>
>
>
>
>
>
>
>
> On Thu, Jun 9, 2011 at 11:33 PM, wagster <ja...@pictureandword.com> wrote:
> > Sure - here's a 3 storey hotel built programmatically:
>
> >http://www.pictureandword.com/test_platforms/floorplan_viewer/v2/inde...
>
> > That's pretty much worst case scenario - I don't actually need the
> > third storey, I just added it to see at what point the frame rate will
> > start dropping.  It's just on the edge now with 100k polys.  Any tips
> > on squeezing a bit more performance from it?  I can't imagine I'll get
> > much more than that.
>
> > The absence of floors will tell you why I'm waiting for a concave
> > DelaunayMesh or preferably a Swf class.  Guests will immediately fall
> > into infinity with this kind of setup.
>
> > Wag
>
> > On Jun 9, 4:16 pm, Fabrice3D <fabric...@gmail.com> wrote:
> > > screendump or url of these "seriously complex building layouts" we could
> > see???
>
> > > Fabrice
>
> > > On Jun 9, 2011, at 4:46 PM, wagster wrote:
>
> > > > I know - patience is a virtue and all that :)
>
> > > > I ended up using Wumedia Swf class for the floor and LinearExtrusion
> > > > for the walls in 3.6 (everything is drawn in Flash IDE as we need to
> > > > production-line our building layouts).  This has the advantage that
> > > > you can draw labels and all sorts of things on the floor - perfect for
> > > > me.  Think I'll probably do the same when Swf resurfaces.
>
> > > > BTW - LinearExtrude + Merge allows for some seriously complex building
> > > > layouts at high framerates!
>
> > > > On Jun 9, 3:14 pm, Fabrice3D <fabric...@gmail.com> wrote:
> > > >> no, that would be one of next classes coming.
> > > >> this one simply "connects" vectors as Mesh. It doesn't have any
> > awareness of a "path" or defined contours/constrains.
>
> > > >> Regarding architectural applications, one that I've started a while
> > ago and hope to finish one of these days, will allow you to define one or
> > more "holes", basically closed shapes, rects, circles etc
> > > >> and eventually another class would use that result to extrude. think
> > here the wall with door and window, extruded at wall thickness. But as some
> > features required are very near of booleans operations,
> > > >> so I started do more research in that field first, to see if I could
> > do this via a smarter way...
>
> > > >> I will gradually add these (hopefuly) usefull classes as I go. But I
> > can't garanty they will be released in a logical order. By that I mean that
> > like in case above of the wall being extruded
> > > >> the class doing this might be released before the one actually
> > generating the base mesh with "holes".
>
> > > >> There are still many 3.6 classes that need to join the 4.0 packages
> > and get enhanced in the process.
> > > >> As said before, all happends 1 by 1 :))
>
> > > >> Fabrice
>
> > > >> On Jun 9, 2011, at 3:48 PM, wagster wrote:
>
> > > >>> Oh cool - another prezzie from the Fabrice factory!
>
> > > >>> I put together a Delaunay class myself (for architectural generation)
> > > >>> a couple of months ago but gave up because I couldn't make it handle
> > > >>> concave shapes.  Did you get that figured out?  (I know, I know, I
> > > >>> could just try it out, but I'm at work and I can't wait until I get
> > > >>> home!)
>
> > > >>> On Jun 9, 11:40 am, Fabrice3D <fabric...@gmail.com> wrote:
> > > >>>> Hi all,
>
> > > >>>> I've just added 2 new classes to Broomstick
> > > >>>> and 1 example class.
>
> > > >>>> - DelaunayMesh:
> > > >>>> Located in "extrusions" package this class allows you to generate
> > meshes from (random) vectors. At least 3 are required.
> > > >>>> This is very usefull in many cases, such as terrain building from
> > pointclouds data, closing shapes, architectural generation, editing tools
> > (such as Prefab ;)  ) etc etc
>
> > > >>>> - Trident
> > > >>>> Our good old dev friend is back, but this time, located into "debug"
> > package instead of primitives
> > > >>>> It works exactly as the previous versions, except you are now also
> > able to change it's position and it looks a bit more sexy :)
>
> > > >>>> - Demo class
> > > >>>> I've added a simple example of a random cloud of vector3d's to mesh
> > using the Delaunay class, in the code
> > > >>>> you'll find as well the Trident in action for those new to Away and
> > even added a small snippet for the new MeshDebugger in case you've missed my
> > post on this one.
>
> > > >>>> Cheers,
> > > >>>> Fabrice
>
> --
> Michael Ivanov ,Programmer
> Neurotech Solutions Ltd.
> Flex|Air |3D|Unity|www.neurotechresearch.comhttp://blog.alladvanced.net
> Tel:054-4962254
> mich...@neurotech.co.il
> t...@neurotech.co.il

On Jun 9, 9:50 pm, Michael Iv <explomas...@gmail.com> wrote:
> I get 60/60 FPS. But can you tell me why you have almost 100000 polys? I
> think with such a model you can reduce the poly count at least to 20-30%
> less.
>
>
>
>
>
>
>
>
>
> On Thu, Jun 9, 2011 at 11:33 PM, wagster <ja...@pictureandword.com> wrote:
> > Sure - here's a 3 storey hotel built programmatically:
>
> >http://www.pictureandword.com/test_platforms/floorplan_viewer/v2/inde...
>
> > That's pretty much worst case scenario - I don't actually need the
> > third storey, I just added it to see at what point the frame rate will
> > start dropping.  It's just on the edge now with 100k polys.  Any tips
> > on squeezing a bit more performance from it?  I can't imagine I'll get
> > much more than that.
>
> > The absence of floors will tell you why I'm waiting for a concave
> > DelaunayMesh or preferably a Swf class.  Guests will immediately fall
> > into infinity with this kind of setup.
>
> > Wag
>
> > On Jun 9, 4:16 pm, Fabrice3D <fabric...@gmail.com> wrote:
> > > screendump or url of these "seriously complex building layouts" we could
> > see???
>
> > > Fabrice
>
> > > On Jun 9, 2011, at 4:46 PM, wagster wrote:
>
> > > > I know - patience is a virtue and all that :)
>
> > > > I ended up using Wumedia Swf class for the floor and LinearExtrusion
> > > > for the walls in 3.6 (everything is drawn in Flash IDE as we need to
> > > > production-line our building layouts).  This has the advantage that
> > > > you can draw labels and all sorts of things on the floor - perfect for
> > > > me.  Think I'll probably do the same when Swf resurfaces.
>
> > > > BTW - LinearExtrude + Merge allows for some seriously complex building
> > > > layouts at high framerates!
>
> > > > On Jun 9, 3:14 pm, Fabrice3D <fabric...@gmail.com> wrote:
> > > >> no, that would be one of next classes coming.
> > > >> this one simply "connects" vectors as Mesh. It doesn't have any
> > awareness of a "path" or defined contours/constrains.
>
> > > >> Regarding architectural applications, one that I've started a while
> > ago and hope to finish one of these days, will allow you to define one or
> > more "holes", basically closed shapes, rects, circles etc
> > > >> and eventually another class would use that result to extrude. think
> > here the wall with door and window, extruded at wall thickness. But as some
> > features required are very near of booleans operations,
> > > >> so I started do more research in that field first, to see if I could
> > do this via a smarter way...
>
> > > >> I will gradually add these (hopefuly) usefull classes as I go. But I
> > can't garanty they will be released in a logical order. By that I mean that
> > like in case above of the wall being extruded
> > > >> the class doing this might be released before the one actually
> > generating the base mesh with "holes".
>
> > > >> There are still many 3.6 classes that need to join the 4.0 packages
> > and get enhanced in the process.
> > > >> As said before, all happends 1 by 1 :))
>
> > > >> Fabrice
>
> > > >> On Jun 9, 2011, at 3:48 PM, wagster wrote:
>
> > > >>> Oh cool - another prezzie from the Fabrice factory!
>
> > > >>> I put together a Delaunay class myself (for architectural generation)
> > > >>> a couple of months ago but gave up because I couldn't make it handle
> > > >>> concave shapes.  Did you get that figured out?  (I know, I know, I
> > > >>> could just try it out, but I'm at work and I can't wait until I get
> > > >>> home!)
>
> > > >>> On Jun 9, 11:40 am, Fabrice3D <fabric...@gmail.com> wrote:
> > > >>>> Hi all,
>
> > > >>>> I've just added 2 new classes to Broomstick
> > > >>>> and 1 example class.
>
> > > >>>> - DelaunayMesh:
> > > >>>> Located in "extrusions" package this class allows you to generate
> > meshes from (random) vectors. At least 3 are required.
> > > >>>> This is very usefull in many cases, such as terrain building from
> > pointclouds data, closing shapes, architectural generation, editing tools
> > (such as Prefab ;)  ) etc etc
>
> > > >>>> - Trident
> > > >>>> Our good old dev friend is back, but this time, located into "debug"
> > package instead of primitives
> > > >>>> It works exactly as the previous versions, except you are now also
> > able to change it's position and it looks a bit more sexy :)
>
> > > >>>> - Demo class
> > > >>>> I've added a simple example of a random cloud of vector3d's to mesh
> > using the Delaunay class, in the code
> > > >>>> you'll find as well the Trident in action for those new to Away and
> > even added a small snippet for the new MeshDebugger in case you've missed my
> > post on this one.
>
> > > >>>> Cheers,
> > > >>>> Fabrice
>
> --
> Michael Ivanov ,Programmer
> Neurotech Solutions Ltd.
> Flex|Air |3D|Unity|www.neurotechresearch.comhttp://blog.alladvanced.net
> Tel:054-4962254
> mich...@neurotech.co.il
> t...@neurotech.co.il

Reply via email to