HazelEngine 学习记录 - Material Systems

Material Systems

对于不同的物体或者对象,我们希望其有不同的属性,例如颜色,这些属性是被包含在材质当中的,本节并没有完整的实现材质系统,而是简单的设置了全局变量 u_Color 来修改物体的颜色。

首先创建函数来设置全局变量 Vec4:

	void Shader::UpLoadUniformFloat4(const std::string& name, const glm::vec4& values)
	{
		GLint location = glGetUniformLocation(m_RendererID, name.c_str());
		glUniform4f(location, values.x, values.y, values.z, values.w);
	}

然后在 SandBox 中定义两个颜色:

		glm::vec4 redColor(0.8f, 0.2f, 0.3f, 1.0f);
		glm::vec4 blueColor(0.2f, 0.3f, 0.8f, 1.0f);

将这两个颜色分别进行设置,然后在 Shader 中使用这个全局变量:

glm::vec4 redColor(0.8f, 0.2f, 0.3f, 1.0f);
		glm::vec4 blueColor(0.2f, 0.3f, 0.8f, 1.0f);

		for (int y = 0; y < 20; y++)
		{
			for (int x = 0; x < 20; x++)
			{
				glm::vec3 pos(x * 0.11f, y * 0.11f, 0.0f);
				glm::mat4 transform = glm::translate(glm::mat4(1.0f), pos) * scale;
				if (x % 2 == 0)
					m_blueShader->UpLoadUniformFloat4("u_Color", redColor);
				else
					m_blueShader->UpLoadUniformFloat4("u_Color", blueColor);
        
        //Shader
      std::string FlatColor_fragmentSrc = R"(
			#version 330 core
			
			layout(location = 0) out vec4 color;
			uniform vec4 u_Color;
			in vec3 v_Position;
			void main()
			{
				color = u_Color;
			}
		)";

这里根据列对颜色进行了不同的设置,偶数行被设置成了红色:

在这里插入图片描述

由于要先实现 2D 的部分,对材质的要求并不高,所以目前就只通过全局变量的形式设置,在之后的 3D 引擎中可能会进一步的实现 Material System。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值