feat: fin du projet KEKW
This commit is contained in:
parent
37aa9f0ac5
commit
f5ac6b8172
|
@ -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();
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
10
Texture.java
10
Texture.java
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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());
|
||||||
|
|
Loading…
Reference in a new issue