最近还是想尽量快速完成这个系列,一是为了巩固和学习图形学知识,因为以前学习的理解有很多不到位也比较散碎
学习以http://bullteacher.com教程为主,辅以第八版opengl编程指南
希望在of上完整实现一遍可编程管线流程,接上一次博客http://blog.csdn.net/shenmifangke/article/details/51344689
使用of0.84 codeblocks版
注意openframeworks 没有鼠标滚轮事件
如果不改动的话,自己增加不了,如果很在意这个功能,可以用0.9以上的版本
github源码(注释比较乱,主要是因为和以前的理解出入比价大)
https://github.com/shenmifangke/openGL_openframeworks_learn3
主要是对这篇的实现http://bullteacher.com/9-coordinate-systems.html
文中采用的GLM库,但是我觉得还是配置麻烦,
因为学个图像编程还要装这么多外部库,很容易就掉其他坑里的,所以这也是我用of开这个系列的原因
这里使用of自带的ofMatrix4x4来替换glm库里的mat4
具体代码可以参考上面github地址,这次放上了编译的exe
下面是最终效果图
下面是基本用法,projection即可理解为最终的变换矩阵
ofMatrix4x4 model = ofMatrix4x4();
ofMatrix4x4 view = ofMatrix4x4();
ofMatrix4x4 projection = ofMatrix4x4();
model.rotate(-55.0f,1.0f, 0.0f, 0.0f);
view.translate(0.0f, 0.0f, -3.0f);
projection.makePerspectiveMatrix(45.0f,(float)ofGetWidth()/(float)ofGetHeight(), 0.1f, 100.0f);
矩阵传递到shader可以使用ofMatrix4x4的getPtr方式
GLint viewLoc = glGetUniformLocation(shader_programme, "view");
glUniformMatrix4fv(viewLoc, 1, GL_FALSE, view.getPtr());
下面是两个着色器代码
frag
#version 330 core
in vec3 ourColor;
in vec2 TexCoord;//新增的纹理
out vec4 color;
uniform sampler2D ourTexture1;//新增的纹理采样器
uniform sampler2D ourTexture2;//第二个纹理
void main()
{
//图片混合
color = mix(texture(ourTexture1, TexCoord), texture(ourTexture2, TexCoord), 0.6);
}
vertex
#version 330 core
layout (location = 0) in vec3 position; // 位置变量的属性position为 0
layout (location = 2) in vec2 texCoord;//新增的纹理
out vec2 TexCoord;//新增的纹理
uniform mat4 model;
uniform mat4 view;
uniform mat4 projection;
void main()
{
gl_Position = projection * view * model * vec4(position, 1.0f);
TexCoord = texCoord;//新增的纹理
}
主要代码还是参看github上的,因为写得比较凌乱,(因为最近工作比较凌乱……)
希望喜欢这个系列或者对图像学特效独立游戏等等感兴趣的联系或者和我讨论