添加Texture和Image的加载方式.

pull/7/head
ChenX 7 years ago
parent 30ed7aa611
commit 4071433b98

@ -3,7 +3,6 @@ import * as THREE from 'three';
import { Factory } from './CADFactory';
import { CADObject } from './CADObject';
/**
* ..
*
@ -22,4 +21,15 @@ export class Texture extends CADObject
{
super();
}
GetThreeTexture()
{
let texture = new THREE.Texture();//await loaderImage(fileList.item(0))
texture.wrapS = THREE.RepeatWrapping;
texture.wrapT = THREE.RepeatWrapping;
texture.anisotropy = 16;
texture.repeat.set(10, 24);
texture.format = THREE.RGBFormat;
texture.needsUpdate = true;
}
}

@ -1,21 +1,28 @@
import { blobMd5 } from "../Common/MD5";
import { IndexedDbStore, StoreName } from "../IndexedDb/IndexedDbStore";
//节点缓存.使用它来缓存已经加载的图片.
let imageCache = new Map<string, HTMLImageElement>();
//根据blob文件加载image
function loaderImage(blob: File): Promise<HTMLImageElement>
export function loaderImage(blob: File): Promise<HTMLImageElement>
{
return new Promise<HTMLImageElement>(async (res, rej) =>
{
let md5 = await blobMd5(blob);
console.log('md5: ', md5);
if (imageCache.has(md5))
{
res(imageCache.get(md5));
return;
}
(await IndexedDbStore.CADStore()).Put(StoreName.Texture, md5, blob);
let url = URL.createObjectURL(blob);
let image = document.createElement('img');
image.onload = () =>
{
URL.revokeObjectURL(url);
imageCache.set(md5, image);
res(image);
}
image.onerror = (err) =>
@ -23,5 +30,20 @@ function loaderImage(blob: File): Promise<HTMLImageElement>
URL.revokeObjectURL(url);
rej(err);
}
image.src = url;
})
}
//通过md5来加载图片.这个方法会尝试从缓存里面读取,也会尝试从indexedDb读取,未来也会支持从外部的网站读取.
export async function loaderImageFromMd5(md5: string): Promise<HTMLImageElement>
{
if (imageCache.has(md5))
return imageCache.get(md5);
let store = await IndexedDbStore.CADStore();
let file = await store.Get(StoreName.Texture, md5) as File;
if (file)
{
return await loaderImage(file);
}
}
Loading…
Cancel
Save