你自己的3D建模软件(基础02)——初试核心类Scene
Scene是ProScene最关键的类,它提供了摄像机交互。
我们只需要在setup()中实例化一个Scene对象,那么整个3D场景就可以为鼠标键盘控制。
1 import remixlab.proscene.*; 2 3 Scene scene; 4 5 void setup() { 6 size(640, 360, P3D); 7 scene=new Scene(this); 8 } 9 10 void draw() { 11 background(127); 12 }
点击运行,按住鼠标左键旋转场景,中键缩放,右键平移。
这时,如果我们加入一些以前学过的3D图形命令在draw()里面,比如box()或者其他什么,那么我们就可以利用鼠标浏览了。
想加入一些界面?这就遇到问题了,界面都是2D的,而P3D模式下,(x,y)这样的坐标实际是在(x,y,0)这个屏幕上,也就是上图白色网格那个位置。可问题是,我们只想要界面和平常看到的一样画在固定的二维位置,而不是随着摄像机的改变而改变。这种情况的界面一般被叫做HUD,这是个很响亮的名字,想想战斗机头戴显示器也是HUD。
Scene也提供了实现这个的命令:beginScreenDrawing()和endScreenDrawing()。顾名思义,我们要把那些控件绘制在这两个函数中间,就像push和pop的组合一个道理。
譬如,我们加入一个ControlP5的按钮控件(相关使用方法请看准备篇)。
import controlP5.*; import remixlab.proscene.*; Scene scene; ControlP5 cp5; void setup() { size(640, 360, P3D); scene=new Scene(this); cp5=new ControlP5(this); cp5.setAutoDraw(false);//禁止自动绘制cp5 cp5.addButton("change"); } void draw() { background(0); box(20); scene.beginScreenDrawing(); cp5.draw();//手动绘制cp5 scene.endScreenDrawing(); }
这样,我们就在窗口左侧绘制了一个ControlP5按钮。而其位置是相对于窗口本身而言的,并且不受Scene的影响。
利用这个特点,我们做一个比较简单的例子。