Existe-t-il un framework/moteur permettant de dessiner des images 3D sur Canvas?Dessin 3D dans Canvas avec HTML + JS
Je prévois d'en tirer quelques primitives (formes différentes) situées dans un même plan:
var dist = 2;
var hexHalfW = 35;
var lengthX = 20;
var hexR = Math.sqrt(lengthX*lengthX+hexHalfW*hexHalfW);//40.31128874
var hexDiag = 2*hexR;
var hexHeight = hexDiag;
var hexWidth = 2*hexHalfW;
function DrawHex(ctx, x, y)
{
var cx = x*(hexWidth + dist) - y*(hexWidth + dist)/2;
var cy = y*(hexR + lengthX + dist);
ctx.beginPath();
ctx.moveTo(cx, cy-hexR);
ctx.lineTo(cx+hexHalfW, cy-hexR+lengthX);
ctx.lineTo(cx+hexHalfW, cy+hexR-lengthX);
ctx.lineTo(cx, cy+hexR);
ctx.lineTo(cx-hexHalfW, cy+hexR-lengthX);
ctx.lineTo(cx-hexHalfW, cy-hexR+lengthX);
ctx.lineTo(cx, cy-hexR);
ctx.fill();
}
function draw()
{
var canvas = document.getElementById('tutorial');
if (canvas.getContext)
{
var ctx = canvas.getContext('2d');
//Pick Hexagon color, this one will be blue
ctx.fillStyle = "rgb(0, 0, 255)"; DrawHex(ctx, 1, 1);
ctx.fillStyle = "rgb(0, 0, 225)"; DrawHex(ctx, 3, 1);
ctx.fillStyle = "rgb(0, 0, 195)"; DrawHex(ctx, 4, 1);
ctx.fillStyle = "rgb(0, 0, 165)"; DrawHex(ctx, 6, 1);
ctx.fillStyle = "rgb(0, 255, 0)"; DrawHex(ctx, 3, 2);
ctx.fillStyle = "rgb(0, 225, 0)"; DrawHex(ctx, 4, 2);
ctx.fillStyle = "rgb(0, 195, 0)"; DrawHex(ctx, 5, 2);
}
}
je voudrais attirer ces primitives dans « perspective »: les formes plus proches (en bas de l'écran) sera être plus grand, les formes "éloignées" (en haut de l'écran) doivent être plus petites ...
Pour cela, les coordonnées des formes doivent être recalculées.
Devinez, je pourrais trouver quelques formules qui permettent de recalculer des coordonnées et écrire des fonctions correctes ... mais, probablement, il y a des moteurs qui font déjà cela?
Veuillez nous aviser.
Toutes les pensées sont les bienvenues!
galambalazs: votre suggestion n'est pas liée à la question. Mais vous êtes 100% correct! Ne prenez pas mon code près de votre coeur ... c'est un prototype seulement ... Pour être honnête, j'apprends juste à travailler avec des objets/classes dans JS. Mais définitivement, je vais utiliser la classe 'Hex' :) – Budda