如何在处理 P3D 模式下绘制 2D 字体?
Posted
技术标签:
【中文标题】如何在处理 P3D 模式下绘制 2D 字体?【英文标题】:How do I draw 2D fonts in processing P3D mode? 【发布时间】:2015-08-14 10:21:53 【问题描述】:我正在运行一个草图,其中包含 3D 空间 (P3D) 中的点数组。我想通过绘制文本来为其添加一个界面,就好像它是“屏幕上”/2D,只使用“X,Y”参数。
当我尝试添加 "text("!@#$%", width/2, height/2);"它在 3D 空间中渲染。
有可能吗?我尝试了“textMode(SCREEN) 但在处理 2 中不再存在。
【问题讨论】:
“还有吗?” Processing 2 已经有好几年的历史了,Processing 3 目前处于公开测试阶段,准备发布...... Processing 1.x API 已经非常长时间有效=)跨度> 大声笑我刚回来,我安装的仍然是 1.x。不过我会看看Processing 3,看看它是否有任何解决方案。 如果您将MCVE 与您的问题一起发布,您将会有更好的运气。这可以只是一个显示 3D 点和您尝试显示文本的简单草图,因此我们可以在我们自己的机器上运行它来玩。 【参考方案1】:这是我发现的,我猜是在处理论坛上
你可以使用:
用于 3D 内容的 PMatrix3D 并以简单的旧方式编码您的 2D 内容希望对你有帮助
PMatrix3D baseMat;
float alpha =0;
void setup()
size(400, 400, P3D);
// Remember the start model view matrix values
baseMat = getMatrix(baseMat);
void draw()
background(40);
pushMatrix();
camera(0, 0, 400, 0, 0, 0, 0, 1, 0);
directionalLight(255, 255, 255, -100, 150, -100);
ambientLight(40, 40, 40);
// 3D drawing stuff here
rotateY(alpha);
box(100);
alpha += 0.05;
popMatrix();
// Restore the base matrix and lighting ready for 2D
this.setMatrix(baseMat);
ambientLight(255, 255, 255);
// draw 2D stuff here
rect(10, 10, 50, 10);
textSize(25);
text("voila", mouseX, mouseY);
【讨论】:
【参考方案2】:想到的解决方法是创建一个与您的草图具有相同宽度/高度的 2D PGraphic,为其提供透明背景,在您想要的位置绘制文本,然后将 PGraphic 绘制到您的真实草图上就像复制图像源数据一样。
【讨论】:
这是一个很好的解决方法,但我需要它是动态的:((ps:需要显示一些变量等) 为什么不行?您可以全局创建 PGraphic 缓冲区,例如PGraphic buffer
,然后在设置中通过createGraphic
创建具有相同大小尺寸的它,然后在绘图期间您可以简单地更新缓冲区,绘制为图像,下一帧更新缓冲区,绘制作为图像,只要你的草图运行就重复以上是关于如何在处理 P3D 模式下绘制 2D 字体?的主要内容,如果未能解决你的问题,请参考以下文章