package com.akjava.gwt.three.client.java; import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.base.Preconditions.checkNotNull; import java.util.List; import com.akjava.gwt.lib.client.CanvasUtils; import com.akjava.gwt.three.client.js.THREE; import com.akjava.gwt.three.client.js.textures.CubeTexture; import com.google.gwt.canvas.client.Canvas; import com.google.gwt.dom.client.ImageElement; public class SkyboxUtils { private SkyboxUtils(){} /* right,left,up,down,front,back size must be power-of 2 */ public static CubeTexture createCubeTexture(List<ImageElement> images,int size){ CubeTexture texture=createStandardTexture(); setCubeTexture(texture, images,size); return texture; } public static void setCubeTexture(CubeTexture texture,List<ImageElement> images,int size){ checkNotNull(images); checkArgument(images.size()==6, "need 6 images"); texture.getImages().set(0, paintToCanvas(images.get(0),size)); texture.getImages().set(1, paintToCanvas(images.get(1),size)); texture.getImages().set(2, paintToCanvas(images.get(2),size)); texture.getImages().set(3, paintToCanvas(images.get(3),size)); texture.getImages().set(4, paintToCanvas(images.get(4),size)); texture.getImages().set(5, paintToCanvas(images.get(5),size)); texture.setNeedsUpdate(true); } public static void setCubeTexture(CubeTexture texture,ImageElement skyboxImage){ Skybox skybox=new Skybox(skyboxImage); skybox.setToCubeTexture(texture); } public static CubeTexture createStandardTexture(){ CubeTexture cubeMap = THREE.CubeTexture(); cubeMap.setFormat(THREE.RGBFormat);//cubeMap.format = THREE.RGBFormat; cubeMap.setFlipY(false); return cubeMap; } public static ImageElement paintToCanvas(ImageElement element,int size){ Canvas canvas=CanvasUtils.createCanvas(size, size); canvas.getContext2d().drawImage(element, 0, 0,size,size); return canvas.getCanvasElement().cast(); } }