|
753 | 753 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
754 | 754 | class material {
|
755 | 755 | public:
|
| 756 | + |
756 | 757 | virtual bool scatter(const ray& r_in,
|
757 | 758 | const hit_record& rec, vec3& albedo, ray& scattered, float& pdf) const {
|
758 | 759 | return false;
|
759 | 760 | }
|
760 |
| - virtual float scattering_pdf(const ray& r_in, |
761 |
| - const hit_record& rec, const ray& scattered) const { |
762 |
| - return false; |
| 761 | + |
| 762 | + virtual float scattering_pdf(const ray& r_in, const hit_record& rec, |
| 763 | + const ray& scattered) const { |
| 764 | + return 0; |
763 | 765 | }
|
| 766 | + |
764 | 767 | virtual vec3 emitted(float u, float v, const vec3& p) const {
|
765 | 768 | return vec3(0,0,0);
|
766 | 769 | }
|
|
775 | 778 | class lambertian : public material {
|
776 | 779 | public:
|
777 | 780 | lambertian(texture *a) : albedo(a) {}
|
| 781 | + |
778 | 782 | float scattering_pdf(const ray& r_in,
|
779 | 783 | const hit_record& rec, const ray& scattered) const {
|
780 | 784 | float cosine = dot(rec.normal, unit_vector(scattered.direction()));
|
781 | 785 | if (cosine < 0)
|
782 | 786 | return 0;
|
783 | 787 | return cosine / M_PI;
|
784 | 788 | }
|
| 789 | + |
785 | 790 | bool scatter(const ray& r_in,
|
786 | 791 | const hit_record& rec, vec3& alb, ray& scattered, float& pdf) const {
|
787 | 792 | vec3 target = rec.p + rec.normal + random_in_unit_sphere();
|
|
790 | 795 | pdf = dot(rec.normal, scattered.direction()) / M_PI;
|
791 | 796 | return true;
|
792 | 797 | }
|
| 798 | + |
793 | 799 | texture *albedo;
|
794 | 800 | };
|
795 | 801 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
1671 | 1677 | class material {
|
1672 | 1678 | public:
|
1673 | 1679 | virtual bool scatter(const ray& r_in, const hit_record& hrec,
|
1674 |
| - scatter_record& srec) const { return false; } |
| 1680 | + scatter_record& srec) const { |
| 1681 | + return false; |
| 1682 | + } |
| 1683 | + |
1675 | 1684 | virtual float scattering_pdf(const ray& r_in, const hit_record& rec,
|
1676 |
| - const ray& scattered) const { return false; } |
| 1685 | + const ray& scattered) const { |
| 1686 | + return 0; |
| 1687 | + } |
| 1688 | + |
1677 | 1689 | virtual vec3 emitted(const ray& r_in, const hit_record& rec,
|
1678 | 1690 | float u, float v, const vec3& p) const { return vec3(0,0,0); }
|
1679 | 1691 | };
|
|
1686 | 1698 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
1687 | 1699 | class lambertian : public material {
|
1688 | 1700 | public:
|
| 1701 | + |
1689 | 1702 | lambertian(texture *a) : albedo(a) {}
|
| 1703 | + |
1690 | 1704 | float scattering_pdf(const ray& r_in, const hit_record& rec,
|
1691 |
| - const ray& scattered) const { |
| 1705 | + const ray& scattered) const { |
1692 | 1706 | float cosine = dot(rec.normal, unit_vector(scattered.direction()));
|
1693 | 1707 | if (cosine < 0)
|
1694 | 1708 | return 0;
|
1695 | 1709 | return cosine / M_PI;
|
1696 | 1710 | }
|
| 1711 | + |
| 1712 | + |
1697 | 1713 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++ highlight
|
1698 | 1714 | bool scatter(const ray& r_in, const hit_record& hrec,
|
1699 | 1715 | scatter_record& srec) const {
|
|
1703 | 1719 | return true;
|
1704 | 1720 | }
|
1705 | 1721 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
|
| 1722 | + |
1706 | 1723 | texture *albedo;
|
1707 | 1724 | };
|
1708 | 1725 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
0 commit comments