🦔

AR.jsでWebARしてみる(5) Text (2D and 3D)

2020/10/11に公開

はじめに

WebARで分かったことメモしていく

参考

Text (2D and 3D)(text.html)を勉強する

デモ

  • 以下の環境で動作を確認
    • iOS 13.7 Safari
    • Android 9 Chrome
    • Windows10 Firefox 81.0.1

ソース

参考で紹介したサイトのText (2D and 3D)(text.html)のソース

<!doctype HTML>
<html>
<link rel="icon" href="data:;base64,iVBORw0KGgo=">
<script src="js/aframe.min.js"></script>
<script src="js/aframe-ar.js"></script>

<!-- support 3D text -->
<script src="js/aframe-text-geometry-component.min.js"></script>

<body style="margin: 0px; overflow: hidden;">
<a-scene embedded vr-mode-ui="enabled: false;" arjs="debugUIEnabled: false;">
	<a-assets>
		<a-asset-item id="exoFont" src="fonts/exoBlack.typeface.json"></a-asset-item>
		<img id="pixels" src="images/pixels.png" />
	</a-assets>
	<!-- 2D text -->
	<a-marker type="pattern" url="data/kanji.patt">		
		<!-- positioning a plane directly below text for increased visibility; need to adjust position to avoid z-fighting.  -->
		<a-plane color="white" rotation="-90 0 0" position="0 -0.25 0" width="3" material="transparent: true; opacity: 0.90"></a-plane>
		<!-- for more properties, see https://github.com/aframevr/aframe/blob/master/docs/components/text.md -->
		<a-text value="Hello, world!" font="fonts/Exo2Bold.fnt" color="red" rotation="-90 0 0" align="center" scale="2 2 2"></a-text>
		<!-- positioning a second copy to attempt drop-shadow effect; need to adjust position to avoid z-fighting -->
		<!-- <a-text value="Hello, world!" font="fonts/Exo2Bold.fnt" color="black" rotation="-90 0 0" align="center" scale="2 2 2" position="0.01 -0.2 0"></a-text> -->
		<!-- avoiding z-fighting is difficult; may want to render canvas to text instead -->
	</a-marker>

	<!-- 3D text -->
	<a-marker type="pattern" url="data/hiro.patt">
		<!-- 
			using aframe-text-geometry component
			can set: bevelSize, bevelThickness, curveSegments, font, height, size, style, value.
			alignment (centering) may be tricky; try calculating bounding box and repositioning.
			for more info, see: https://www.npmjs.com/package/aframe-text-geometry-component
		 -->
		<a-entity text-geometry="value: Hello, world!; font: #exoFont;"
			material="color: yellow; src: #pixels; repeat: 0.5 0.5;" 
			rotation="-90 0 0">
		</a-entity>
	</a-marker>
    <a-entity camera></a-entity>
</a-scene>
</body>
</html>

確認したこと

2D text

Exo2Bold.fntがフォントのデータらしい。ためしにネットでみつけた.fnt(osaka_u.fnt, MSKG.FNT)をつかったけど文字が表示されなかった、まだ理解が足りてない。

<a-text value="Hello, world!" font="fonts/Exo2Bold.fnt" color="red" rotation="-90 0 0" align="center" scale="2 2 2"></a-text>

3D text

a-asset-itemタグでフォントを読み込むらしい。

<a-asset-item id="exoFont" src="fonts/exoBlack.typeface.json"></a-asset-item>
<img id="pixels" src="images/pixels.png" />

<a-entity text-geometry="value: Hello, world!; font: #exoFont;"
	material="color: yellow; src: #pixels; repeat: 0.5 0.5;" 
	rotation="-90 0 0">

materialに画像(pixels.png)を設定してちょっとした模様をのせてる。画像の有/無の違いはこんな感じ ↓ 下にあるのが画像が無い場合、たしかにツルっとしてる。

Discussion