首页 > 其他 > 详细

你自己的3D建模软件(基础02)——初试核心类Scene

时间:2014-03-23 09:36:09      阅读:406      评论:0      收藏:0      [点我收藏+]

Scene是ProScene最关键的类,它提供了摄像机交互。

我们只需要在setup()中实例化一个Scene对象,那么整个3D场景就可以为鼠标键盘控制。

bubuko.com,布布扣
 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 }
bubuko.com,布布扣

点击运行,按住鼠标左键旋转场景,中键缩放,右键平移。

bubuko.com,布布扣

这时,如果我们加入一些以前学过的3D图形命令在draw()里面,比如box()或者其他什么,那么我们就可以利用鼠标浏览了。

bubuko.com,布布扣

想加入一些界面?这就遇到问题了,界面都是2D的,而P3D模式下,(x,y)这样的坐标实际是在(x,y,0)这个屏幕上,也就是上图白色网格那个位置。可问题是,我们只想要界面和平常看到的一样画在固定的二维位置,而不是随着摄像机的改变而改变。这种情况的界面一般被叫做HUD,这是个很响亮的名字,想想战斗机头戴显示器也是HUD。

Scene也提供了实现这个的命令:beginScreenDrawing()和endScreenDrawing()。顾名思义,我们要把那些控件绘制在这两个函数中间,就像push和pop的组合一个道理。

譬如,我们加入一个ControlP5的按钮控件(相关使用方法请看准备篇)。

bubuko.com,布布扣
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();
}
bubuko.com,布布扣

这样,我们就在窗口左侧绘制了一个ControlP5按钮。而其位置是相对于窗口本身而言的,并且不受Scene的影响。

bubuko.com,布布扣

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

你自己的3D建模软件(基础02)——初试核心类Scene,布布扣,bubuko.com

你自己的3D建模软件(基础02)——初试核心类Scene

原文:http://www.cnblogs.com/monstage/p/3617927.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!