質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Three.js

Three.jsはWebGLをサポートしているJavaScriptの3D描画用ライブラリです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

2121閲覧

Vue RouterでのThree.jsの利用について

Spade

総合スコア115

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Three.js

Three.jsはWebGLをサポートしているJavaScriptの3D描画用ライブラリです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2018/11/11 12:07

Vue Router で構築したサイトでThree.jsを利用しようとしています。

Vueの変数、メソッドで描画をしようとしていたのですが、うまく行かず、、、
エラーとしては、

[.WebGL-0x7ffd3f4a2200]RENDER WARNING: Render count or primcount is 0.

のエラーが発生しています。
Meshがうまく渡せていないのでしょうか・・・?

ソースは以下になります。

<template> <div class="container"> <div id="canvas_wrap" class="canvas_wrap" @mousemove="changeBoxDirection()"></div> </div> </template> <script> import * as THREE from 'three'; export default { name: 'hello', data () { return { msg: 'Welcome to MyPage', scene : new THREE.Scene(), camera : new THREE.PerspectiveCamera( 100, window.innerWidth/window.innerHeight, 0.1, 1000 ), renderer : new THREE.WebGLRenderer(), geometry : new THREE.BoxGeometry( 4, 4, 4 ), material : new THREE.MeshBasicMaterial( { color: 0x563d7c } ), cube : new THREE.Mesh( this.geometry, this.material ), } }, methods : { changeBoxDirection : function(){ }, firstdraw : function(){ // 初期3Dオブジェクト描画 this.cube.position.set(0,0,0); this.scene.add( this.cube ); this.camera.position.z = 10; let canvasWrap = document.getElementById("canvas_wrap"); this.renderer.setSize( canvasWrap.clientWidth, canvasWrap.clientHeight); canvasWrap.appendChild( this.renderer.domElement ); this.renderer.render( this.scene, this.camera ); // this.animate(); }, animate : function(){ requestAnimationFrame( this.animate ); this.renderer.render( this.scene, this.camera ); } }, mounted: function(){ this.firstdraw(); }, } </script>

Vueのメソッドとして実装せずに、scriptタグに直接描画を行う場合は問題なく描画できました。
オブジェクトのパラメータをバインドするためにVueの変数として利用したいのですが、解決策がわからず。。。

なにかヒントになるようなことでも良いので、教えいていただければ幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

NozomuIkuta

2018/11/11 12:54

エラーのスタックトレースはありますか
guest

回答1

0

ベストアンサー

js

1 data () { 2 return { 3 msg: 'Welcome to MyPage', 4 scene : new THREE.Scene(), 5 camera : new THREE.PerspectiveCamera( 100, window.innerWidth/window.innerHeight, 0.1, 1000 ), 6 renderer : new THREE.WebGLRenderer(), 7 geometry : new THREE.BoxGeometry( 4, 4, 4 ), 8 material : new THREE.MeshBasicMaterial( { color: 0x563d7c } ), 9 cube : new THREE.Mesh( this.geometry, this.material ), 10 } 11 },

this.geometrythis.materialを参照してますが、この時点では存在しないのでundefinedになると思います。

投稿2018/11/11 13:05

karamarimo

総合スコア2551

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Spade

2018/11/13 04:59 編集

ご指摘いただいたことを参考にし、以下のようにcubeを初期化するだけにしたところ、うまく動きました! cube : 0, ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問