处理 - 改变相机的方向和固定的文本位置

Processing - Changing orientation of the camera and fixed text position

我希望能够在固定位置显示文本的同时更改相机方向。摄像机角度应根据鼠标在 window.

上的位置而变化

让我们考虑这个例子:

int sizeX = 600;
int sizeY = 600;

void setup()
{
  size(sizeX, sizeY, P3D);
}

void draw()
{
  background(204);

  stroke(0, 0, 0);
  //camera(mouseX, height/2.0, (height/2.0) / tan(PI*30.0 / 180.0), width/2.0, height/2.0, 0, 0, 1, 0);
  place();
  stroke(0);
  displayInfos();
}

void displayInfos()
{
  stroke(0, 200, 200);
  line (0,20,sizeX,20); // monitor bar
  fill(0);
  textSize(10);
  text ("TEXT 1:", sizeX*0.05,sizeY*0.1-20);
  textSize(12);
  text ("TEXT 2", sizeX*0.7,sizeY*0.95);
}

void place()
{
  pushMatrix();
  translate(sizeX/2, sizeY/2, 0); 
  noFill();
  rotateX(-PI/6);
  rotateY(PI/3);
  box(150);   
  popMatrix();
}

displayInfos() 函数绘制一条线,在固定位置写入一些文本,而 place() 函数在屏幕中间绘制一个框。

如果我在 draw() 函数中取消注释相机命令,整个场景都会旋转。我希望文本和栏固定在屏幕上,框根据鼠标位置旋转。

如何在处理中实现这一点?

只需在 pushMatrix() 函数之后调用 camera() 函数即可:

void place()
{
  pushMatrix();
  camera(mouseX, height/2.0, (height/2.0) / tan(PI*30.0 / 180.0), width/2.0, height/2.0, 0, 0, 1, 0);
  translate(sizeX/2, sizeY/2, 0); 
  noFill();
  rotateX(-PI/6);
  rotateY(PI/3);
  box(150);   
  popMatrix();
}

调用 pushMatrix() 基本上说 "remember the current rotation and translation",然后你可以做任何你想做的旋转和平移,画一些东西,然后调用 popMatrix() 基本上说 "go back to those other settings I told you to remember".

现在您要记住(推动)默认旋转,进行旋转和平移(通过相机功能),绘制框,然后通过 popMatrix() 函数返回默认旋转。然后当你绘制文本时,它再次使用默认的旋转和平移。