知道如何优化 3D 骰子的人

问题描述 投票:0回答:0

我没能找到任何人为 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 所以骰子不是所以它没有弯曲,但我把它改回来了因为我打算在另一个程序中使用它

javascript optimization dice
© www.soinside.com 2019 - 2024. All rights reserved.