复工之前
如果最近有时间,我想继续改改我的pillow,所以先写写改进的想法。
我想功能上先不大改,主要目标是提高稳定性,修复bug。具体说起来有以下4点。
第一,我想用sse指令集来改进一下我的数学库,我现在的数学库写的比较马虎。再说,现在是个电脑就有sse,我原先的数学库显得有点太古董了。我看到一个文章做的测试,同一个运算用sse快了3倍,而我自己做的一个求向量和的测试竟然快了8倍。所以说改这个数学库还是很有必要的。
第二,就是修复两个碍眼的bug,其中一个是删除点的问题,估计比较好改。另一个比较麻烦的就是焊接点操作。我的程序中对于模型的规定比较严格,所以焊接点的时候情况特别多,合法性判断也非常复杂。头疼。
第三,我还是禁不住cegui效果的诱惑,想把现在的界面改一改,不过到底cegui是不是合适,我还要研究研究才能知道。
第四,就是用smart pointer来代替我现在的raw pointer,看看是不是可以防止内存泄露,同时把redo和undo的功能给弄好。
之前在网上和别人讨论,有人建议我用结点结构组织场景。因为我一直是用3D Max的,不懂什么是结点结构。我之前就知道有些材质工具,比如dark tree好像是结点结构,但是建模和结点结构的关系我不懂。所以还我装了好多好多建模软件,想体会一下,至今还没开窍。所以代码结构就不改了。我觉得自己思考也是个乐趣。和别人的都一样意思也不大了。
现在让我苦恼的还有个事:有个概念叫做元操作,就是说凡是属于这种操作的都无法再继续细分了,相当于操作中的原子。一个元操作的状态只可能有两种——完成或没完成。可是在我的程序中,为了简化历史纪录,我将图形的操作分解为很多个元操作,而图形操作本身不是元操作。这样就出现了一个问题,如果一个图形操作执行了一半就疵了,咋办?这涉及到恢复已经改变的数据的问题。比如说,焊接操作有很多条件判断,焊接一半的时候发现条件是非法的,这时候就需要把已经处理的焊接给恢复成原貌。当然直观想象一下有两个解决方法,第一是纪录每次元操作,如果半路中止,那么就依据纪录的信息回退回去。第二种方法,就是在任何操作之前先进行合法性检验,如果判定操作不能成功,则直接返回,根本不进行任何操作。但是想想看,这两种方法都非常麻烦。
烦!
No comments:
Post a Comment