add inital anti-aliasing
This commit is contained in:
parent
5bbfb17684
commit
cefd653d4e
|
@ -4,6 +4,7 @@
|
|||
#include "common.h"
|
||||
#include "hittable.h"
|
||||
|
||||
|
||||
class Camera {
|
||||
public:
|
||||
double aspect_ratio = 1.0; // Ratio of image width over height
|
||||
|
|
12
src/canvas.h
12
src/canvas.h
|
@ -1,6 +1,7 @@
|
|||
#ifndef CANVAS_H
|
||||
#define CANVAS_H
|
||||
|
||||
#include "interval.h"
|
||||
#include "vec3.h"
|
||||
|
||||
#include <cstdint>
|
||||
|
@ -13,11 +14,10 @@ struct Rgb {
|
|||
};
|
||||
|
||||
inline Rgb to_rgb(const Color &c) {
|
||||
auto clamp = [](double x) { return x < 0.0 ? 0.0 : (x > 1.0 ? 1.0 : x); };
|
||||
|
||||
return {static_cast<uint8_t>(255.999 * clamp(c.x())),
|
||||
static_cast<uint8_t>(255.999 * clamp(c.y())),
|
||||
static_cast<uint8_t>(255.999 * clamp(c.z()))};
|
||||
static const interval intensity(0.000, 0.999);
|
||||
return {static_cast<uint8_t>(256 * intensity.clamp(c.x())),
|
||||
static_cast<uint8_t>(256 * intensity.clamp(c.y())),
|
||||
static_cast<uint8_t>(256 * intensity.clamp(c.z()))};
|
||||
}
|
||||
|
||||
struct Canvas {
|
||||
|
@ -32,7 +32,7 @@ struct Canvas {
|
|||
pixels[y * width + x] = color;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void set_pixel(int x, int y, Color color) {
|
||||
if (x >= 0 && x < width && y >= 0 && y < height) {
|
||||
pixels[y * width + x] = to_rgb(color);
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
#ifndef INTERVAL_H
|
||||
#define INTERVAL_H
|
||||
|
||||
#include "common.h"
|
||||
|
||||
class interval {
|
||||
public:
|
||||
double min, max;
|
||||
|
@ -14,6 +16,14 @@ public:
|
|||
bool contains(double x) const { return min <= x && x <= max; }
|
||||
|
||||
bool surrounds(double x) const { return min < x && x < max; }
|
||||
|
||||
double clamp(double x) const {
|
||||
if (x < min)
|
||||
return min;
|
||||
if (x > max)
|
||||
return max;
|
||||
return x;
|
||||
}
|
||||
};
|
||||
|
||||
static inline const interval empty = interval(+infinity, -infinity);
|
||||
|
|
Loading…
Reference in New Issue