处理 - 改变相机的方向和固定的文本位置
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() 函数返回默认旋转。然后当你绘制文本时,它再次使用默认的旋转和平移。
我希望能够在固定位置显示文本的同时更改相机方向。摄像机角度应根据鼠标在 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() 函数返回默认旋转。然后当你绘制文本时,它再次使用默认的旋转和平移。