[
](kaveh808.medium.com/?source=pos…)
6月10日
-
3分钟阅读
[
拯救
29.如果你认为C++是个好主意,请举手。
我花了很长的时间在我们安装在公寓里的SGI工作站上进行黑客攻击。甚至还通过麦吉尔大学的一个联系人,通过调制解调器连接了电子邮件。
使用自制的面向对象的惯例来定义类和分配方法,我实现了一个预处理器,生成C结构和开关语句。我过去(现在也是)是面向对象设计的忠实粉丝,在Symbolics上使用Flavors,并阅读了Smalltalk、Objective-C和C++。
但我绝对不喜欢C++实现OO思想的方式。30年过去了,当我看着它演变成一个毛球时,我仍然不确定它对软件开发有什么积极的贡献,也不知道为什么有人认为它是一件好事。我的印象是C++开始时有两个不正确的假设:(1)OO可以静态地栓在C上--而Objective-C实现了动态运行时;(2)一切--生产力、维护、安全--都必须牺牲在代码执行速度的祭坛上。
现在废话不多说了。回到Metropolis图形系统。
我从实现矢量和矩阵库、场景数据结构和多边形几何开始。一切都是用C语言和SGI GL编写的。我认为OpenGL标准在那个时候刚刚形成。
UI也完全是用GL编写的:窗口、按钮、菜单等等。我甚至还写了在按钮上画斜面的程序,这在当时是很时髦的事情。
与此同时,Mike正在开发他的新渲染器。我注意到,像Mike这样专门从事渲染工作的开发者,有一点是他们总是热衷于开始新的重写。他们总是有新的和改进的想法,即如何在更好地理解领域的基础上,通过重新架构代码来提高下一个渲染器的灵活性和优化。
一段时间后,第一次,我的手腕开始因为长时间的黑客攻击而疼痛。我很担心会出现腕管炎,但事实证明并非如此。随着时间的推移,我的姿势和培养更好的人体工程学习惯的工作得到了改善。我已经不再年轻了。
设计与代码
从上面的图片可以看出,我已经实现了一个多视图窗口,这样我就可以看到我最近一直在玩的程序性建模的变化。它生成了一个视口的网格,其观察参数是同步的。
继续我上一篇文章中的程序性几何的实现,我在系统中添加了一个superquadric 类。我一直是程序化几何的粉丝。也许是因为它感觉就像我在告诉计算机要做什么,而它在为我做工作。这也是应该的。
超级矩阵对我来说也有一丝怀旧的感觉。我最早看到的3D CG图像之一(不算 "创")是一个由superquadrics制成的机器人手臂。这是一张来自Raster Technologies的宝丽来照片,是加州理工学院的Alan Barr所做的光线跟踪渲染。
上面的列表是我的超级四维码实现的全部代码。我从我在1992年用Macintosh Common Lisp写的一些代码中改编了它。我对它的简短和--如果我可以说--优雅的结果感到高兴。