You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Processing 4 beta P3D渲染器中获取和设置当前投影矩阵

Processing 4 beta P3D渲染器投影矩阵操作方案

核心操作方法

P3D渲染器对应的PGraphicsOpenGL类公开了投影矩阵相关的成员和方法,无需依赖未暴露的私有逻辑,可直接实现你需要的所有操作:

  • 获取当前投影矩阵:直接读取公共成员projection即可,它是PMatrix3D类型实例,存储了当前完整的投影矩阵参数,代码示例:
    import processing.opengl.*;
    // 强转g为PGraphicsOpenGL类型后读取
    PMatrix3D currentProj = (PMatrix3D) ((PGraphicsOpenGL)g).projection.get();
    
  • 设置投影矩阵:直接调用setProjection()方法传入保存的矩阵即可:
    ((PGraphicsOpenGL)g).setProjection(currentProj);
    
  • 临时切换投影的快速操作:PGraphicsOpenGL内置了和变换矩阵对应的投影栈操作,不需要手动管理矩阵存储,完全匹配你的叠加文本需求:
    • pushProjection():将当前投影矩阵压入栈
    • popProjection():弹出栈顶的投影矩阵恢复状态

叠加2D文本的完整实现示例

import processing.opengl.*;

PMatrix3D defaultProj;

void setup() {
  size(1280, 720, P3D);
  // 保存size()初始化生成的原始默认投影矩阵,后续可随时还原
  defaultProj = (PMatrix3D) ((PGraphicsOpenGL)g).projection.get();
}

void draw() {
  background(20);
  // 自定义3D相机和透视设置
  camera(width/2.0, height/2.0, (height/2.0) / tan(QUARTER_PI), 
         width/2.0, height/2.0, 0, 
         0, 1, 0);
  perspective(PI/3, (float)width/height, 0.1, 5000);
  
  // 绘制3D场景内容
  fill(255, 100, 0);
  noStroke();
  translate(width/2, height/2);
  rotateX(frameCount * 0.01);
  rotateY(frameCount * 0.02);
  box(200);
  
  // 临时切换投影绘制2D叠加文本
  PGraphicsOpenGL glGfx = (PGraphicsOpenGL) g;
  // 保存当前3D投影
  glGfx.pushProjection();
  // 切换为标准2D正交投影,也可以直接用之前保存的defaultProj
  ortho(0, width, height, 0, -10, 10);
  // 重置模型变换矩阵
  pushMatrix();
  resetMatrix();
  
  fill(255);
  textSize(32);
  text("屏幕叠加文本测试", 30, 50);
  text(String.format("当前帧:%d", frameCount), 30, 90);
  
  popMatrix();
  // 恢复之前的3D投影
  glGfx.popProjection();
}

注意事项

  • 上述操作仅适用于P3D/OPENGL渲染器,默认JAVA2D渲染器无相关实现,匹配你的使用场景。
  • 虽然官方Javadoc未收录这些API,但从Processing 3到4的稳定版本中,projection成员、pushProjection()/popProjection()方法均为公开实现,兼容性有保障。
  • 无需手动记录perspective()等投影设置的参数,不会给最终用户带来额外使用负担。

内容的提问来源于stack exchange,提问作者AJN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 10:18:02