当前位置: 首页 > news >正文

做化工回收的 做那个网站爱站关键词查询

做化工回收的 做那个网站,爱站关键词查询,免费的企业网页制作网站,用python做网站前端tinyrenderer个人代码仓库:tinyrenderer个人练习代码 前言 在前面的渲染中,我们读取模型的 diffuse 纹理,然后根据法线计算模型的颜色。这次我们引入一种新的光照模型—— Phong 光照模型,Phong 光照模型将光照分为了三类&#x…
  • tinyrenderer
  • 个人代码仓库:tinyrenderer个人练习代码

前言

在前面的渲染中,我们读取模型的 diffuse 纹理,然后根据法线计算模型的颜色。这次我们引入一种新的光照模型—— Phong 光照模型,Phong 光照模型将光照分为了三类:

  • 环境光照(Ambient Lighting):即使在理论上的黑暗环境中,通常也存在微弱的间接光照(例如来自月光、远处光源的反射等),使得物体不会完全黑暗。为了模拟这种微弱的背景光照,Phong 模型引入了环境光照分量。它是一个恒定的颜色值,均匀地照亮场景中的所有物体,模拟物体在不受直接光源影响下的基本亮度。
  • 漫反射光照(Diffuse Lighting):漫反射光照模拟了光源的方向性对物体表面光照的影响。它是 Phong 模型中视觉上最显著的分量。物体表面与光线方向越接近垂直(即入射角越小),接收到的光照能量就越多,因此该部分就越亮。漫反射光照的强度遵循 Lambert 定律,即光照强度与光线入射角余弦成正比。这种光照效果使得物体呈现出明显的明暗变化,从而体现出物体的立体感。
  • 镜面光照(Specular Lighting):镜面光照模拟了物体表面(尤其是光滑表面)产生的高光亮点。这些亮点是光源在物体表面的反射,其颜色更接近于光源的颜色,而不是物体的固有颜色。镜面光照的强度取决于观察方向、光线方向和物体表面法线之间的关系。当观察方向接近光线在物体表面的反射方向时,镜面高光就会变得非常明亮。

image.png

现有的代码其实就只考虑了漫反射光照,现在让我们将光照模型补充完整。

环境光照

环境光照很简单 I a = k a I_a=k_a Ia=ka,我们取固定值 (0.1,0.1,0.1)

Vec3f ambient{ 0.1,0.1,0.1 };Vec3f I = ambient;info.color = TGAColor(color.r * I.x, color.g * I.y, color.b * I.z, 255);

试着调大 ambient 值,你会发现模型越来越亮。

漫反射光照

我们使用的是平行光,现在没有考虑光的衰减,仅定义光的颜色为 Vec3f light_color = Vec3f(1, 1, 1);

前面我们一直在用的就是简化的漫反射光照,完整的: I d = k d ∗ ( N ⋅ L ) ∗ I e I_d=k_d*(N \cdot L)*I_e Id=kd(NL)Ie I e I_e Ie 代表光的亮度, k d k_d kd 是模型的漫反射率。

image.png

float NdotL = std::max(0.f, -normal.dot(lightDir));
TGAColor color = tex->texture(textureCoord.x, textureCoord.y);Vec3f ambient{ 0.1,0.1,0.1 };
Vec3f k_d{ 1,1,1 };
Vec3f diffuse = k_d.Multi(lightColor) * NdotL;Vec3f I = ambient + diffuse;info.color = TGAColor(color.r * I.x, color.g * I.y, color.b * I.z, 255);

镜面反射

与漫反射光照类似,镜面光照的计算也依赖于光线方向和物体表面的法向量。但与漫反射不同的是,镜面光照还取决于观察方向,即观察者(例如玩家)从哪个方向观察物体表面的片段。镜面光照模拟的是物体表面的反射特性,特别是光滑表面(如金属、抛光过的塑料等)产生的高光效果。

我们可以将物体表面想象成一面镜子。当光线照射到镜面时,会发生反射。镜面光照最强的区域就是我们能够看到光源在表面反射的区域,即高光点。下图展示了镜面光照的效果:

image.png

镜面反射的强度 I s = k s ∗ I e ∗ ( V ⋅ R ) n I_s = k_s*I_e*(V\cdot R)^n Is=ksIe(VR)n k s k_s ks 是模型的镜面反射系数, V V V 是观察方向, R R R 是反射向量, n n n 被称为模型的反光度(Shininess),一个物体的反光度越高,反射光的能力越强,散射得越少,高光点就会越小。

image.png

现在需要计算 R R R ,它是光线照射到模型表面的反射向量,在初中物理中我们就已经学过, R R R N N N 的夹角与 L L L N N N 的夹角相等,利用这一个性质,我们可以轻松的计算出 R = L − 2 N ( N ⋅ L ) R=L-2N(N\cdot L) R=L2N(NL)

注意:需要保证 R R R N N N L L L 为单位向量

image.png

Vec3f reflect(const Vec3f& I, const Vec3f& N)
{return I - 2 * N.dot(I) * N;;
}

V V V 的计算依赖于摄像机的位置,与当前渲染像素的位置,新增加一个 varying 的 worldPos 变量和 uniform 的 cameraPos 变量。

Vec3f R = glm::reflect(lightDir, N).normalized();
Vec3f V = (cameraPos - worldPos).normalized();
float NdotL = std::max(0.f, -normal.dot(lightDir));
float VdotR = std::max(0.f, V.dot(R));
TGAColor color = tex->texture(textureCoord.x, textureCoord.y);
Vec3f ambient{ 0.1,0.1,0.1 };
Vec3f k_d{ 1,1,1 };
Vec3f diffuse = k_d.Multi(lightColor) * NdotL;
Vec3f k_s{ 0.5,0.5,0.5 };
Vec3f specular = k_s.Multi(lightColor) * std::pow(VdotR, 5);Vec3f I = ambient + diffuse + specular;info.color = TGAColor(color.r * I.x, color.g * I.y, color.b * I.z, 255);

至此我们已经完成了 Phong 光照模型的渲染,现在来看一下效果:

image.png

左边的图是现在的 Phong 光照模型,右边的是以前。值得注意的是,在 Phong 光照模型中,除了光照强度 I e I_e Ie ,其它的在代码中一切硬编码的变量( n , k d , k s n,k_d,k_s n,kd,ks 等),其实都可以预先定义在纹理中,这样就能提高渲染的真实感。

本次代码提交记录:

image.png

这个版本的 LookAt 函数存在错误!2025-4-29 16.23 提交修复


若出现这种错误:

image.png

是因为 TGAColor 内部以 unsigned char 存储颜色值,导致最大值最多为 255,继续增加会溢出导致呈现蓝色,需要将颜色值限制至 255:

TGAColor Multi(float I_r, float I_g, float I_b) {TGAColor res = *this;res.b = std::clamp(int(b * I_b), 0, 255);res.g = std::clamp(int(g * I_g), 0, 255);res.r = std::clamp(int(r * I_r), 0, 255);return res;
}
TGAColor operator *(float intensity) {TGAColor res = *this;res.b = std::clamp(int(b * intensity), 0, 255);res.g = std::clamp(int(g * intensity), 0, 255);res.r = std::clamp(int(r * intensity), 0, 255);return res;
}info.color = color.Multi(I.x, I.y, I.z);

于 2025-4-29 16.40 提交修复


参考

  • tinyrenderer
  • 基础光照 - LearnOpenGL CN
http://www.cadmedia.cn/news/16394.html

相关文章:

  • 北京网站公司制作竞价排名点击器
  • 智慧团建的网址武汉seo软件
  • 网上免费注册网站seo优化报价
  • 上海网站建设webmeng南宁网站优化公司电话
  • 众筹网站建设方案模板最近有哪些新闻
  • 网站建站的步骤流程谷歌推广怎么做
  • 设计与绘制一个网站首页qq刷赞网站推广全网
  • 新乡网站建设制作百度seo如何快速排名
  • 卡盟在线自助下单深圳seo博客
  • 阿克苏地区建设局网站如何自己建设网站
  • 微网站的建设常州seo收费
  • 东莞网站优化平台无锡seo关键词排名
  • 捡个校花做老婆是哪个网站的阿里关键词排名查询
  • 营销型网站外包阿里域名购买网站
  • 怎么做一个网站怎么样网络营销策略的内容
  • 罗湖做网站公司排名hao123文件在哪里
  • 遵义市城乡建设局网站免费入驻的跨境电商平台
  • 建设项目招标在什么网站公示seo广告优化
  • 品牌建设和品牌打造方案北京网优化seo公司
  • 如何设计网站模板视频剪辑培训机构
  • 网站建设的作用如何推广自己产品
  • 云南工贸网站建设北京环球影城每日客流怎么看
  • 山东住房建设部官方网站农大南路网络营销推广优化
  • 网站建站平台公司网络营销案例有哪些
  • 网络服务广告seoyoon
  • 网站建设流程策划书小学生关键词大全
  • 24小时二手表网站百度官网电话
  • 昆山网站建设工作室品牌网络营销成功案例
  • 网站建设总结 优帮云电商网站建设定制
  • 网站名称设置百度品牌专区怎么收费