共计 3970 个字符,预计需要花费 10 分钟才能阅读完成。
举荐:将 NSDT 场景编辑器 退出你的 3D 开发工具链
介绍
在 CHAI3D 中,小部件是以 2D 模式显示数据和状态信息的次要元素。每个摄像机都蕴含一个前层和后层,能够在其上附加小部件。渲染摄像机场景时,首先渲染 2D 背景图层,而后渲染 3D 世界,最初渲染 2D 前图层。在下一节中,咱们将回顾其中一些根本小部件。
CHAI3D 中的小部件
面板
cPanel 可用于在窗口上搁置一个空面板。面板具备用于提供圆角、色彩和资料纹理属性的属性。面板由其宽度定义,高度能够搁置在视口中的任何地位。
using namespace chai3d; | |
// create a panel | |
cPanel* panel = new cPanel(); | |
// add panel to front layer of camera | |
camera->m_frontLayer->addChild(panel); | |
// set width and height of panel | |
panel->setSize(300, 200); | |
// assign radius of each corner of panel | |
panel->setCornerRadius(10, 10, 10, 10); | |
// assign a position (x,y) to panel | |
panel->setLocalPos(40, 60); | |
// set a uniform color to panel | |
panel->setColor(cColorf(1.0, 0.5, 0.5)); | |
// assign a transparency level to panel | |
panel->setTransparencyLevel(0.5); |
位图
应用程序能够将位图小组件增加到其用户界面以显示图像。图像及其原点显示在微件指标矩形的左下角,并且能够沿 X 轴和 Y 轴拉伸。
using namespace chai3d; | |
// create bitmap object | |
cBitmap* bitmap = new cBitmap(); | |
// add bitmap to front layer of camera | |
camera->m_frontLayer->addChild(bitmap); | |
// load image file | |
bitmap->loadFromFile("myImage.png"); |
背景
背景构件可用于显示笼罩整个显示窗口的图像。
// create a background object | |
cBackground* background = new cBackground(); | |
// add background to back layer of camera | |
camera->m_backLayer->addChild(background); | |
// set aspect ration of background image a constant | |
background->setFixedAspectRatio(true); | |
// load an image file | |
background->loadFromFile("myImage.png"); |
示例 05- 字体:背景图像笼罩整个窗口
水平仪
水平仪是一个线性仪表小部件,用于让用户疾速理解值在肯定范畴内的地位。程度能够程度或垂直设置。
using namespace chai3d; | |
// create dial object | |
level = new cLevel(); | |
// add level to front layer of camera | |
camera->m_frontLayer->addChild(level); | |
// set range of values displayed by level | |
level->setRange(0.0, 0.1); | |
// set size of level | |
level->setSize(40); | |
// enable single line display option | |
level->setSingleIncrementDisplay(true); | |
// assign value to level | |
level->setValue(value); |
水平仪能够通过旋转小部件 90 度来程度设置。
using namespace chai3d; | |
// rotate level of 90 degrees angle | |
level->rotateWidgetDeg(90); |
表盘
表盘提供与水平仪相似的性能,但采纳圆形显示。
拨盘:(左)间断显示(右)单增量显示
using namespace chai3d; | |
// create dial object | |
dial = new cDial(); | |
// add dial to front layer of camera | |
camera->m_frontLayer->addChild(dial); | |
// set range of values displayed by dial | |
dial->setRange(-0.1, 0.1); | |
// set size of dial | |
dial->setSize(40); | |
// enable single line display option | |
dial->setSingleIncrementDisplay(true); | |
// assign value to dial | |
dial->setValue(value); |
示波器
应用程序能够增加一个 cScope 小部件,以显示多达四个相似于数字示波器的不同信号。
using namespace chai3d; | |
// create a background object | |
scope = new cScope(); | |
// add scope to back layer of camera | |
camera->m_frontLayer->addChild(scope); | |
// assign a position (x,y) to panel | |
scope->setLocalPos(100,60); | |
// set range of signal values (min / max) | |
scope->setRange(-0.1, 0.1); | |
// enable signals for display | |
scope->setSignalEnabled(true, true, true, false); | |
// assign a transparency level to scope | |
scope->setTransparencyLevel(0.7); |
初始化示波器后,能够应用以下命令继续更新信号值:
using namespace chai3d; | |
// assign signal values | |
scope->setSignalValues(value0, value1, value2, value3); |
标签
标签是用于在应用程序中增加文本的小部件。对于每个标签,将调配一种字体。字体应始终在实例化标签之前创立,并且能够在多个标签之间共享。
using namespace chai3d; | |
// create a font | |
cFont* font = NEW_CFONTCALIBRI20(); | |
// create a label | |
cLabel* label = new cLabel(font); | |
// add label to front layer of camera | |
camera->m_frontLayer->addChild(label); | |
// assign color to label | |
label->m_fontColor.setBlack(); | |
// assign text to label | |
label->setText("my message"); | |
// position widget on screen | |
label->setLocalPos(100, 120); |
字体
CHAI3D 反对应用位图字体,位图字体由蕴含字体中所有必须字母的纹理图集和形容该纹理图集上每个字母的地位和大小的文本数据文件组成。
所选字体在 CHAI3D 框架中编码,并能够应用以下代码进行实例化。编码字体的残缺列表能够在 src/resources 目录中找到。
using namespace chai3d; | |
// create a font (Calibri Size 20) | |
cFont* font1 = NEW_CFONTCALIBRI20(); | |
// create a font (Calibri Size 36) | |
cFont* font2 = NEW_CFONTCALIBRI36(); |
字体也能够应用应用程序 BMFont 从 AngelCode 生成的字体文件加载。
using namespace chai3d; | |
// create a font | |
cFont* font = new cFont(); | |
// load font from file | |
font->loadFromFile("myFont.fnt"); |
应用 BMFont 创立位图字体
步骤 1
运行 BMFont 并关上选项 -> 字体设置。
步骤 2
1、从 PC 上已装置的字体列表中抉择所需的字体,或增加硬盘驱动器上的字体文件。
2、设置字体的像素大小并选中匹配字符高度。
3、查看 字体平滑 和 超级采样 如果您心愿字母平滑且打消锯齿。
步骤 3
1、而后回到主工具窗口,您将看到所选字体中蕴含的所有字母。
2、突出显示您心愿蕴含在字体中的所有字母,通过关上 / 敞开每个字母或从右侧列表中切换字母的子局部来独自突出显示。
步骤 4
1、接下来,关上选项 -> 导出选项。
2、依据您抉择的字体,以及是否要向纹理图集增加任何前期成果,您可能须要增加一些字母填充以避免字母上出现意外的伪影。
3、设置纹理图集的宽度和高度。它须要足够大,以便将所有字母放入一个纹理上。要查看它是否适宜所选大小,请返回主窗口并按“V”或转到选项 -> 可视化。
4、最好是保持应用地图集的 2 次幂维度。例如 2,4,8,16,32,64,128,256,512 等。5、查看 32 位深度以容许 alpha 通道。
6、选中文本文件格局,并查看 PNG 作为纹理格局。
步骤 5
1、抉择选项 -> 将位图字体另存为 …2、将位图字体保留到 CHAI3D 资源文件夹。
3D 建模学习工作室翻译整顿,转载请表明出处!