0

I'm using three.js to render a cube with image on each side. For some reason the texture is pixelated. I tried fixing this bug by setting minFilter and magFilter but didn't work for me.

The image is simply white text with no background (width: 360px, height: 360px if that matters) Here is my code:

In SceneInit.js ->

  initialize() {
    this.scene = new THREE.Scene();
    this.camera = new THREE.PerspectiveCamera(
      this.fov,
      window.innerWidth / window.innerHeight,
      1,
      1000
    );
    this.camera.position.z = 50;
    this.camera.position.y = 0;

    const canvas = document.getElementById(this.canvasId);
    this.renderer = new THREE.WebGLRenderer({
      canvas,
      antialias: true,
    });

    this.renderer.setSize(window.innerWidth * 0.8, window.innerHeight * 0.8);
    this.renderer.setPixelRatio(window.devicePixelRatio);
    document.body.appendChild(this.renderer.domElement);

    this.clock = new THREE.Clock();
    this.controls = new OrbitControls(this.camera, this.renderer.domElement);

    this.stats = Stats();
    document.body.appendChild(this.stats.dom);

    this.ambientLight = new THREE.AmbientLight(0xffffff, 0.5);
    this.ambientLight.castShadow = false;
    this.scene.add(this.ambientLight);
  }

Cube.js ->

function Cube2() {
  useEffect(() => {
    const test = new SceneInit('myThreeJsCanvas');
    test.initialize();

    var loader = new THREE.TextureLoader();
        var jakub = loader.load( './textures/jakub.png' );
        jakub.generateMipmaps = false;
        jakub.minFilter = THREE.LinearMipMapLinearFilter;
        jakub.magFilter = THREE.NearestFilter;
        //tried applying those but didn't work ^
        var jakubL = loader.load( './textures/jakub-left.png' );
        var jakubR = loader.load( './textures/jakub-right.png' );
        var jakubF = loader.load( './textures/jakub-flipped.png' );
        var baginski = loader.load( './textures/baginski.png' );
        var baginskiL = loader.load( './textures/baginski-left.png' );
        var baginskiR = loader.load( './textures/baginski-right.png' );
        var baginskiF = loader.load( './textures/baginski-flipped.png' );

    var cubeMaterials = [
        new THREE.MeshBasicMaterial({map: jakubL}),
        new THREE.MeshBasicMaterial({map: baginski}),
        new THREE.MeshBasicMaterial({map: baginski}),
        new THREE.MeshBasicMaterial({map: jakubR}),
        new THREE.MeshBasicMaterial({map: jakub}),
        new THREE.MeshBasicMaterial({map: baginskiL}),
      ];

    //   cubeMaterials.forEach(material => {
    //     material.map.minFilter = THREE.NearestFilter;
    //     material.magFilter = THREE.NearestFilter;
    //   })
    //   Also doesn't work ^
    
      var cubeGeometry = new THREE.BoxGeometry(20,20,20);
      var cube = new THREE.MeshStandardMaterial(cubeGeometry,cubeMaterials);

    const boxMesh = new THREE.Mesh(cubeGeometry,cubeMaterials);
    test.scene.add(boxMesh);

  return (
    <div>
      <canvas id="myThreeJsCanvas" />
    </div>
  );
}
Rabbid76
  • 202,892
  • 27
  • 131
  • 174

0 Answers0