/graphic_big_assignment

course big assignment

Primary LanguageC++

使用的库:
freeglut,glew(OpenGL)
stb_image(装载贴图)
assimp(装载obj文件)
静态库在lib文件夹里,动态库在dll文件夹内
头文件在include里
如果你要把库加入自己的工程里:
记得在项目的属性-配置属性-调试-环境里加上dll文件
在配置属性-c/c++-常规-附加包含目录里加上include文件夹
在配置属性-链接器-附加库目录加上lib文件夹
在配置属性-链接器-输入-附加依赖项-加上几个lib文件
如果不确定具体怎么写,可以看看我是怎么写的

所有的库都集成在工程里了,应该打开就能直接运行
记得用 debug x86 来运行
如果需要在别的配置下运行(比如release x64),库文件可能要重新编译,
跟我说明你需要的库,我可以帮你编译

(下面的操作需要在着色器程序编译好之后进行)
里面核心的类就是modelLoader:
new 的时候传入着色器的position、vexCoord和sampler三个uniform的location
(position传递顶点位置,vexCoord传递贴图坐标,sampler选择显卡的采样器)
load的时候传入需要载入的obj文件路径,然后在render函数里调用render就可以绘制了

需要注意,obj文件只支持每个面是三个顶点的格式,大部分的都是这种格式,
如果需要用到四边形绘制的文件,我再研究一下怎么加进去
还有就是所有贴图都必须保证存在,也就是你的mtl文件里面写有的贴图,都必须是找得到的
如果没有贴图,直接把mtl里面的map_kd还有map_ks删掉就行了
贴图你也可以通过改mtl文件来自己换,具体怎么弄,可以看之前助教发在群里的obj补充说明的文件

我还写了一下别的辅助类:
camera:控制摄像机
worldTransform:控制物体移动、旋转、放大缩小
project:控制投影
具体怎么用,看程序里面的注释就行了

移动鼠标能移动摄像机的方向,把鼠标放在屏幕边缘不动,就能一直往那个方向转(比如想往左转,就把鼠标放在左边屏幕边缘)
上下能移动各90度,左右能环绕360度
按wasd能平行移动,方向键上下可以上下移动(这个移动有些问题,不过能用,如果有需要的话,我之后再修)

--------------------------更新内容如下--------------------------------
obj现在支持读取漫反射相关的材质信息了。
我还写了一个简单的光照类,支持环境光和平行光。
我里面放有一个例子,光是从左边平行照过来,可以看看效果

shader相关的操作集成到了shader类里面,使用起来应该更容易了

------------------------------------------------------------
修复了材质没有贴图就无法显示的问题

-------------------------------------------------------------
加了放大缩小的功能:按i可以“zoom in”,按o可以“zoom out”

------------------------------------------------------------
改了modelloader类,使用比以前更简单了

添加了以下几个类:
grid类:用于编辑模式下编辑流水线
assemblyLine类:用于显示流水线
product类:用于控制产品在流水线上的显示和移动

使用说明:
按e进入编辑模式,鼠标左键点击,点亮的地方就是流水线

再按e进入观察模式,可以看产品在流水线上的移动

-----------------------------------------------------------
按m键可随时截图该屏幕