前提・実現したいこと
WebGLでなんか綺麗なキラキラなパーティクルの演出を作ってみた
http://tkengo.github.io/blog/2015/07/15/webgl-particle-effect-we-are-xseeds/
こちらを参考にしながら、 new THREE.Points
を使用してドットで文字を描画しようとしています。
発生している問題・エラーメッセージ
https://jsfiddle.net/va9u6dL8/
2Dコンテクストに描画した水色の TEST
のうしろのほうに小さくドットで描画されているのが Points で表示したテキストです。
なぜ反転してしまったのかの理由が見当もつきません。
また、 camera.position.z = 1000
のように大きな数字を指定しないと画面内に収まらないことも解消したいと思っています。
該当のソースコード
javascript
1// THREE 初期化など 2let windowWidth = window.innerWidth 3let windowHeight = window.innerHeight 4 5const scene = new THREE.Scene() 6const renderer = new THREE.WebGLRenderer() 7const camera = new THREE.PerspectiveCamera(45, windowWidth / windowHeight) 8 9renderer.setSize(windowWidth, windowHeight) 10renderer.setPixelRatio(window.devicePixelRatio) 11 12camera.position.z = 1000 13 14// Points生成 15const pointsGeometry = new THREE.Geometry() 16let pointsMaterial = new THREE.PointsMaterial({ 17 color: 0xffffff, 18 size: 1 19}) 20const pointsMesh = new THREE.Points(pointsGeometry, pointsMaterial) 21 22scene.add(pointsMesh) 23 24 25// テキストを描画したcanvasを走査、 26// 色がある部分に点を配置 27const text = createText('test') 28 29const imageData = text.ctx.getImageData(0, 0, windowWidth, windowHeight).data 30 31for(let x = 0; x < windowWidth; x++) { 32 for(let y = 0; y < windowHeight; y++) { 33 if (imageData[(x + y * windowWidth) * 4 + 3] === 0) { 34 continue; 35 } 36 37 pointsGeometry.vertices.push( 38 new THREE.Vector3(x, y, 1) 39 ) 40 } 41} 42 43// canvasを生成してテキストを描画する関数 44function createText(text) { 45 let o = {} 46 const canvas = document.createElement('canvas') 47 const ctx = canvas.getContext('2d') 48 49 canvas.width = windowWidth 50 canvas.height = windowHeight 51 52 ctx.font = '128px serif' 53 ctx.fillStyle = '#cff' 54 ctx.textAligh = 'center' 55 ctx.fillText(text, windowWidth / 2, windowHeight / 2) 56 57 // 表示確認のため固定配置でbodyに追加 58 canvas.classList.add('text-canvas') 59 document.body.appendChild(canvas) 60 61 o.canvas = canvas 62 o.ctx = ctx 63 64 return o 65} 66 67// domに追加 68document.querySelector('#gl').appendChild(renderer.domElement) 69 70// render 71renderer.render(scene, camera)
試したこと
camera.position
の値をいろいろいじってみましたが位置が変わるのみで反転は解消できませんでした。
補足情報(FW/ツールのバージョンなど)
Three.js v100を使用しています。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/01/05 15:08
2019/01/05 22:40
2019/01/06 09:26