クロージャススクリプトでthree.jsのCreating a sceneの例を実装しようとしています。Clijurescriptを使用してHTMLページのThree.jsシーンをレンダリングする
私はアニメーションをやっておらず、スタティックシーン(緑色のブロック)を表示したいだけです。
シーンをレンダリングするために呼び出されたこの関数に問題があるようです。
(defn ^:export draw []
(.render renderer scene camera)
)
これがHTMLからの呼び出しです。
%script{:type => "text/javascript"}
three.demo.draw();
たとえば、ドキュメントの本文に「HELLO」を印刷すると、描画機能が表示され、実行されます。
(.write js/document "HELLO")
私は何が間違っているのか分かりません。ページのその他すべてがレンダリングされます。私は
<script src='https://raw.github.com/mrdoob/three.js/master/build/three.js'></script>
<script src='js/main.js' type='text/javascript'></script>
<script type='text/javascript'>goog.require('main')</script>
と
以下<script type='text/javascript'>
three.demo.draw();
</script>
を持って、このHTMLファイルで
は、Javascriptがclojurescriptファイルから作成された、main.jsの終わりです。アンダー
goog.provide("three.demo");
goog.require("cljs.core");
goog.require("goog.dom");
three.demo.scene = new THREE.Scene;
three.demo.camera = new THREE.PerspectiveCamera(75, window.innerWidth/window.innerHeight, 0.1, 1E3);
three.demo.renderer = new THREE.WebGLRenderer;
three.demo.renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(three.demo.renderer.domElement);
three.demo.geometry = new THREE.CubeGeometry(1, 1, 1);
three.demo.material = new THREE.MeshBasicMaterial(cljs.core.ObjMap.fromObject(["\ufdd0'color"], {"\ufdd0'color":255}));
three.demo.cube = new THREE.Mesh(three.demo.geometry, three.demo.material);
three.demo.scene.add(three.demo.cube);
three.demo.camera.position.setZ(5);
three.demo.draw = function draw() {
three.demo.renderer.render(three.demo.scene, three.demo.camera);
return document.write("HELLO")
};
goog.exportSymbol("three.demo.draw", three.demo.draw);
:project.cljファイル内cljsbuildは
:foreign-libs [{:file "https://raw.github.com/mrdoob/three.js/master/build/three.js"
:provides ["three"]}]
を持っている私が試した:外部宣言と:外国-LIBSとどちらも動作するようですが。
私はあなたが全く同じメソッドを書いていれば純粋なJSで書かれているので、コードトランスレータを問題として取り除くことができます。また、何も表示されず、エラーのないスタックトレースがありますか? –