从2.28号到现在,在休息,在此先整理下之前的情况,对问题和要做的内容进行一下梳理。
首先,把之前的问题稍做下总结,上次提到OpenGL版本这块,我的是1.1版本,所以就只能用顶点数组来实现了,否则效率很差,本来以为顶点数组只能用静态的数组实现,我打错特错了,普通的数组就可以了,这样就算频繁的进行修改,也可以满足我的需求了,这就解决了我一大技术问题,这是最主要的,顶点数组用glDrawArrays或者glDrawElements来绘制,前者基于原先的顶点数组的范围,后者指定新的索引数组,更具灵活性,参见这,一篇更详细的在这,之后有很多的扩展,功能更强大,当然,需要高点的OpenGL版本,然后在NeHe的教程里看到了一份关于顶点数组的代码,借鉴了一下,把我原先用显示列表的方法,全改成顶点数组,就在相应的地方,添加进我需要操作的数据,顶点数组,三角面的顶点索引,法向量数组,相应纹理的坐标数组,每次分两个步骤还绘制,普通面的绘制,加上纹理面的绘制,然后就完成了。这样子,效率大大的提高了,感觉有一个数量级了,然后就完了,改代码的时候比较痛苦一点(这个顶点数组的方法指的就是把点的信息一块绘制出来,也就是说纹理,颜色,法向量都是基于点的,也就说模型必须是光滑的,纹理共用的一张贴图要有意义),同时也出现了个很诡异的问题,就是加载两张图片的时候,纹理映射出现了Bind的问题,感觉纹理没Bind成功,找了半天找不出错误,今天发现只要在Bind使用之后,再用TexEnv来设置映射环境参数,就好了,和上次的那个问题一样,不知道为什么。实现了曲线的选择这个功能,用一个点栈去维护就可以了,后来才被老师指正这个只能选定凸多边形的集合,好吧,作为一个菜鸟,渐渐习惯了,恩,大致就这个样子了。
然后,上一张图来演示下目前的进展情况:
接着,罗列下存在尚需思考的问题:
1. 代码结构紊乱,毕竟是在开源结构上进行的开发,现在导致,又需要他们的数据结构,又需要我的数据结构,所以两边都运行,这样从效率上还是结构上都是很差的,想着要重写,因为快受不了了,可是担心后面的需求导致的变化,会影响更大,先留着他们的数据结构,说不准会用的上,最后才重新规划设计下代码数据结构好了。
2. 基于Doc-View的架构与对象上的数据存放问题,必须使得多文档要一致,即要确保多文档是有效的。因为我现在在有点功能上,多文档等同于单文档了,没有很好的理解文档/视图这个架构。
最后,列举下需要做的:
1. 三角面有些不是朝外的,需要预处理修正下,才菜单上添加下这个功能。
2. 添加视图的方向,包括6个正视图,轴侧视图,3点指定一个平面,做投影。
3. 判断遮挡关系,确保只贴最外层的三角面。
4. 对图像进行预处理,选取一个有效区域。
5. 对象从X方向和Y方向上,可以进行对齐设定。
6. 可以看到剖视图,这样就可以贴内胆。
7. 可以拾取点或三角形,设置颜色。
8. 支持最少三种文件,obj/wrl/ply。
9. 可以完成多张的贴图工作,支持多张图片的显示,用TabControl什么的。
10. 使用四叉树,链表等数据结构,支持实时的拾取和判断遮挡关系的优化,加速。
11. 支持点在凹多边形内的判定。
PS: 十分感谢老师的指导~