OpenGL(10)之颜色

本文介绍了OpenGL中的颜色表示,通过RGB三原色模拟现实世界中的颜色。颜色是由物体反射的光决定的,而非物体本身拥有。在OpenGL中,通过光源和物体颜色的乘法得到反射颜色。接着展示了如何创建一个光照场景,包括设置光源位置和对象颜色,以呈现不同的光照效果。文章以珊瑚红物体在不同光源下显示颜色变化为例,解释了颜色和光照的相互作用。
摘要由CSDN通过智能技术生成

title: OpenGL(10)之颜色
date: 2020-07-17 18:08
category: 图形学
tags: opengl
OpenGL(10)之颜色

1. 概述

现实世界上中有无数的颜色,每个物体都有自己的颜色,我们需要用有限的数值来模拟真实世界中无限的颜色,并非现实世界中所有的颜色都可以用数值来表示,但是我们仍能通过数值来表现出非常多的颜色。颜色由数字化的红色(Red)、绿色(Green)、蓝色(Blue)三个分量组成,也即RGB三原色。仅仅用这三个值就可以组合出任意一种颜色。

获取一个珊瑚红(Coral)色的话,通过定义一个三维的颜色向量:

glm::vec3 coral(1.0f,0.5f,0.31f);

现实生活中看到的某一个物体的颜色并不是这个物体真正拥有的颜色,而是它所反射的颜色.
即不能被物体所吸收的颜色(被拒绝的颜色)就是我们能够感知到的物体的颜色。

举个例子:
将白光照在一个绿色的玩具上,这个蓝色玩具会吸收白光中除了绿色以外的所有子颜色。不被吸收的蓝光被反射到我们的眼中,让这个玩具看起来是绿色的。


所以说白色光实际上是所有可见颜色的集合,物体吸收了其中大部分的颜色,仅仅反射了代表物体颜色的部分,被反射的颜色组合就是我们所感知的颜色(其中为绿色)。

在OpenGL中,创建一个光源,给定光源为白色,当我们把光源的颜色与物体的颜色值相乘,所得到的就是这个物体所反射的颜色(即是我们肉眼所看到的颜色)。

glm::vec3 lightColor(1.0f,1.0f,1.0f);
glm::vec3 objectColor(0.0f,1.0f,0.0f);
glm::vec3 result = lightColor * objectColor; //=(0.0f,1.0f,0.0f);

可以看到物体完全吸收了红光和蓝光,但是绿光完全被反射出去了。

可能上述例子太过于极端,举一个珊瑚红颜色的例子:


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值