Ciao a tutti come posso fare l'effetto di un cubo che ruota?
grazie ciao a presto
Ciao a tutti come posso fare l'effetto di un cubo che ruota?
grazie ciao a presto
non c'è bisogno di scomodare il 3D per un cubo
sono tre facce che si deformano
se non ha nulla di 3d sotto mano può farlo semplicemente con un'interpolazione modificando le facce visibili.
"Hanno chiuso le mandrie nelle stalle
perchè liberi siamo fino all'alba."
R. Kipling
e che codice uso?
vi ricordate quel codice di nega che creava un cubo rotante solo con as....ke mito
mo lo posto..anche se dubito ke qualcuno ci capirà qualcosa... (funziona solo col player 6 non si sà xke..)
LightSource = function (x, y, z, brightness) {
this.x = x;
this.y = y;
this.z = z;
this.brightness = brightness;
this.magnitude = Math.sqrt(this.x * this.x + this.y * this.y + this.z * this.z);
};
this.createEmptyMovieClip("center", 0);
center._x = Stage.width / 2;
center._y = Stage.height / 2;
inc = .5;
focalLength = 400;
rad = Math.PI/180;
light = new LightSource(-20000, -20000, 20000, 100);
cube = {};
cube.vertexList = [];
cube.side = [];
cube.side.push({vertices:[0, 1, 2, 3], sideColor:0x6600CC});
cube.side.push({vertices:[2, 1, 5, 6], sideColor:0x6600CC});
cube.side.push({vertices:[1, 0, 4, 5], sideColor:0x6600CC});
cube.side.push({vertices:[5, 4, 7, 6], sideColor:0x6600CC});
cube.side.push({vertices:[0, 3, 7, 4], sideColor:0x6600CC});
cube.side.push({vertices:[3, 2, 6, 7], sideColor:0x6600CC});
cube.vertexList.push({x:-50, y:-50, z:50});
cube.vertexList.push({x:50, y:-50, z:50});
cube.vertexList.push({x:50, y:-50, z:-50});
cube.vertexList.push({x:-50, y:-50, z:-50});
cube.vertexList.push({x:-50, y:50, z:50});
cube.vertexList.push({x:50, y:50, z:50});
cube.vertexList.push({x:50, y:50, z:-50});
cube.vertexList.push({x:-50, y:50, z:-50});
vertices = [];
backface = function (x, y) {
var cax = x[2] - x[0];
var cay = y[2] - y[0];
var bcx = x[1] - x[2];
var bcy = y[1] - y[2];
return (cax * bcy < cay * bcx);
};
render = function (model) {
center.clear();
center.lineStyle(2, 0, 100);
verts2D = [];
depthArray = [];
for (var i = 0; i < model.side.length; i++) {
var zDepth = 0;
for (var j = 0; j < model.side[i].vertices.length; j++) {
var whichVert = model.side[i].vertices[j];
if (verts2D[whichVert] == undefined) {
verts2D[whichVert] = {};
var scale = focalLength / (focalLength - model.vertexList[whichVert].z);
verts2D[whichVert].x = model.vertexList[whichVert].x * scale;
verts2D[whichVert].y = model.vertexList[whichVert].y * scale;
}
zDepth += model.vertexList[whichVert].z;
}
depthArray.push([model.side[i], zDepth]);
}
depthArray.sort(function (a, b) { return a[1] > b[1];});
for (var i = 0; i < depthArray.length; i++) {
var sideVerts = depthArray[i][0].vertices;
if (!backface([verts2D[sideVerts[0]].x, verts2D[sideVerts[1]].x, verts2D[sideVerts[2]].x], [verts2D[sideVerts[0]].y, verts2D[sideVerts[1]].y, verts2D[sideVerts[2]].y])) {
center.moveTo(verts2D[sideVerts[0]].x, verts2D[sideVerts[0]].y);
center.beginFill(getSideColor(model, depthArray[i][0]), 100);
for (var j = 1; j < sideVerts.length; j++) {
center.lineTo(verts2D[sideVerts[j]].x, verts2D[sideVerts[j]].y);
}
center.lineTo(verts2D[sideVerts[0]].x, verts2D[sideVerts[0]].y);
center.endFill();
}
}
};
getSideColor = function (model, side) {
var col = side.sideColor.toString(16);
while (col.length < 6) {
col = "0" + col;
}
var verts = [model.vertexList[side.vertices[0]], model.vertexList[side.vertices[1]], model.vertexList[side.vertices[2]]];
var lightFactor = factorLightAngle(verts);
var r = parseInt(col.substr(0, 2), 16) * lightFactor;
var g = parseInt(col.substr(2, 2), 16) * lightFactor;
var b = parseInt(col.substr(4, 2), 16) * lightFactor;
return r << 16 | g << 8 | b;
};
factorLightAngle = function (vertices) {
var U = [(vertices[0].x - vertices[1].x), (vertices[0].y - vertices[1].y), (vertices[0].z - vertices[1].z)];
var V = [(vertices[1].x - vertices[2].x), (vertices[1].y - vertices[2].y), (vertices[1].z - vertices[2].z)];
var p = [((U[1] * V[2]) - (U[2] * V[1])), -((U[0] * V[2]) - (U[2] * V[0])), ((U[0] * V[1]) - (U[1] * V[0]))];
var magP = Math.sqrt((p[0] * p[0]) + (p[1] * p[1]) + (p[2] * p[2]));
var dP = ((p[0] * light.x) + (p[1] * light.y) + (p[2] * light.z));
return ((Math.acos(dP / (magP * light.magnitude)) / Math.PI) * light.brightness / 100);
};
rotate = function (model, angX, angY, angZ) {
var sinX = Math.sin(angX * rad);var cosX = Math.cos(angX * rad);
var sinY = Math.sin(angY * rad);var cosY = Math.cos(angY * rad);
var sinZ = Math.sin(angZ * rad);var cosZ = Math.cos(angZ * rad);
for(var i = 0; i < model.vertexList.length; i++){
var vert = model.vertexList[i];
var rx1 = vert.x;
var ry1 = vert.y * cosX - vert.z * sinX;
var rz1 = vert.z * cosX + vert.y * sinX;
var rx2 = rx1 * cosY - rz1 * sinY;
var ry2 = ry1;
var rz2 = rz1 * cosY + rx1 * sinY;
var rx3 = rx2 * cosZ - ry2 * sinZ;
var ry3 = ry2 * cosZ + rx2 * sinZ;
var rz3 = rz2;
vert.x = rx3;vert.y = ry3;vert.z = rz3;
};
}
center.onEnterFrame = function() {
rotX += Key.isDown(Key.DOWN) * inc - Key.isDown(Key.UP) * inc;
rotY += Key.isDown(Key.LEFT) * inc - Key.isDown(Key.RIGHT) * inc;
rotate(cube, rotX, rotY, rotZ);
render(cube);
};
buon appetito...
non mi va
l'hai pubblicato con il flash player 6?
lo puoi fare anche senza codice!!Originariamente inviato da ubi1
e che codice uso?
ma dipende che ci devi fare
se poi quello che è stato postato ti va a posto
amen
"Hanno chiuso le mandrie nelle stalle
perchè liberi siamo fino all'alba."
R. Kipling