如何在处理 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 字体?的主要内容,如果未能解决你的问题,请参考以下文章

Qt 2D绘图之三:绘制文字路径图像复合模式

在SVG中绘制DOM对象时如何在Canvas中使用Google字体?

如何在没有抗锯齿的情况下在画布上绘制像素字体

win10 uwp 通过 Win2d 完全控制笔迹绘制逻辑

win10 uwp 通过 Win2d 完全控制笔迹绘制逻辑

win10 uwp 通过 Win2d 完全控制笔迹绘制逻辑