现代opengl 设计 多个着色器的使用

现代opengl 程序中,都有一个着色器,我就想是不是可以有多个着色器呢?这样就催生了本文,2个着色器的例子。

一个着色器包含顶点着色器和片段着色器。本文介绍2个着色器的使用例子,一个是纹理贴图,一个只是简单的长方体。

下面先看看效果:

现在把2个着色器代码展示出来:

纹理图的顶点着色器:

#version 330 core
layout (location = 0) in vec3 aPos;
layout (location = 1) in vec2 aTexCoord;

out vec2 TexCoord;

uniform  mat4 mvp;

void main()
{
	gl_Position =  mvp* vec4(aPos, 1.0f);
	TexCoord = vec2(aTexCoord.x, aTexCoord.y);
}

 纹理图的片段着色器:

#version 330 core
out vec4 FragColor;
in vec2 TexCoord;

uniform sampler2D texture1;

void main()
{
	FragColor = texture(texture1, TexCoord);
}

 

立方体的 顶点着色器:

#version 330 core
layout (location = 0) in vec3 aPos;
uniform  mat4 mvp;
void main()
{
	gl_Position = mvp*vec4(aPos, 1.0);
}

立方体的 片段着色器:

#version 330 core
out vec4 FragColor;
uniform vec4 ourColor;
void main()
{    
	FragColor = ourColor;
}

可以看到2个实体有不同的着色需求,纹理的需要vec3, vec2, 而后者只要一个vec3。

其实使用也很简单,先构建2个着色器,分别得到2个id, 在程序中依次使用 

glUseProgram(ourShader.ID); 

glUseProgram(ourShader2.ID);

整个程序附录于后。需要编译链接运行的话,你需要安装GLFW, glad, glm。

GLFW, glad 的安装设置请看 现代opengl 设计入门 准备第一个工程

GLM是OpenGL Mathematics的缩写,它是一个只有头文件的库,也就是说我们只需包含对应的头文件就行了,不用链接和编译。GLM可以在它们的网站上下载。把头文件的根目录复制到你的includes文件夹,然后你就可以使用这个库了。

程序中还用到了shader_s.h 可以在这里下载stb_image.h可以在这里下载。

有了上面这些条件,建一个vc console工程,把下面代码复制过去就好了。还需要注意4个着色器文件的名字和路径要与程序一致,贴图文件你可以自己找个就好了,文件名和路径也要与程序中一致。也就是说程序中这5个文件的名字和路径要修改好。

程序在vc2010 上测试通过的,其他vc 应该也一样。

整个程序的代码也可以在我的网站www.liwensoft.com下载 , 但GLFW, glad不包括在内。

#include 
  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值