Skip to content

Commit 7efa317

Browse files
author
Avaer Kazmer
committed
Add initial label mesh rendering
1 parent d4df588 commit 7efa317

File tree

1 file changed

+70
-5
lines changed

1 file changed

+70
-5
lines changed

app.html

Lines changed: 70 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -548,6 +548,7 @@
548548
keyboardImg,
549549
uiIframe,
550550
interfaceHtml,
551+
labelHtml,
551552
searchSitesJson,
552553
keyboardHighlightCanvasCtx,
553554
keyMap,
@@ -582,6 +583,7 @@
582583
document.body.appendChild(iframe);
583584
}),
584585
fetch('interface.html').then(res => res.text()),
586+
fetch('label.html').then(res => res.text()),
585587
fetch('sites.json')
586588
.then(res => res.json())
587589
.then(sitesJson => {
@@ -1770,11 +1772,35 @@
17701772
return object;
17711773
};
17721774

1773-
const _makeLabelMesh = () => {
1774-
const geometry = new THREE.PlaneBufferGeometry(1, 0.1);
1775+
const _makeLabelMesh = label => {
1776+
const geometry = new THREE.PlaneBufferGeometry(2, 2/8);
1777+
1778+
_renderLabel(label)
1779+
.then(async result => {
1780+
if (result.data) {
1781+
// result.data = await createImageBitmap(new ImageData(new Uint8ClampedArray(result.data.buffer, result.data.byteOffset, result.data.byteLength), uiSize, uiSize/8));
1782+
// texture.image = result.data;
1783+
texture.image = new ImageData(new Uint8ClampedArray(result.data.buffer, result.data.byteOffset, result.data.byteLength), uiSize, uiSize/8);
1784+
texture.needsUpdate = true;
1785+
}
1786+
});
1787+
const texture = new THREE.Texture(
1788+
null,
1789+
THREE.UVMapping,
1790+
THREE.ClampToEdgeWrapping,
1791+
THREE.ClampToEdgeWrapping,
1792+
THREE.LinearFilter,
1793+
THREE.LinearFilter,
1794+
THREE.RGBAFormat,
1795+
THREE.UnsignedByteType,
1796+
16
1797+
);
17751798
const material = new THREE.MeshBasicMaterial({
1776-
color: 0x000080,
1799+
map: texture,
1800+
// color: 0x000080,
1801+
// transparent: true,
17771802
});
1803+
17781804
const mesh = new THREE.Mesh(geometry, material);
17791805
mesh.frustumCulled = false;
17801806
return mesh;
@@ -3127,6 +3153,44 @@
31273153
port: mc.port2,
31283154
}, '*', [mc.port2]);
31293155
});
3156+
const _renderLabel = label => new Promise((accept, reject) => {
3157+
if (renderIds > 0) {
3158+
uiIframe.contentWindow.postMessage({
3159+
method: 'cancel',
3160+
id: renderIds,
3161+
});
3162+
}
3163+
3164+
const start = Date.now();
3165+
3166+
const mc = new MessageChannel();
3167+
mc.port1.onmessage = e => {
3168+
const {data} = e;
3169+
const {error, result} = data;
3170+
3171+
console.log('render label', result);
3172+
3173+
if (result) {
3174+
console.log('time taken', Date.now() - start);
3175+
3176+
accept(result);
3177+
} else {
3178+
reject(error);
3179+
}
3180+
};
3181+
3182+
uiIframe.contentWindow.postMessage({
3183+
method: 'render',
3184+
id: ++renderIds,
3185+
htmlString: labelHtml,
3186+
templateData: {
3187+
label,
3188+
},
3189+
width: uiSize,
3190+
height: uiSize/8,
3191+
port: mc.port2,
3192+
}, '*', [mc.port2]);
3193+
});
31303194

31313195
const _makeScreenMesh = () => {
31323196
const s = 2;
@@ -3372,6 +3436,7 @@
33723436
type: 'screen',
33733437
id: anchor && anchor.id,
33743438
href: anchor && anchor.href,
3439+
name: anchor && anchor.name,
33753440
x: uv.x,
33763441
y: uv.y,
33773442
distance,
@@ -3384,7 +3449,7 @@
33843449
mesh.click = (intersectionSpec, controllerIndex) => {
33853450
keyboardFocus = null;
33863451

3387-
const {id, href} = intersectionSpec;
3452+
const {id, href, name} = intersectionSpec;
33883453
if (id === 'url-input') {
33893454
const {x, y} = intersectionSpec;
33903455

@@ -3408,7 +3473,7 @@
34083473
moveMeshes.push(moveMesh);
34093474
currentMoveMeshes[controllerIndex] = moveMesh;
34103475

3411-
const labelMesh = _makeLabelMesh();
3476+
const labelMesh = _makeLabelMesh(name || href);
34123477
scene.add(labelMesh);
34133478
moveMesh.labelMesh = labelMesh;
34143479
} /* else {

0 commit comments

Comments
 (0)