【问题标题】:What color is obtained from lighting and color materials in OpenGL?在 OpenGL 中从光照和颜色材料中获得什么颜色?
【发布时间】:2017-02-01 08:12:27
【问题描述】:

您好,我有一个问题。

我正在尝试了解 OpenGL 中的光照和材质。

但我不知道光照如何影响物体的颜色和反射。

这是我找到的光照公式:

result Light = ambient + diffuse * (intensity) + specular

这是一个示例用法:

ambient = 64,64,64

diffuse = 192,192,192

specular = 32,32,32 

intentisy = 0.5 

Light = 64 + 192*0.5+ 32 = 192

Result Light = (192,192,192)

以下是它们如何组合在一起形成最终输出:

Object Color = (Or,Og,Ob)

Material reflect = (Mr,Mg,Mb)

Real Color = (Or * Mr , Og * Mg ,Ob * Mb )

关于我的问题,

不知道“结果光”如何影响“真实颜色”? 更具体地说:如何使用所有光、材质和对象颜色输入来实现最终的像素输出。

【问题讨论】:

  • 谢谢!!我知道我也研究过着色器,但我们的组织使用这些。所以我需要同时学习旧 gl 和新 gl。

标签: opengl colors lighting


【解决方案1】:

有点模棱两可,因为真实的范围可以从基于物理的渲染技术到使用各种自定义光照着色器的不同着色。

根据“材料”,我们将有一个使用“结果光”的不同方程式。

以下是一些基本材料:

环境照明

float ambientStrength = 0.1f;
vec3 ambient = ambientStrength * lightColor;

vec3 result = ambient * objectColor;
color = vec4(result, 1.0f);

漫射照明

in vec3 FragPos;  // input
vec3 norm = normalize(Normal);

vec3 lightDir = normalize(lightPos - FragPos);
float diff = max(dot(norm, lightDir), 0.0);

vec3 diffuse = diff * lightColor;
vec3 result = (ambient + diffuse) * objectColor;
color = vec4(result, 1.0f);

镜面光照

float specularStrength = 0.5f;
vec3 viewDir = normalize(viewPos - FragPos);
vec3 reflectDir = reflect(-lightDir, norm); 


float spec = pow(max(dot(viewDir, reflectDir), 0.0), 32);
vec3 specular = specularStrength * spec * lightColor; 

vec3 result = (ambient + diffuse + specular) * objectColor;
color = vec4(result, 1.0f);

组合 Phong

从上面回收代码。

Source

【讨论】:

  • (Or * Mr , Og * Mg ,Ob * Mb ),我以为公式是有光时计算出来的颜色。而且我没有使用着色器。仅使用固定管道,例如 glLightfv。环境色和真实色不一样吗?我认为真实颜色不应用闪电,像素颜色是计算真实颜色和结果照明。有错吗?
  • @성정민 我一定是误会了。更新答案。对此感到抱歉。
  • 天哪..谢谢!我真的明白所有这些。你能再问一个问题吗????着色器源上方的对象颜色已由公式计算(或 * Mr , Og * Mg ,Ob * Mb )。是这样吗????
  • @성정민 没有问题,试着澄清这个问题,这样它就不会被否决。我可以帮你审核。
  • @성정민 公式“(或 * Mr , Og * Mg ,Ob * Mb )。”这是一种过度简化,因为它高度依赖于材质来确定“物体颜色”和“材质颜色”如何相乘或相互集成。
猜你喜欢
  • 2011-10-22
  • 2020-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-16
  • 1970-01-01
  • 2015-08-15
相关资源
最近更新 更多