Samstag, 9. August 2014

:-) so heut werd ich beruhigt schlafen :-)

welt ich stelle vor meinen neuen mouse picker. :-) der ist recht cool, der projeziert 3d objekte auf den screen 2d.

eine lösung wie man sie sicher nicht im lehrbuch findet. ;-)

...der herkömmliche weg wäre etwas fad, somit dachte ich mir. naja, projeziere ich einfach das 3d objekt auf die tiefe der maus, (ohne dass das object sich in der grösze oder position ändert)

http://www.aries-lenov.com/projekte/webgl/dev/LSD_EDITOR3/LSD.php 

also ich muszte mir da selbst einen lösungweg einfallen lassen. und es funktioniert. :-)

eigentlich wenn ichs ganz genau nehme sollte das wieder mal ein einser in mathematik sein ;-). ich glaub der einser ist nur gerechtfertigt wenn man eigene mathematische modelle kreiert. ich denk das ist ein einser mit einem sternderl dazu :D

viel spassss :-)

// (c) 2014 dirkscher mouse collider
// projection 3d to mouse default 2d position

var pi = 3.14159265;

var mx = mouse_node[1][1][0];
var my = mouse_node[1][1][1];
var mr = mouseRAY();
var mx0 = mr[0][0];
var my0 = mr[0][1];
var mx1 = mr[1][0];
var my1 = mr[1][1];
var deep = mr[2];
var active = 0;

function inSPACE(deeeeep){

          // dirkscher in den raum projezierer
var defX = 1.85;
var defY = 3.15;
var inSPACE_x = (deeeeep/defX)*deeeeep;
var inSPACE_y = (deeeeep/defY)*deeeeep;
var space =  [inSPACE_x,inSPACE_y];
return space;
}

function mouseRAY(){ // temporare no ray needed

var offY = -.3;
var sx = mouse_node[0][0];
var sy = mouse_node[0][1];
var deep = -1;
var space = inSPACE(deep);
var inSPACE_x = space[0];
var inSPACE_y = space[1];
var mx0 = ((((1/sx)*mx)-.5)*2)*inSPACE_x;
var my0 = -((((1/sy)*my)-.5)*2+offY)*inSPACE_y;
var deep = -100;
var mx1 = ((((1/sx)*mx)-.5)*2)*inSPACE_x/Math.abs(deep);
var my1 = -((((1/sy)*my)-.5)*2+offY)*inSPACE_y/Math.abs(deep); // projection mouse into space
var mRAY = [mx0[0]-mx1[0],mx0[1]-mx1[1],mx0[2]-mx1[2]]; // mouse ray
var mouse = [[mx0,my0],[mx1,my1],deep];
return mouse;
}

var tri = tri();


var p0 = tri[0][0];

var p1 = tri[0][1];
var p2 = tri[0][2];

function tri(){

// 2d projection to default mouse cursor position
var offY = -.3;
var deep = -5;
var space = inSPACE(deep);
var tx = .1;
var ty = .1;
var tz = .1;
// original position in space
var p00 = [[0,0,deep],[(tx*space[0])/Math.abs(deep)*pi,0,deep]];
var p01 = [[(tx*space[0])/Math.abs(deep)*pi,0,deep],[(tx*space[0])/Math.abs(deep)*pi,         (ty*space[1])/Math.abs(deep)*pi,deep]];
var p02 = [[(tx*space[0])/Math.abs(deep)*pi,(ty*space[1])/Math.abs(deep)*pi,deep],[0,0,deep]];
var deep = -1;
var space = inSPACE(deep);
// flatten projection to mouse position
var p10 = [[0,0,deep],[(tx*space[0])/Math.abs(deep)*pi,0,deep]];
var p11 = [[(tx*space[0])/Math.abs(deep)*pi,0,deep],[(tx*space[0])/Math.abs(deep)*pi,(ty*space[1])/Math.abs(deep)*pi,deep]];
var p12 = [[(tx*space[0])/Math.abs(deep)*pi,(ty*space[1])/Math.abs(deep)*pi,deep],[0,0,deep]];
var tri0 = [p00,p01,p02];
var tri1 = [p10,p11,p12];
var dat = [tri0,tri1];
return dat;
}

collideMOUSE();

function collideMOUSE(){
var world = [0,0,1];
var pnt0 = tri[1][0][0];
var pnt1 = tri[1][0][1];
var pnt2 = tri[1][1][0];
var pnt3 = tri[1][1][1];
var pnt4 = tri[1][2][0];
var pnt5 = tri[1][2][1];
var v0 = [pnt1[0]-pnt0[0],pnt1[1]-pnt0[1],0];
var v1 = [pnt1[0]-mx0,pnt1[1]-my0,0];
var v2 = [pnt3[0]-pnt2[0],pnt3[1]-pnt2[1],0];
var v3 = [pnt3[0]-mx0,pnt3[1]-my0,0];
var v5 = [pnt5[0]-pnt4[0],pnt5[1]-pnt4[1],0];
var v6 = [pnt5[0]-mx0,pnt5[1]-my0,0];
var n0 = cross(world,v1);
var len0 = dot(v0,n0);
var n1 = cross(world,v3);
var len1 = dot(v2,n1);
var n2 = cross(world,v6);
var len2 = dot(v5,n2);

if((len0 >= 0)&&(len1 >= 0)&&(len2 >= 0)){
active = 1;
}
return len0;
}

Keine Kommentare:

Kommentar veröffentlichen