add image texture
parent
7c0bc68ab2
commit
e6447fe684
@ -0,0 +1,43 @@
|
||||
package eu.jonahbauer.raytracing.render.texture;
|
||||
|
||||
import eu.jonahbauer.raytracing.math.Vec3;
|
||||
import eu.jonahbauer.raytracing.render.canvas.Image;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import javax.imageio.ImageIO;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.io.IOException;
|
||||
import java.io.UncheckedIOException;
|
||||
import java.util.Objects;
|
||||
|
||||
public record ImageTexture(@NotNull Image image) implements Texture {
|
||||
|
||||
public ImageTexture {
|
||||
Objects.requireNonNull(image, "image");
|
||||
}
|
||||
|
||||
public ImageTexture(@NotNull BufferedImage image) {
|
||||
this(new Image(image));
|
||||
}
|
||||
|
||||
public ImageTexture(@NotNull String path) {
|
||||
this(read(path));
|
||||
}
|
||||
|
||||
private static @NotNull BufferedImage read(@NotNull String path) {
|
||||
try (var in = Objects.requireNonNull(ImageTexture.class.getResourceAsStream(path))) {
|
||||
return ImageIO.read(in);
|
||||
} catch (IOException ex) {
|
||||
throw new UncheckedIOException(ex);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull Color get(double u, double v, @NotNull Vec3 p) {
|
||||
u = Math.clamp(u, 0, 1);
|
||||
v = 1 - Math.clamp(v, 0, 1);
|
||||
int x = (int) (u * (image.getWidth() - 1));
|
||||
int y = (int) (v * (image.getHeight() - 1));
|
||||
return image.get(x, y);
|
||||
}
|
||||
}
|
Binary file not shown.
After Width: | Height: | Size: 158 KiB |
Loading…
Reference in New Issue