OpenGL(11)之材质

本文介绍了OpenGL中的材质模拟,包括材质概述、材质属性设置、光的属性调整以及光源颜色对物体材质的影响。通过理解并应用这些知识,可以实现更真实、多样的视觉效果。
摘要由CSDN通过智能技术生成

title: OpenGL(11)之材质
date: 2020-07-19 9:00
category: 图形学
tags: opengl
OpenGL(11)之材质

1.概述

现实生活中,每个物体对光产生不同的反应(即物体对光的吸收与反射程度不一致导致的差异性),此中涉及到了物体的反射率、介质、光的入射角等知识相关(有兴趣的可自行查阅相关知识),其中最重要当属物体本身了,不同材料的表面具有不同的反射率。
例如:钢材通常比陶瓷材质的物体显得更加闪闪发亮。如果想在OpenGL中模拟多种类型的物体,
必须为每个物体分别定义一个材质属性。

通过上两章的学习,我们知道指定一个物体的颜色和光的颜色,结合环境光和镜面强度分量,可以用来定义物体的视觉输出。

通过环境光照、漫反射光照、镜面光照以及反光度来定义一个材质颜色,即定义了材质属性:
我们使用一个结构体的形式装载这些类型。

#version 330 core
struct Material{
   
	vec3 ambient;//环境光照分量
	vec3 diffuse;//漫反射光照分量
	vec3 specular;//镜面光照分量
	float shininess;//反光度:影响镜面高光的散射/半径
};
uniform Material material;

上述代码片段发生在片段着色器中,我们通过创建一个结构体来存储物体的材质属性,
当然我们可以将其存储为独立的uniform值,用一个结构体来存储(符合面向对象的思想),条理清晰。

通过上述四个元素来定义一个物体的材质,通过其能够模拟很多现实世界中的材质,以下就是几种现实世界的材质对立方体的影响。

可以看出,通过正确的指定一个物体的材质属性,对于这个物体的感知也会不同,效果显而易见,为一个物体赋予一款合适的材质是非常困难的,由于不合适的材质可能会毁了物体的视觉质量。接下来看看如何为一个物体设置材质吧。

2.设置材质

在上述过程中,已经为片段着色器创建了一个材质结构体的uniform,因此我们可以从uniform变量material中访问这些属性,从而达到修改光照的计算以便顺应新的材质属性。

void main(){
   

	//环境光
	vec3 ambient = lightColor * material.ambient;

	//漫反射
	vec3 normal = normalize(Normal); //标准化的法向量
	vec3 lightDirection = normalize(lightPos - FragPos); //光的方向向量
	float diff = max(dot(normal,lightDirection)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值