你自己的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的影响。

利用这个特点,我们做一个比较简单的例子。

posted @ 2014-03-22 19:52  梦神奇工作室  阅读(1611)  评论(0编辑  收藏  举报