From 110e85827e557a4bb2424eee927cd5a902ed930d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petar=20Kapri=C5=A1?= Date: Tue, 20 Dec 2022 14:57:38 +0100 Subject: [PATCH] Add diffuseImage Material --- src/xyz/marsavic/gfxlab/graphics3d/Material.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/xyz/marsavic/gfxlab/graphics3d/Material.java b/src/xyz/marsavic/gfxlab/graphics3d/Material.java index ed3adb1..65bd52d 100644 --- a/src/xyz/marsavic/gfxlab/graphics3d/Material.java +++ b/src/xyz/marsavic/gfxlab/graphics3d/Material.java @@ -1,10 +1,26 @@ package xyz.marsavic.gfxlab.graphics3d; +import xyz.marsavic.geometry.Vector; import xyz.marsavic.gfxlab.Color; +import java.awt.image.BufferedImage; + public record Material( Color diffuse ) { + public static Material diffuseImage(BufferedImage img, Vector uv) { + int x = (int) (uv.x()*img.getWidth()) % img.getWidth(); + if (x < 0) { + x += img.getWidth(); // adding in case of negative modulo + } + + int y = (int) (uv.y()*img.getWidth()) % img.getWidth(); + if (y < 0) { + y += img.getHeight(); + } + y = img.getHeight()-y-1; // inverting y, BufferedImage is encoded from top to bottom, and uv mapping is bottom to top + return new Material(Color.code(img.getRGB(x, y))); + } public Material diffuse(Color diffuse) { return new Material(diffuse); } public static final Material BLACK = new Material(Color.BLACK);