首页 > 其他分享 >0201-金属反射和模糊

0201-金属反射和模糊

时间:2024-07-22 09:17:58浏览次数:10  
标签:反射 1.0 0.8 0.0 模糊 Metal let 0201 new

环境

  • Time 2022-11-16
  • WSL-Ubuntu 22.04
  • Rust 1.65.0

前言

说明

参考:https://raytracing.github.io/books/RayTracingInOneWeekend.html

目标

新增金属材质,实现反射和模糊函数。

金属材质

pub struct Metal {
    albedo: Color,
    // 模糊属性
    fuzz: f64,
}

impl Metal {
    pub fn new(albedo: Color, fuzz: f64) -> Self {
        Metal { albedo, fuzz }
    }
}

散射

impl Material for Metal {
    fn scatter(&self, ray: &Ray, record: &HitRecord) -> Option<(Color, Ray)> {
        let direction = ray.direction.unit();

        let normal = record.normal;
        let reflected = direction - 2.0 * direction.dot(normal) * normal;
        let ray = reflected + self.fuzz * Vector3::random_unit();
        let scattered = Ray::new(record.point, ray);

        match scattered.direction.dot(normal) > 0.0 {
            true => Some((self.albedo, scattered)),
            false => None,
        }
    }
}

定义球体

let ground = Rc::new(Lambert::new(Color::new(0.8, 0.8, 0.0)));
let center = Rc::new(Lambert::new(Color::new(0.7, 0.3, 0.3)));
let left = Rc::new(Metal::new(Color::new(0.8, 0.8, 0.8), 0.3));
let right = Rc::new(Metal::new(Color::new(0.8, 0.6, 0.2), 1.0));

let world: World = vec![
    Box::new(Sphere::new(Point3::new(0.0, -100.5, -1.0), 100.0, ground)),
    Box::new(Sphere::new(Point3::new(0.0, 0.0, -1.0), 0.5, center)),
    Box::new(Sphere::new(Point3::new(-1.0, 0.0, -1.0), 0.5, left)),
    Box::new(Sphere::new(Point3::new(1.0, 0.0, -1.0), 0.5, right)),
];

效果

金属材质

总结

新增了金属材质,实现了反射功能,增加模糊属性。

附录

标签:反射,1.0,0.8,0.0,模糊,Metal,let,0201,new
From: https://www.cnblogs.com/jiangbo4444/p/18315375

相关文章

  • 深入探究 Golang 反射:功能与原理及应用
    Hi亲爱的朋友们,我是k哥。今天,咱们来一同探讨下Golang反射。Go出于通用性的考量,提供了反射这一功能。借助反射功能,我们可以实现通用性更强的函数,传入任意的参数,在函数内通过反射动态调用参数对象的方法并访问它的属性。举例来说,下面的bridge接口为了支持灵活调用任意函数,在......
  • Java 语言及其常用集合类的操作,以及反射机制与注解
    目录一、Java语言概述二、Java集合框架ArrayList操作示例:HashMap操作示例:三、反射机制1.反射的示例五、总结Java是一种广泛使用的高级编程语言,因其平台独立性、简洁性及丰富的API而备受开发者青睐。一、Java语言概述 Java语言由JamesGosling等人......
  • Java反射
    java是面向对象的编程语言,对象,是一种具体的概念类:类是对具有相同特征或属性,具有相同行为能力的一类事物的描述或称呼对象:对象是这一类事物带有属性值,具有具体行为的个体或实例面向对象编程的语言packagetest;//定义一个类publicclassPhone{//添加一些属性......
  • 0199-漫反射和伽马校正
    环境Time2022-11-16WSL-Ubuntu22.04Rust1.65.0前言说明参考:https://raytracing.github.io/books/RayTracingInOneWeekend.html目标对物体上的光线进行漫反射,然后增加伽马校正。颜色显示函数pubfnformat_str(&self,samples:f64)->String{letir=(256.......
  • 为什么反射慢?
    反射机制就是通过字节码文件对象获取成员变量、成员方法和构造方法,然后进一步获取它们的具体信息,如名字、修饰符、类型等。反射机制的性能较低有很多原因,这里详细总结以下4点原因:(1)JIT优化受限:JIT编译器的优化是基于静态分析和预测的。反射是一种在运行时动态解析类型信息的机......
  • 反射快速入门
    反射就是通过字节码文件获取类的成员变量、构造方法和成员方法的所有信息。利用反射,我们可以获取成员变量的修饰符、名字、类型、取值。我们可以获取构造方法的名字、形参,并利用通过反射获取的构造方法创建对象。我们可以获取成员方法的修饰符、名字、形参、返回值、抛出的异常、......
  • 快速上手FFUF:一款高效的网络模糊测试js文件爆破工具
    在网络安全领域,FFUF不仅是一款功能强大的工具,适用于目录发现、子域名发现、以及HTTP方法模糊测试,还是一款js爆破工具。本文将引导你快速掌握FFUF的使用方法,不需要复杂的背景知识,适合基础小白学习。什么是FFUF?FFUF,即FuzzFasterUFool,是一款用Golang编写的快速网络......
  • java 使用mybatis时 模糊查询
    有两种方法,分别是直接字符串拼接,使用mybatis的bind函数绑定再查方法1<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEmapperPUBLIC"-//mybatis.org//DTDMapper3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"&g......
  • 反射工具类
    InvokeUtils代码如下:packagecom.ksource.utils;importorg.apache.commons.collections4.MultiValuedMap;importjava.lang.reflect.Method;importjava.util.Collection;/***@Authordxy*@Date2024/7/1617:54*@Description*/publicclassInvokeUtils{......
  • 微信保存的图片很模糊,用这个软件,秒变高清图!
    我们有时从微信下载下来的图片就是很模糊,重新加载也一样,不知道什么原因。那么有什么好的解决图片模糊的办法吗?微信保存的图片很模糊,用这个软件,秒变高清图!或者是写一个东西,需要配图,在网络上好不容易找到一张图,但是图片很小,一拉大就变模糊了,结果只好无奈舍弃。或者你需要用......