Dear Guys,
thanks for Away3D and all your efforts bringing 3d to the browser.

I am very new to Away3D.

i followed these tutorials: 
http://www.flashmagazine.com/Tutorials/detail/flash_3d_basics/

and i was wondering if i could learn doing 3d in these steps:

1. draw a point
2. draw a line
3. draw a triangle
4. draw a square
5. draw a cube
...
draw your own custom 3d models.

according to: http://en.wikipedia.org/wiki/Polygon_mesh

i managed to draw a line and a triangle.
but no point/vertex!?

here is my code:
(its a flex 4.1 app, hope this is okay)

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009";
                           xmlns:s="library://ns.adobe.com/flex/spark"
                           xmlns:mx="library://ns.adobe.com/flex/mx"
                           minWidth="955" minHeight="600"
                           creationComplete="Triangles()"
                           >

<!--    <mx:VBox borderStyle="solid" id="controls" x="0" y="0">
                        <mx:VBox borderStyle="solid" id="manipulate_scale">
                                <mx:HBox>
                                        <s:NumericStepper 
id="manipulator_axis_scaleX"
change="{axis.scaleX = manipulator_axis_scaleX.value;}" value="1"
maximum="1000" minimum="-1000" stepSize="0.1"/>
                                        <mx:Label 
text="{manipulator_axis_scaleX.id}" width="200"/>
                                </mx:HBox>
                                <mx:HBox>
                                        <s:NumericStepper 
id="manipulator_axis_scaleY"
change="{axis.scaleY = manipulator_axis_scaleY.value;}" value="1"
maximum="1000" minimum="-1000" stepSize="0.1"/>
                                        <mx:Label 
text="{manipulator_axis_scaleY.id}" width="200"/>
                                </mx:HBox>
                                <mx:HBox>
                                        <s:NumericStepper 
id="manipulator_axis_scaleZ"
change="{axis.scaleZ = manipulator_axis_scaleZ.value;}" value="1"
maximum="1000" minimum="-1000" stepSize="0.1"/>
                                        <mx:Label 
text="{manipulator_axis_scaleZ.id}" width="200"/>
                                </mx:HBox>
                        </mx:VBox>
                        <mx:VBox borderStyle="solid" id="manipulate_view">
                                <mx:HBox>
                                        <s:NumericStepper 
id="manipulator_view_width" change="{View.width
= manipulator_view_width.value;}" value="500" maximum="1000"
minimum="-1000" stepSize="1"/>
                                        <mx:Label 
text="{manipulator_view_width.id}" width="200"/>
                                </mx:HBox>
                                <mx:HBox>
                                        <s:NumericStepper 
id="manipulator_view_height"
change="{View.height = manipulator_view_height.value;}" value="500"
maximum="1000" minimum="-1000" stepSize="1"/>
                                        <mx:Label 
text="{manipulator_view_height.id}" width="200"/>
                                </mx:HBox>
                        </mx:VBox>
                </mx:VBox>
-->
        <fx:Script>
                <![CDATA[
                        import away3d.containers.*;
                        import away3d.core.base.*;
                        import away3d.core.math.*;
                        import away3d.core.render.Renderer;
                        import away3d.materials.*;
                        import away3d.primitives.*;
                        import away3d.test.Button;

                        import flash.display.Sprite;
                        import flash.display.StageAlign;
                        import flash.display.StageScaleMode;
                        import flash.events.Event;
                        import flash.events.MouseEvent;
                        import flash.text.TextField;
                        import flash.text.TextFormat;
                        import flash.utils.getTimer;

                        [SWF(width="500", height="400", frameRate="60",
backgroundColor="#FFFFFF")]
                        private var View:View3D;
                        private var baseObject:ObjectContainer3D;
                        private var triangles:Array;
                        private var numTriangles:Number = 500;
                        private var label1:TextField;
                        private var label2:TextField;
                        private var lastTime:Number;
                        private var state:String = "Single sided";

                        public function Triangles()
                        {
                                triangles = new Array();

                                // prep for handling resizing events
                                systemManager.stage.scaleMode = 
StageScaleMode.NO_SCALE;
                                systemManager.stage.align = StageAlign.TOP;

                                // create a 3D-viewport
                                View = new View3D({x:250, y:200});
                                View.renderer = Renderer.BASIC;
                                systemManager.stage.addChild(View);

                                View.camera.position = new Vector3D(400, 500, 
400);
                                View.camera.lookAt( new Vector3D(0, 0, 0) );

                                // Make container object to attach other 
objects to
                                // An array of 3d objects to be added as 
children of the container
on instatiation. Can contain an initialisation object
                                baseObject = new ObjectContainer3D();
                                View.scene.addChild(baseObject);

                                // ============= DRAW A POINT
                                var desiredColour:uint = 0xFF00FF5F;
                                var desired_x:Number = 50;
                                var desired_y:Number = 50;
                                var desired_z:Number = 50;

                                var pointGraphicData = new 
BitmapData(1,1,true,desiredColour)
                                var pointGraphic:Bitmap = new 
Bitmap(pointGraphicData);

                                pointGraphic.x = desired_x;
                                pointGraphic.y = desired_y;
                                pointGraphic.z = desired_z;

                                systemManager.stage.addChild(pointGraphic);

                                // ============= DRAW A LINE
                                var mat:WireframeMaterial = new 
WireframeMaterial( 0x56BEEC,
{width:1, height:1, thickness:2});
                                // * Creates a 3d line segment.
                                var line_:LineSegment = new LineSegment( { 
material:mat } );
                                var xp:Number = (Math.random()*max)-(max/2);
                                var yp:Number = (Math.random()*max)-(max/2);
                                var zp:Number = (Math.random()*max)-(max/2);

                                line_.start = new Vertex(xp, yp, zp);
                                line_.end = new Vertex(xp+100, yp+100, zp+100);
                                baseObject.addChild(line_);

                                // ============= DRAW A TRIANGLE
                                var newTri:Triangle = makeTriangle();
                                // Move to random position
                                var max:Number = 120;
                                newTri.x = (Math.random()*max)-(max/2);
                                newTri.y = (Math.random()*max)-(max/2);
                                newTri.z = (Math.random()*max)-(max/2);
                                newTri.material = new ColorMaterial();

                                // array (needed for rotation)
                                triangles.push(newTri);
                                // array of 3d objects
                                baseObject.addChild(newTri);

                                addControls();
                                addEventListener(Event.ENTER_FRAME, 
onEnterFrame);
                        }

                        private function onEnterFrame(e:Event):void
                        {
                                var fps:Number = Math.floor( 
1000/(getTimer()-lastTime) );
                                label1.text = ""+numTriangles+" "+state+" 
triangles";
                                label2.text = ""+fps+"fps";
                                lastTime = getTimer();
                                baseObject.rotationY += 1;
                                baseObject.rotationZ += 0.1;
                                baseObject.rotationX -= 0.05;
                                View.render();
                        }

                        private function makeTriangle():Triangle
                        {
                                // Create triangle and change face
                                var tri:Triangle = new 
Triangle({bothsides:false});
/*                              package away3d.primitives
                                {
                                        // Creates a 3d triangle.
                                        public class Triangle extends Mesh
                                        {
                                                private var _face:Face;

                                                private function 
buildTriangle(edge:Number, yUp:Boolean):void
                                                {
                                                        var s3:Number = 1 / 
Math.sqrt(3);

                                                        if (yUp)
                                                                _face = new 
Face(new Vertex(0, 0, 2*s3*edge), new Vertex(edge,
0, - s3*edge), new Vertex(-edge, 0, - s3*edge), null, new UV(0, 0),
new UV(1, 0), new UV(0, 1));
                                                        else
                                                                _face = new 
Face(new Vertex(0, 2*s3*edge, 0), new Vertex(edge,
- s3*edge, 0), new Vertex(-edge, - s3*edge, 0), null, new UV(0, 0),
new UV(1, 0), new UV(0, 1));

                                                        addFace(_face);

                                                        type = "Triangle";
                                                        url = "primitive";
                                                }
 */
                                tri.a = getVertex();
                                tri.b = getVertex();
                                tri.c = getVertex();
                                return tri;
                        }

                        private function getVertex():Vertex
                        {
                                var maxSize:Number = 100;
                                var newX:Number = 
(Math.random()*maxSize)-(maxSize/2);
                                var newY:Number = 
(Math.random()*maxSize)-(maxSize/2);
                                var newZ:Number = 
(Math.random()*maxSize)-(maxSize/2);
                                return new Vertex(newX,newY,newZ);
                        }

                        private function addControls():void
                        {
                                var txtFormat:TextFormat = new 
TextFormat("_sans",12);
                                var pad:Number = 10;
                                label1 = new TextField();
                                label1.x = pad;
                                label1.y = pad;
                                label1.width = 140;
                                label1.height = 30;
                                label1.defaultTextFormat = txtFormat;

                                var bothSidedButton:Button = new Button("Both 
sided", 140, 20);
                                
bothSidedButton.addEventListener(MouseEvent.CLICK, makeBothsided);
                                bothSidedButton.x = pad;
                                bothSidedButton.y = 30;

                                var singleSidedButton:Button = new 
Button("Toggle single sided",
140, 20);
                                
singleSidedButton.addEventListener(MouseEvent.CLICK,
makeSinglesided);
                                singleSidedButton.x = pad;
                                singleSidedButton.y = 55;

                                label2 = new TextField();
                                label2.x = pad;
                                label2.y = 75;
                                label2.width = 140;
                                label2.height = 20;
                                label2.defaultTextFormat = txtFormat;

                                systemManager.stage.addChild(label1);
                                systemManager.stage.addChild(label2);
                                systemManager.stage.addChild(bothSidedButton);
                                systemManager.stage.addChild(singleSidedButton);
                        }
                        private function makeBothsided(e:MouseEvent):void
                        {
                                for(var i:Number = 0; i < triangles.length ; 
i++){
                                        var tri:Triangle = triangles[i] as 
Triangle;
                                        tri.bothsides = true;
                                        state = "Both sided";
                                }
                        }
                        private function makeSinglesided(e:MouseEvent):void
                        {
                                for(var i:Number = 0; i < triangles.length ; 
i++){
                                        var tri:Triangle = triangles[i] as 
Triangle;
                                        tri.bothsides = false;
                                        if(tri.scaleX == 1){ // This should 
have been tri.invertFaces()
but that's been broken for so many releases now
                                                tri.scaleX = -1;
                                        } else {
                                                tri.scaleX = 1;
                                        }
                                        state = "Single sided";
                                }
                        }
                ]]>
        </fx:Script>
        <fx:Declarations>
                <!-- Place non-visual elements (e.g., services, value objects) 
here
-->
        </fx:Declarations>
</s:Application>

thanks for help in advance!

Reply via email to