Score this design: “No Parking,” to help it get printed on Threadless!
My Threadless Submission – No Parking (stick it to the man)
Orbiting around a target 3D object – Away 3D
This is a AS3 script using Away 3D that orbits some 3d objects around a target object, if an alternate target object is selected, all orbiting objects and camera target Tween to their new coordinates.
Source
package
{
import away3d.cameras.Camera3D;
import away3d.containers.ObjectContainer3D;
import away3d.containers.Scene3D;
import away3d.containers.View3D;
import away3d.core.base.Face;
import away3d.core.base.Mesh;
import away3d.core.base.Object3D;
import away3d.core.base.Vertex;
import away3d.core.clip.RectangleClipping;
import away3d.core.utils.Cast;
import away3d.events.MouseEvent3D;
import away3d.lights.DirectionalLight3D;
import away3d.lights.PointLight3D;
import away3d.loaders.Loader3D;
import away3d.loaders.Swf;
import away3d.materials.BitmapMaterial;
import away3d.materials.ColorMaterial;
import away3d.materials.ShadingColorMaterial;
import away3d.materials.WireColorMaterial;
import away3d.materials.WireframeMaterial;
import away3d.primitives.Cone;
import away3d.primitives.Cube;
import away3d.primitives.LineSegment;
import away3d.primitives.Plane;
import away3d.primitives.Sphere;
import away3d.primitives.TextField3D;
import away3d.primitives.Trident;
import away3d.sprites.MovieClipSprite;
import away3d.sprites.Sprite3D;
import com.greensock.TweenLite;
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.Event;
import flash.geom.Vector3D;
import wumedia.vector.VectorText;
[SWF(backgroundColor='#333333', frameRate='60')]
public class PositionOnSphere extends Sprite
{
private var _scene:Scene3D;
private var _camera:Camera3D;
private var _view:View3D;
public var _lookX:int = 300;
public var _lookY:int = 200;
public var _lookZ:int = 700;
private var sphere:Sphere;
private var sphereOrbit1:Sphere;
private var sphereOrbit1Phi:Number;
private var sphereOrbit1Theta:Number;
private var sphereOrbit2:Sphere;
private var sphereOrbit2Phi:Number;
private var sphereOrbit2Theta:Number;
private var sphereOrbit3:Sphere;
private var sphereOrbit3Phi:Number;
private var sphereOrbit3Theta:Number;
private var target01:Cube;
private var target02:Cube;
public function PositionOnSphere()
{
super();
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
initScene();
initObjects();
this.addEventListener(Event.ENTER_FRAME, render);
}
private function initScene():void
{
_scene = new Scene3D();
_camera = new Camera3D({z:-1000});
_view = new View3D({scene:_scene, camera:_camera});
_view.x = stage.stageWidth/2;
_view.y = stage.stageHeight/2;
_view.clipping = new RectangleClipping({minX:-stage.stageWidth/2, minY:-stage.stageHeight/2, maxX:stage.stageWidth/2, maxY:stage.stageHeight/2});
addChild(_view);
// Add trident for reference
var tri:Trident = new Trident( (1000/2+100),true);
_scene.addChild(tri);
}
private function initObjects():void
{
var plane:Plane = new Plane();
plane.width = plane.height = 50000;
plane.y = -1000;
plane.segmentsW = plane.segmentsH = 12;
plane.material = new WireframeMaterial(0x222222);
_scene.addChild(plane);
sphere = new Sphere({material:"white#black",radius:200});
sphere.ownCanvas = true;
sphere.alpha = .7;
sphere.bothsides = true;
sphere.x = _lookX;
sphere.y = _lookY;
sphere.z = _lookZ;
_scene.addChild(sphere);
//setup target objects
target01 = new Cube({material:"black#white", depth:50, width:50, height:50});
_scene.addChild(target01);
target02 = new Cube({material:"black#white", depth:50, width:50, height:50});
_scene.addChild(target02);
target02.x = _lookX;
target02.y = _lookY;
target02.z = _lookZ;
target01.addEventListener(MouseEvent3D.MOUSE_DOWN,objectHandler);
target02.addEventListener(MouseEvent3D.MOUSE_DOWN,objectHandler);
//set up orbiting spheres
sphereOrbit1 = new Sphere({material:"yellow#black",radius:20});
sphereOrbit1Phi = radians(0);
sphereOrbit1Theta = radians(90);
_scene.addChild(sphereOrbit1);
sphereOrbit2 = new Sphere({material:"red#black",radius:20});
sphereOrbit2Phi = radians(90);
sphereOrbit2Theta = 0;
_scene.addChild(sphereOrbit2);
sphereOrbit3 = new Sphere({material:"blue#black",radius:20});
sphereOrbit3Phi = 0
sphereOrbit3Theta = radians(90);
_scene.addChild(sphereOrbit3);
}
private function objectHandler(e:MouseEvent3D):void
{
var obj:Object3D = e.target as Object3D;
tweenCameraTarget(obj.x,obj.y,obj.z)
}
private function setCoords(_targetObject:Object3D,_radius:Number = 300,_phi:Number = 0,_theta:Number = 0):void{
var xp:int = _lookX - (_radius) * Math.sin(_phi) * Math.cos(_theta);
var zp:int = _lookZ - (_radius) * Math.sin(_phi) * Math.sin(_theta);
var yp:int = _lookY - (_radius) * Math.cos(_phi);
_targetObject.x = xp;
_targetObject.y = yp;
_targetObject.z = zp;
}
private function hoverCamera():void
{
var mX:Number = this.mouseX > 0 ? this.mouseX : 0;
var mY:Number = this.mouseY > 0 ? this.mouseY : 0;
//you need to init tarX and tarY with the _lookX and _lookY
var tarX:Number = _lookX + 5*(mX - (stage.stageWidth*.5 ));
var tarY:Number = _lookY + -5*(mY - (stage.stageHeight*.5));
var dX:Number = _camera.x - tarX;
var dY:Number = _camera.y - tarY;
var dZ:Number = _lookZ - 1000 ;
_camera.x -= dX*0.25;
_camera.y -= dY*0.25;
//always keep Z 1000 away from target
_camera.z = _lookZ - 1000;
_camera.lookAt(new Vector3D(_lookX, _lookY, _lookZ));
}
private function tweenCameraTarget(_x:int,_y:int,_z:int):void{
//this tweens the look at variables
TweenLite.to(this, 1, {_lookX:_x,_lookY:_y,_lookZ:_z});
TweenLite.to(sphere,1,{x:_x, y:_y, z:_z});
}
private function radians(_degrees:Number):Number{
//convert degrees to radians
return _degrees*(Math.PI/180);
}
private function degrees(_radians:Number):Number{
//convert radians to degrees
return _radians*(180/Math.PI);
}
private function render(evt:Event):void
{
hoverCamera();
setCoords(sphereOrbit1,300,sphereOrbit1Phi+=radians(1),sphereOrbit1Theta+=radians(3));
setCoords(sphereOrbit2,330,sphereOrbit2Phi,sphereOrbit2Theta += radians(2) );
setCoords(sphereOrbit3,270,sphereOrbit3Phi +=radians(4),sphereOrbit3Theta);
_view.render();
}
}
}
Away 3D setup hints
I’ve recently been working on a project using the Away 3D engine and thought I’de write this post to highlight a basics that I found werent really highlighted but relatively important. Its predominatly going to be used by me for reference, and I’ll keep adding to it
//Changing an Object3D's alpha value. object3D.alpha = .5; object3D.ownCanvas = true; //Changing a MovieClipSprite alpha value msc.movieclip.alpha = .5;
Materials
//Simple wireframe material
var material:WireframeMaterial = new WireframeMaterial( 0xff0000,{thickness:1});
//Simple colour material
var colorMaterial:ColorMaterial = new ColorMaterial( 0xffffff,{alpha:.5});
Corrupt, signal! Promotes purple times
About 2 weeks ago my 2007 MacBook Pro froze on me with a corrupted screen. It was obvious that it wasn’t your normal software freeze, it looked like how a brain aneurysm might feel like. The only choice was to cut all power and reboot. This kept happening over the following week, becoming more frequent, until the day where it had just had enough of the resusitation and just refused to boot.
Assuming it was a motherboard/graphics issue I needed to get something done rather quick as I was at the tail end of a big job and needed to finish what I was doing. I wasn’t panicing to much, and decided to take my hardrvie out and put it in my girlfriends macbook pro (I thought this would get me out of jail). I then added a new blank hardrive to my effected laptop and took it up to the local MacCentric shop to get a quote on a fix.
Inititally I thought I would just go in there and speak to a technicial who would say within 3 seconds of showing him
“Yeah mate its your core board, that’ll cost roughly $500 to fix”
But to my annoyance I was greeted by an ill informed secratary who made me fill out forms rather than ask a technican 2 meters away behind closed doors, if he could have a look at it. Late the next day I recieved a voice mail with half the news I’de expect.
“Your motherboard/graphics card are stuffed!” (yep I wish you told me that on the spot).
The other half of the news was, due to the fact the client has opened the computer, they have caused the hardware failure and instead of a wopping $1000 fee to fix it would be doubled to $2000!!!! What the F$%K! Is this some Apple policy? It was out of warrenty, I’m happy to pay for it to be fixed, but trying to blame me for breaking it when I opened it and doubling the charge… No way man!
Peeved off I went online (using my girlfriends laptop) and had a look at ebay for a similar replacement. Low and behold the same spec machine was selling for around $1200. Cheaper to buy a second hand one hey! However whislt looking I found a little chinese guy offering services to fix MacBook Pro motherboards for $250… BONUS, that’s what I wanted to see. I’m in the process of shipping it off stayed tuned!
Meanwhile back at the homestead, my girlfriends 13″ MacBook had to be hooked up to my BenQ 241W, I have had troubles with this monitor, shortly after I bought it in 2006. Initiall problems were the DVI connection spact out and it wouldn’t ‘detect’ any signal. This initially started from my MacBook Pro, but also was happening on my PC, so it wasn’t related to computer or cable. After spending a lot of time in forums ect, I came to the conclusion that the ‘firmware’ for that monitor needed to by updated, DOH.. What a hassle. I forgot about that and used the DSUB/VGA connection which continued to work. All up until now!
I plugged the 13″ MacBook Pro in, and for some reason I am now getting the same “issue” as the DSUB … “no signal detected”… urghhh! I wrote an email to BenQ, and 2 weeks later I am still to get a repsonse! In the meantime I went to the local Office Works and picked up a HP 23″LED for $226, BARGIN MAN!
I bought it home, unpacked it, realising the price reflected the build, eg no USB or HDMI connection and a crappy static plastic stand, but hey it’s so thin and light who cares!
So I was set up again able to work, with a borrowed laptop and a cheap LCD monitor which rocked! Little after half an hour of getting back into getting some real work done… PURPLE SCREEN OF DEATH, both screens went purple and nothing happend. Time to cut all power again and reboot! This time I kind of pretended nothing happened, and the problem seemed to stop, until my girlfriend came home from work and was doing some web browsing when the same thing happened. I immediately got blamed for stuffing up her perfectly working laptop, and it was now all my fault.
First things first I just went and did a system software update, and low and behold one of the fixes was for a purple screen of death on 13″ MacBook Pros hooked upto external displays. Cool, it seemed like I was clearing up all issues. I installed the updates and restarted. I just wanted to say that these upadates seemed to have done nothing except alternate between a purple and black screen! LUSH, maybe I need to buy a new MacBook Pro and Cinema Display, is that what they are trying to say?
Grid Art for Typoart
I’ve just been developing some ideas for prints using FPDF to dynamically create the PDF’s. They consist of a grid of objects in these cases, letters and shapes, where each element can have alternate properties applied to them. The text based is great and things like poems would easily be incorporated, and give it meaning. All prints ratio/sizes can also be altered simply, so any size can be output.

Above: A string or sentence with a message displayed in the middle, in this case fruits.

The same example with different colours and grid size.




Examples of the dots in different combination
SQL Snippet: Update table field using a join using SQL
This is a handy little snippet if you need to update one field (source) in one table (table 1) from the results of a field in a related table (table 2)
UPDATE table1 JOIN table1 ON table1.id = table2.id SET table2.source = table1.source
Sunny Sore Tell
Funny that everytime I’ve been to Sawtell, just south of Coffs Harbour it’s been overcast or raining, hence I’m not sure why the sign as you drive into the town quoting ‘Welcome to Sunny Sawtell’
Welcome to my chob… a bit off the cob!
After the 3rd attempt at a blog this time I’ve done it properly and installed word press on my server. In the midst of updating my own website (chop.com.au) I thought it best to get a more ‘professional’ blog happening, where I can post little snippets of my professional work as well as general interests.
I’ve currently hacked up the ‘Fluid-Blue‘ theme, so I’ll give credit to them here. However now that I’m poking around in the CSS and PHP I thinking it better to start from scratch, although in saying that the HACK way is easier to get things moving, leaving a little more time on the design… shit I think I better get back to my real website, procrastinating NO….





