我没能找到任何人为 3D 骰子编写代码,所以现在我已经编写了一个,但是有谁知道如何优化它吗?我试着在自己周围移动立方体,我已经做到了translate(),但是当我四处移动它时,你会从不同的角度看到立方体,当我试图将它反过来时,它会变得倾斜
let slag;
let slag1Y = [0, 360 / 4, 360 / 2, -360 / 4];
let slag1X = [0, 360 / 4, -360 / 4];
let slagY;
let slagX;
let gange = 0;
let omdrejninger = 10
function setup() {
createCanvas(400, 400, WEBGL);
angleMode(DEGREES);
let kastTerning = createButton("kast");
kastTerning.position(100, 100);
kastTerning.mousePressed(() => {
terning();
});
}
function draw() {
let fart = 30 // et tal der går op i 360
translate(width / 4.5, height / 4.5);
if (gange < (omdrejninger * 360) + 2 && gange != 0) {
push();
translate(15, 15, -46);
fill(170, 69, 37);
rectMode(CENTER);
rect(0, 0, 190);
pop();
rotateX(11);
rotateY(-9);
rotateX(gange);
rotateY(gange);
gange += fart;
rotateY(slagY);
rotateX(slagX);
// laver 6 siden
push();
translate(0, 0, 46);
fill(0);
translate(-90 / 3, -90 / 3, 0);
for (let i = 0; i < 2; i++) {
for (let j = 0; j < 3; j++) {
circle(7 + i * (90 / 2), 0 + j * (90 / 3), 20);
}
}
pop();
// laver 4 siden
push();
fill(0);
rotateX(360 / 4);
translate(-90 / 3, -90 / 3, 46);
for (let i = 0; i < 2; i++) {
for (let j = 0; j < 2; j++) {
circle(7 + i * (90 / 2), 7 + j * (90 / 2), 20);
}
}
pop();
// laver 1 siden
push();
fill(0);
rotateX(360 / 2);
translate(0, 0, 46);
circle(0, 0, 20);
pop();
// laver 3 siden
push();
fill(0);
rotateX(-360 / 4);
translate(-90 / 3, -90 / 3, 46);
for (let i = 0; i < 3; i++) {
for (let j = 0; j < 3; j++) {
if (i == 2 && j == 0) {
circle(0 + i * (90 / 3), 0 + j * (90 / 3), 20);
}
if (i == 1 && j == 1) {
circle(0 + i * (90 / 3), 0 + j * (90 / 3), 20);
}
if (i == 0 && j == 2) {
circle(0 + i * (90 / 3), 0 + j * (90 / 3), 20);
}
}
}
pop();
// laver 5 siden
push();
fill(0);
rotateY(-360 / 4);
translate(-90 / 3, -90 / 3, 46);
for (let i = 0; i < 2; i++) {
for (let j = 0; j < 2; j++) {
circle(7 + i * (90 / 2), 7 + j * (90 / 2), 20);
}
}
translate(90 / 3, 90 / 3, 0);
circle(0, 0, 20);
pop();
// laver 2 siden
push();
fill(0);
rotateY(360 / 4);
translate(90 / 3, 90 / 3, 46);
circle(-7, -7, 20);
translate(-90 / 3, -90 / 3, 0);
translate(-90 / 3, -90 / 3, 0);
circle(7, 7, 20);
pop();
// laver en boks
fill(220);
box(90);
}
}
function terning() {
gange = 1
slag = floor(random(1, 7));
console.log(slag)
switch (slag) {
case 1:
slagY = slag1Y[2];
slagX = slag1X[0];
break;
case 2:
slagY = slag1Y[3];
slagX = slag1X[0];
break;
case 3:
slagY = slag1Y[0];
slagX = slag1X[1];
break;
case 4:
slagY = slag1Y[0];
slagX = slag1X[2];
break;
case 5:
slagY = slag1Y[1];
slagX = slag1X[0];
break;
case 6:
slagY = slag1Y[0];
slagX = slag1X[0];
break;
}
}
我试过在 middel 中使用 translatet 所以骰子不是所以它没有弯曲,但我把它改回来了因为我打算在另一个程序中使用它