如何在 3D 绘图中始终在前面显示文本?

How can I display text always in front on a 3D plot?

我有一个复杂的 3D 图,其中有一些关于翻转的文本。它已经有点混乱,所以我希望文本始终位于所有情节部分的前面。喜欢这里:

现在,当我将鼠标悬停在背景中的某些点上时,文本有时会隐藏在绘图组件后面,如下所示:

如何强制文本始终位于前面并面向相机(现在已经是)。?

使用pushMatrix()/popMatrix()隔离坐标spaces:一个用于3D图形,另一个用于顶部的2D元素:

void setup(){
  size(300, 300, P3D);
  sphereDetail(9);
  noFill();
  stroke(255);
  textSize(21);
  textAlign(CENTER);
}

void draw(){
  background(0);
  // 3D
  pushMatrix();
    translate(width * 0.5, height * 0.5, 0);
    rotateX(map(mouseY, 0, height, -PI, PI));
    rotateY(map(mouseX, 0, width, PI, -PI));
    sphere(150);
  popMatrix();
  // 2D
  pushMatrix();
    text((int)frameRate, mouseX, mouseY);
  popMatrix();
}

(不需要缩进,只是在视觉上强调坐标 space 嵌套。 最后一个 push/pop 可能不需要这样的简单示例,但如果您在已经绘制的内容之上有更多 2D/3D 内容,则很有用)

有关更多信息,请查看 2D Transformations Tutorial

此外,您可能会发现 PeasyCam library 很有用。 要在顶部绘制 2D 文本,您需要执行以下操作:

camera.beginHUD();
// draw 2D overlays here
camera.endHUD(); // back to 3D