feat: fin du projet KEKW

This commit is contained in:
Laureηt 2022-04-19 11:02:07 +02:00
parent 37aa9f0ac5
commit f5ac6b8172
No known key found for this signature in database
GPG key ID: D88C6B294FD40994
4 changed files with 31 additions and 18 deletions

View file

@ -38,11 +38,15 @@ public class PerspectiveCorrectRasterizer extends Rasterizer {
Vector3 v = new Vector3(1.0, (double) x, (double) y);
Vector bar = C.multiply(v);
if ((bar.get(0) >= 0.0) && (bar.get(1) >= 0.0) && (bar.get(2) >= 0.0)) {
double oneOverZ = bar.get(0) / v1.getDepth() +
bar.get(1) / v2.getDepth() +
bar.get(2) / v3.getDepth();
for (int i = 0; i < numAttributes; i++) {
double aOverZ = bar.get(0) * v1.getAttribute(i) / v1.getDepth() +
bar.get(1) * v2.getAttribute(i) / v2.getDepth() +
bar.get(2) * v3.getAttribute(i) / v3.getDepth();

View file

@ -26,7 +26,7 @@ public class Renderer {
// shader = new SimpleShader(screen);
shader = new PainterShader(screen);
rasterizer = new PerspectiveCorrectRasterizer(shader);
rasterizer = new Rasterizer(shader);
// rasterizer = new Rasterizer(shader);
xform = new Transformation();
xform.setLookAt(scene.getCameraPosition(), scene.getCameraLookAt(), scene.getCameraUp());
@ -145,14 +145,14 @@ public class Renderer {
/* wireframe rendering */
renderWireframe();
// screen.swapBuffers();
wait(3);
wait(1);
/* solid rendering, no lighting */
screen.clearBuffer();
shader.reset();
renderSolid();
screen.swapBuffers();
wait(3);
wait(1);
/* solid rendering, with lighting */
screen.clearBuffer();
@ -163,19 +163,17 @@ public class Renderer {
wait(1);
/* solid rendering, with texture */
/*
* screen.clearBuffer ();
* TextureShader texShader = new TextureShader (screen);
* texShader.setTexture ("data/brick.jpg");
* shader = texShader;
* rasterizer.setShader (texShader);
* setLightingEnabled (true);
* renderSolid ();
* screen.swapBuffers ();
* wait (1);
*/
screen.clearBuffer();
TextureShader texShader = new TextureShader(screen);
texShader.setTexture("data/brick.jpg");
shader = texShader;
rasterizer.setShader(texShader);
setLightingEnabled(true);
renderSolid();
screen.swapBuffers();
wait(1);
wait(5);
wait(60);
screen.destroy();
System.exit(0);
}

View file

@ -28,8 +28,14 @@ public class Texture {
*/
public Color sample(double u, double v) {
/* A COMPLETER */
double x = u * width;
double y = v * height;
return new Color(0, 0, 0);
int px = (int) Math.floor(x);
int py = (int) Math.floor(y);
Color couleur = new Color(image.getRGB(px, py));
return couleur;
}
}

View file

@ -1,3 +1,5 @@
import java.awt.Color;
/**
* Simple shader that just copy the interpolated color to the screen,
* taking the depth of the fragment into acount.
@ -34,8 +36,11 @@ public class TextureShader extends Shader {
if (depth.testFragment(fragment)) {
/* The Fragment may not have texture coordinates */
try {
double u = fragment.getAttribute(7) % 1;
double v = fragment.getAttribute(8) % 1;
/* à compléter */
Color couleur = texture.sample(u, v);
screen.setPixel(fragment.getX(), fragment.getY(), couleur);
} catch (ArrayIndexOutOfBoundsException e) {
screen.setPixel(fragment.getX(), fragment.getY(), fragment.getColor());