如何在 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
我有一个复杂的 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