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); Vector3 v = new Vector3(1.0, (double) x, (double) y);
Vector bar = C.multiply(v); Vector bar = C.multiply(v);
if ((bar.get(0) >= 0.0) && (bar.get(1) >= 0.0) && (bar.get(2) >= 0.0)) { if ((bar.get(0) >= 0.0) && (bar.get(1) >= 0.0) && (bar.get(2) >= 0.0)) {
double oneOverZ = bar.get(0) / v1.getDepth() + double oneOverZ = bar.get(0) / v1.getDepth() +
bar.get(1) / v2.getDepth() + bar.get(1) / v2.getDepth() +
bar.get(2) / v3.getDepth(); bar.get(2) / v3.getDepth();
for (int i = 0; i < numAttributes; i++) { for (int i = 0; i < numAttributes; i++) {
double aOverZ = bar.get(0) * v1.getAttribute(i) / v1.getDepth() + double aOverZ = bar.get(0) * v1.getAttribute(i) / v1.getDepth() +
bar.get(1) * v2.getAttribute(i) / v2.getDepth() + bar.get(1) * v2.getAttribute(i) / v2.getDepth() +
bar.get(2) * v3.getAttribute(i) / v3.getDepth(); bar.get(2) * v3.getAttribute(i) / v3.getDepth();

View file

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

View file

@ -28,8 +28,14 @@ public class Texture {
*/ */
public Color sample(double u, double v) { 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, * Simple shader that just copy the interpolated color to the screen,
* taking the depth of the fragment into acount. * taking the depth of the fragment into acount.
@ -34,8 +36,11 @@ public class TextureShader extends Shader {
if (depth.testFragment(fragment)) { if (depth.testFragment(fragment)) {
/* The Fragment may not have texture coordinates */ /* The Fragment may not have texture coordinates */
try { 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) { } catch (ArrayIndexOutOfBoundsException e) {
screen.setPixel(fragment.getX(), fragment.getY(), fragment.getColor()); screen.setPixel(fragment.getX(), fragment.getY(), fragment.getColor());