作品展示
(1)用户可以自行修改、定制属于自己鞋子的颜色、材质、贴图
(2)鞋子通过3d模型实时展示效果,让用户可以更清楚地全方位地看到自己定制的鞋子的效果。
最终实现效果是这样,可以切换鞋子的主体与反射得到一种镭射的质感,拥有多种超酷组合!
作品重点
1.obj模型的导入及尝试
运动鞋模型的导入是个大难题,不像游戏引擎具有导入模型资产这样成熟的流程,C++里面的图元都得用代码进行绘制。
那这样复杂的模型怎么进行导入呢?
原理是OBJ也是一种数据保存文件,像三维软件打开obj也是对这个文件进行渲染和读取的!
知道了这个原理以后也还是有很大的困难,用什么把这些顶点信息进行绘制呢?并且观察呢?
需要代码建立一个摄像机,然后重新绘制obj
我们尝试了很多次,用了猴头的例子可以顺利导入,而我们自己的鞋子模型就不行,原来是要将模型面进行三角化,于是我们打开blender,将鞋子的模型导入,然后导出时依然是obj格式,不过要勾选“三角面”!
2.摄像机的旋转
导入模型之后我们还要旋转观察模型。
于是写了一个函数用于控制摄像机的旋转,只要鼠标移动, 就会响应MouseMotion函数。
3.灯光材质
环境光Ambient:定义材质的环境光颜色 漫射光Diffuse:定义材质的漫反射光颜色,控制主体颜色,注掉就是石膏色 镜面光Specular:定义材质的镜面反射光颜色,不能为000
导入后,是一个灰模,为了给这个模型上色,我们用了冯氏光照模型
4.交互菜单
最后是交互菜单,切换菜单就可以选择不同的颜色和反射光!
原理就是将颜色数值的改变封装到菜单中去。
glutCreateMenu 创建一个弹出式菜单
glutAddMenuEntry 在当前菜单底部增加一个菜单条目
glutAttachMenu 将当前的一个鼠标按键与当前菜单联系起来
glutAddSubMenu 在当前菜单底部增加一个子菜单
当然我们也非常想实现,鞋子的分布变色qwq,但是这个vans模型本身就是一体的,我们又去查看了相关的论文,一篇中传服设的人台模拟,原理大概是——将能在c++里绘制出的图元(矩形,贝塞尔曲线,多边形等)拟合成人台和简易服装的样子。
但是这个vans的模型是在是太复杂了,想用opengl还原是不可能的qwq
于是我们做了一个木屐——用矩形和多边形组成的简易鞋子用来表现纹理映射的原理!
1.木屐的绘制
确定绘制面各点的位置,并按照方向贴图
别看图形简陋,画出方位图并且严丝合缝地将这些基本图元拼起来可是废了不少功夫!
(2)木屐优化
看我画的参考图就知道,加个倒角也很不容易qwq~
2.木屐的旋转
与上面的鼠标控制摄像机旋转的观察方式不太相同,这个是运用了观察矩阵的变换是用wasd控制木屐的旋转哦!
3.木屐纹理的绑定
(1)纹理绑定
(2)图元的点和纹理的点基本对应
(3)还要注意纹理不要贴反
4.木屐上色和界面
也是变色,写个colorful函数,封装到菜单里面就大功告成了!
虽然和原来预想的出入很大,但是这是用非常基础的额方法写出来的,这个过程中我与小伙伴都收获了很多,明白了我们平时看到的三维图形的基本渲染和绘制的原理,付出的汗水都值了!



