- 自己动手构建编程语言:如何设计编译器、解释器和DSL
- (美)克林顿·L.杰弗瑞
- 605字
- 2024-05-11 19:45:04
2.6.2 添加3D图形支持
2D图形作为文件数据类型的扩展被添加到Unicon中,支持正常的文件操作,如打开、关闭、读取和写入。事实上,有一个相关的窗口,可以对单个像素和其他图元进行操作,这是一个额外的好处。同样,3D图形也可以作为2D图形的扩展而加入。3D窗口支持3D空间中的相机观察图元,但它们以与2D功能相同的符号支持相同的属性(如颜色和字体),并提供同样的输入能力和额外的图形输出图元。
在内部,便携式3D图形需要OpenGL实现。OpenGL实现带来了很大的改变,并最终回到源语言级别。如果2D窗口的画布是一个可以读写的2D像素数组,3D窗口的画布则包含一个显示列表,用于重新绘制每个帧。OpenGL提供了一个显示列表,本质上是一种性能提升,它将图元捆绑在一起以供重用。在Unicon中,可以直接操纵此显示列表,以产生各种动画效果,例如改变单个图元的大小或位置。显示列表对于细节层次(Level Of Detail, LOD)管理和3D对象选择都至关重要。其中添加了一个控制结构来标记和命名显示列表的部分,然后可以启用/禁用或选择这些部分以供用户输入。底层OpenGL库并不直接支持3D对象选择,它是为用户提供与3D场景中的对象交互的能力的基础。
由于空间限制,对Unicon图形设施设计的讨论必然不完整。最初,在2D设施中,设计是有意的极简主义。虽然结果是成功的,但我们可以认为Unicon的图形功能应该做得更多。例如,可以发明新的控制结构,进一步简化图形输出操作。无论如何,本设计讨论应该让你对在现有语言中添加对新域的支持时可能出现的问题有了一些了解。