PDA

Volledige versie bekijken : 3d grid Tuinontwerper


jvleeuwen18
%Europe/Berlin %638 %2006, 16:19
Ik weet niet of dit het goede forum is maar ik denk het wel.

Ik moet een programma gaan maken waarmee ik 3d-plaatjes kan invoegen op een van tevoren afgemeten grid. Deze plaatjes moet ik kunnen gaan slepen (drag & drop) en uiteindelijk moet ik een 3d-view kunnen laten zien. Deze 3d-view kan uit 90, 180, 270 of 360 graden. Het hoeft dus niet echt 3d te zijn. Een beetje zoals 3d spacer (http://www.3dspacer.com/editions/office/). Ik hoop dat jullie me een beetje kunnen uitleggen hoe ik dit moet gaan doen.

Wat ik zelf denk. x-y-as moeten kunnen aangeven. De grid moet getekend kunnen worden.
Drag and drop en dan de 3d-view bereken.

Please help me

RITS
%Europe/Berlin %804 %2006, 20:19
ik pass, denk dat je Mech7 of INKA moet hebben, en anders Devega...

gaat mij ietsje boven de pet, maar lijkt mij dat je een aantal vaste parameters hebt:

- je grid
- grootte van je "plaatje"
- camera-view

ik krijg een beetje het habbo-hotel gevoel, kan dat kloppen?

Peace

INKA
%Europe/Berlin %818 %2006, 20:38
je zult verschillende technieken moeten combineren, zoals b.v flash, 3d, scripts. of php.
zoiets als in dat prog 3dspacer, een 2d flash topview met de te plaatsen objecten op het grid, een script of php om de posities te onthouden en de bijbehorende 3d grid/kamer en de gemodelleerde objecten voor een 3d view die dan ingeladen wordt, en dit kan dan ook in flash ingeladen worden.
de flash topview en modellen lijkt me niet zo moeilijk,(long,long ago heb ik al eens zoiets hier op de site gehad, ff zoeken in de database ik dacht onde rmultipy objects)
de 3dgrid/kamer en modellen en meedere cameraviews kan ook niet het probleem worden, en het inladen ook niet, alleen het script/php manier om de posities te onthouden, tjsa weinig kaas van gegeten, te lang geleden dat ik aan scripts deed, maar daar is hier het forum dan goed voor.

inka

jvleeuwen18
%Europe/Berlin %345 %2006, 09:16
je zult verschillende technieken moeten combineren, zoals b.v flash, 3d, scripts. of php.
zoiets als in dat prog 3dspacer, een 2d flash topview met de te plaatsen objecten op het grid, een script of php om de posities te onthouden en de bijbehorende 3d grid/kamer en de gemodelleerde objecten voor een 3d view die dan ingeladen wordt, en dit kan dan ook in flash ingeladen worden.
de flash topview en modellen lijkt me niet zo moeilijk,(long,long ago heb ik al eens zoiets hier op de site gehad, ff zoeken in de database ik dacht onde rmultipy objects)
de 3dgrid/kamer en modellen en meedere cameraviews kan ook niet het probleem worden, en het inladen ook niet, alleen het script/php manier om de posities te onthouden, tjsa weinig kaas van gegeten, te lang geleden dat ik aan scripts deed, maar daar is hier het forum dan goed voor.

inka
Hoe zou ik het makkelijkst de plaatsen op de grid kunnen onthouden? Ik zat te denken aan XML maar weet ook niet of dat echt gaat werken. De grids zijn zelf ook nog variabel. Iemand een idee hoe ik dat zou moeten maken? Thanks voor al jullie hulp.

INKA
%Europe/Berlin %428 %2006, 11:17
zoals in het spacer voorbeeld, kun je kiezen uit verschillende grids/kamers,ik zou ze niet variabel maken(als dat al gaat) maar verschillende grids maken waaruit je kan kiezen, je kunt wel de assen en de vorm aanpassen met scripts(drawn line commando?)

jvleeuwen18
%Europe/Berlin %511 %2006, 13:16
zoals in het spacer voorbeeld, kun je kiezen uit verschillende grids/kamers,ik zou ze niet variabel maken(als dat al gaat) maar verschillende grids maken waaruit je kan kiezen, je kunt wel de assen en de vorm aanpassen met scripts(drawn line commando?)

Ja dat lijkt me inderdaad dan misschien het beste. Ik heb nu (niet helemaal zelf verzonnen)
Ik begrijp het allemaal wel alleen het onderste deel niet. Wat gebeurt daar nou precies. En hoe zou ik het met die camerviews moeten doen. Kan daar namelijk nergens wat over vinden.

edit// hoe zorg ik ervoor dat ik de plaatjes die ik inlaad laat roteren? on(press){
this._rotation += 90;}
Dit kan niet aangezien ik al een on(press) heb
en zouden de plaatjes vectoren moeten zijn aangezien ze gescaled moeten worden of is dat niet echt nodig?
De plaatjes worden met sketchUp gemaakt btw

Bedankt voor al jullie hulp
----------------------------------------------------------------------------------------

//grid (size=pixels) 50*50
var size:Number = 50;
var columns:Number = Math.ceil(Stage.width / size);
var rows:Number = Math.ceil(Stage.height / size);
var ball_move:Boolean = false;

//rondje maken
var ball:MovieClip = this.createEmptyMovieClip("ball", this.getNextHighestDepth());
ball.line
ball.lineStyle(70, 0x000000 , 100); //line om ball
ball.lineTo(0, 1);
ball._x = 640;
ball._y = 512;

//slepen
ball.onPress = function () {
this.startDrag();
ball_move = true;

}

//stoppen slepen
ball.onMouseUp = function () {
this.stopDrag();
ball_move = false;
}

//slepen enkel op grid
ball.onMouseMove = function () {
if (!ball_move) return;
this._x = _xmouse - _xmouse%size;
this._y = _ymouse - _ymouse%size;
updateAfterEvent();
}

//fucntie voor vierkant
function drawSquare (who:String, to_x, to_y) {
this.createEmptyMovieClip(who, this.getNextHighestDepth());
this[who].lineStyle(1, 0x000000, 100);
this[who].moveTo(0, 0);
this[who].lineTo(size, 0);
this[who].lineTo(size, size);
this[who].lineTo(0,size);
this[who]._x = to_x;
this[who]._y = to_y;

}

for (var c=0; c<columns; c++) {
for (var r=0; r<rows; r++) {
drawSquare("c_"+c+"_r_"+r, c*size, r*size);
}
}

INKA
%Europe/Berlin %580 %2006, 14:56
je kunt bv in flash normaal een lijn/vierkant tekenen en dan heb je iets zichtbaars, maar het is ook mogelijk om via een script(met variabelen) een lijn te creeren, zoals in spacer.
Daar staat een grid/kamer als vorm voorbeeld, door in de x/y boxen de waarde te veranderen kun je dus verschillende formaten grid/kamer creeren(scripting/tekenen)(ff navragen in flashforum)
De verschillende rotaties(30/45/90/180 graden)kun je laten zien door voor elke positie een vast standpunt te nemen(camera,s?) en die in te laden als er op de betreffende knop wordt gedrukt.
Het roteren van de objecten zelf in 2d door moet je ook script voor gebruiken en zelf een class(scripters zullen me corrigeren als ik het fout benoem) voor schrijven.

jvleeuwen18
%Europe/Berlin %434 %2006, 11:25
Ik heb nu wat nuttigs denk ik alleen kan ik hem niet echt ontleden om het te kunnen gebruiken.

// Scene3D class, contains a 3d scene in a movie clip (mc)
Scene3D = function (mc, focalLength){
this.mc = mc;
this.focalLength = focalLength;
this.depth = 0;
}
// creates a tile movie clip (flat square) in the scene and returns it
Scene3D.prototype.createTile = function (x, y, z, size, line_style, fill_style) {
var points = new Array();
points[0] = new Point3D(x, y, z).to2D(this.focalLength);
points[1] = new Point3D(x+size, y, z).to2D(this.focalLength);
points[2] = new Point3D(x+size, y, z+size).to2D(this.focalLength);
points[3] = new Point3D(x, y, z+size).to2D(this.focalLength);

var mc = this.mc.createEmptyMovieClip("mc"+this.depth, this.depth);
this.depth++;

if (line_style) mc.lineStyle.apply(mc, line_style);
if (fill_style) mc.beginFill.apply(mc, fill_style);
mc.moveTo(points[0].x, points[0].y);
mc.lineTo(points[1].x, points[1].y);
mc.lineTo(points[2].x, points[2].y);
mc.lineTo(points[3].x, points[3].y);
mc.lineTo(points[0].x, points[0].y);
if (fill_style) mc.endFill();

return mc;
}

// Point3D class, represents 3D points in a 3D scene
Point3D = function (x, y, z) {
this.x = x;
this.y = y;
this.z = z;
};
// converts a 3D point into a 2D point based on a focal length
Point3D.prototype.to2D = function (focalLength) {
var scaleRatio = focalLength/(focalLength + this.z);

var point2D = new Object();
point2D.x = this.x*scaleRatio;
point2D.y = this.y*scaleRatio;

return point2D;
};

// main:

// create scene
var scene_mc = this.createEmptyMovieClip("scene", 0);
scene_mc._x = 150;
scene_mc._y = 150;
var grid = new Scene3D(scene_mc, 300);

// set properties for tile generation
var y = 100;
var size = 30;
var c, cols = 8;
var r, rows = 8;
var center_offset = cols*size/2;
var tile;

// rollover/out functions for tile hover color
function rollOverHighlite(){
new Color(this).setTransform({rb:255});
}
function rollOutHighliteRestore(){
new Color(this).setTransform({ra:100,rb:0,ga:100,gb:0, ba:100,bb:0,aa:100,ab:0});
}

// use loops to generate tiles
for (c=0; c<cols; c++) {
for (r=0; r<rows; r++) {
tile = grid.createTile(c*size - center_offset, y, r*size, size, [0,0x999999,100],[0x00EE55, 100]);
tile.onRollOver = rollOverHighlite;
tile.onRollOut = rollOutHighliteRestore;
}
}

Iemand die hem een beetje kan uitleggen??

INKA
%Europe/Berlin %484 %2006, 12:37
pfff, ff diep graven,
in dit script wordt een class gemaakt voor een movieclip in een scene van (3d naar 2d?) met bepaalde waardes, met loops voor meer clips en een kleur rollover.
voor echt goede uitleg ff naar het scriptforum gaan, kunnen je beter helpen.
al uitgeprobeerd?

jvleeuwen18
%Europe/Berlin %370 %2006, 09:52
Oke de lijnen worden nu gezet tot ruiten alleen zitten de beginpunten nog niet goed. En ik weet de fout niet te vinden. Iemand die me kan helpen??

var size:Number = 50;
var size2:Number = size*2;
var columns:Number =5// Math.ceil(Stage.width/ size);
var rows:Number = 5//Math.ceil(Stage.height/size);
var begin_x:Number = 300 //Math.ceil(Stage.width/2);
var begin_y:Number = 300 //Math.ceil(Stage.height/2);
var half:Number = Math.ceil(size/2);
var kwart:Number = (size/3)*4;
var count: Number = 0;
var count2:Number = 0;

function drawTriangel (who:String, to_x, to_y) {
this.createEmptyMovieClip(who, this.getNextHighestDepth());
this[who].lineStyle(1, 0x000000, 100);
this[who].moveTo (begin_x + (count*size2),0+(count*kwart));
this[who].lineTo(begin_x - (rows*size2), begin_y +(count*kwart)); //beginpunt -
}
function drawTriangel2 (bla:String, to_x, to_y) {
this.createEmptyMovieClip(bla, this.getNextHighestDepth());
this[bla].lineStyle(1, 0x000000, 100);
this[bla].moveTo(begin_x-(count*size2),0+(count*size));
this[bla].lineTo(begin_x +(rows*size2), begin_y + (count*size));
count=count+1;
rows=rows-1;

}
for (var c=0; c<columns; c++) {

drawTriangel("c_"+c+"_r_"+r, c*size, r*size);
drawTriangel2("c_"+c+"_r_"+r, c*size, r*size);
}

jvleeuwen18
%Europe/Berlin %604 %2006, 15:31
pfff, ff diep graven,
in dit script wordt een class gemaakt voor een movieclip in een scene van (3d naar 2d?) met bepaalde waardes, met loops voor meer clips en een kleur rollover.
voor echt goede uitleg ff naar het scriptforum gaan, kunnen je beter helpen.
al uitgeprobeerd?

Yo het is me eindelijk gelukt om een mooi grid te maken. :-)
Zo'n grid moest ik hebben, met de hoeken van 120 & 30 graden. :O
Nu moeten de dingen die erop worden gezet nog magnetisch worden mbt het grid.
Hoe moet ik dat doen aangezien ik 2 MC daarvoor heb gebruikt?

var size:Number = 50;
var size2:Number = size*2;
var graad:Number = 57.735;
var columns:Number = 6;//Math.ceil(Stage.width/ size)
var velden:Number = 5;
var rows:Number = 5;//Math.ceil(Stage.height/size);
var begin_x:Number = 300; //Math.ceil(Stage.width/2);
var begin_y:Number = velden*graad; //Math.ceil(Stage.height/2);
var count: Number = 0;
var ball_move:Boolean = false;

function drawTriangel (bla:String, to_x, to_y) {
this.createEmptyMovieClip(bla, this.getNextHighestDepth());
this[bla].lineStyle(1, 0x000000, 100);
this[bla].moveTo(begin_x-(count*size2),0+(count*graad));
this[bla].lineTo(begin_x+(rows*size2),begin_y+(count*graad) );

}
function drawTriangel2 (bla:String, to_x, to_y) {
this.createEmptyMovieClip(who, this.getNextHighestDepth());
this[who].lineStyle(2, 0x000000, 100);
this[who].moveTo(begin_x +(count*size2),0+(count*graad));
this[who].lineTo(begin_x-(rows*size2),begin_y+(count*graad));}
for (var c=0; c<columns; c++) {
// X , Y
drawTriangel("c_"+c+"_r_"+r, c*size, r*size);
drawTriangel2("c_"+c+"_r_"+r, c*size, r*size);
count=count+1;
rows=rows-1;
}

this.stoel.onPress = function() {
this.startDrag();
};
this.stoel.onRelease = function() {
this.stopDrag();
};

INKA
%Europe/Berlin %747 %2006, 18:55
ook via script, in de trant van copieren van movieclips en die in een positie draggen en dat op verschillende niveau,s/levels, ff de database post nazoeken hebben al ooit aan zoiets gewerkt.