![](/img/trans.png)
[英]Three.js “webgl-template.html:69 Uncaught TypeError: Cannot read property 'domElement' of undefined" error
[英]webgl three.js - how to display a sprite ? Error: Uncaught TypeError: Cannot read property 'x' of undefined at SpritePlugin.render
我是three.js的入門者。
我嘗試了在這里找到的代碼: 創建場景
然后,我嘗試使用此處找到的代碼添加一個精靈: Sprite
但是由於出現以下錯誤,我無法使其工作:
Uncaught TypeError: Cannot read property 'x' of undefined
at SpritePlugin.render (three.js:6973)
at WebGLRenderer.render (three.js:21007)
at render (sprite.html:43)
此處有html文件: http : //www.planetarium2016.com/sprite.html
我的錯誤在哪里? 這是我的代碼:
<html>
<head>
<title>My first three.js app</title>
<style>
body { margin: 0; }
canvas { width: 100%; height: 100% }
</style>
</head>
<body>
<script src="https://rawgithub.com/mrdoob/three.js/master/build/three.js"></script>
<script>
var scene = new THREE.Scene();
var camera = new THREE.PerspectiveCamera( 75, window.innerWidth/window.innerHeight, 0.1, 1000 );
var renderer = new THREE.WebGLRenderer();
renderer.setSize( window.innerWidth, window.innerHeight );
document.body.appendChild( renderer.domElement );
// instantiate a loader
var loader = new THREE.TextureLoader();
//allow cross origin loading
//loader.crossOrigin = '';
// load a resource
loader.load("https://codefisher.org/static/images/pastel-svg/256/bullet-star.png");
var spriteMaterial = new THREE.SpriteMaterial( { map: loader, color: 0xffffff } );
var sprite = new THREE.Sprite( spriteMaterial );
sprite.scale.set(200, 200, 1);
scene.add( sprite );
camera.position.z = 2;
var render = function () {
requestAnimationFrame( render );
renderer.render(scene, camera);
};
render();
</script>
</body>
</html>
我想說下面的幾行將解決該錯誤。
var spriteMap = loader.load("https://codefisher.org/static/images/pastel-svg/256/bullet-star.png");
var spriteMaterial = new THREE.SpriteMaterial( { map: spriteMap, color: 0xffffff } );
並且requestAnimationFrame
是必需的。 讓我們保持render
功能不變。
好吧,即使據說很簡單,用three.js和webGL顯示一個簡單的sprite也是一個問題。
我遇到了很多錯誤,需要結合兩種解決方案來實現:
最后,以下代碼有效:
<html>
<head>
<title>My first three.js app</title>
<style>
body { margin: 0; }
canvas { width: 100%; height: 100% }
</style>
</head>
<body>
<script src="https://rawgithub.com/mrdoob/three.js/master/build/three.js"></script>
<script>
var scene = new THREE.Scene();
var camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 1, 500);
camera.position.set(0, 10, 100);
camera.lookAt(new THREE.Vector3(0, 0, 0));
var renderer = new THREE.WebGLRenderer();
renderer.setSize( window.innerWidth, window.innerHeight );
document.body.appendChild( renderer.domElement );
var material = new THREE.LineBasicMaterial({ color: 0x0000ff });
var geometry = new THREE.Geometry();
var a = 5;
geometry.vertices.push(new THREE.Vector3(-a, 0, 0));
geometry.vertices.push(new THREE.Vector3(0, a, 0));
geometry.vertices.push(new THREE.Vector3(a, 0, 0));
geometry.vertices.push(new THREE.Vector3(0, 0, -a));
var line = new THREE.Line(geometry, material);
scene.add(line);
var img = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABISURBVDhPzc1bCgAgCETR9r9poxynEHoIEp0vLS4WCWpBMfq09yYI8QFuTfBhlgFXHSgj4KB0pYzAwYfx+9FVgFv92ifBIFIBJq9zqYwecEQAAAAASUVORK5CYII=";
var loader = new THREE.TextureLoader();
var spriteMaterial = new THREE.SpriteMaterial( { color: 0x00ff00 } );
var spriteMaterial;
loader.load(img,
function(texture)
{
spriteMaterial.map = texture;
spriteMaterial.needsUpdate = true;
}
);
var sprite = new THREE.Sprite( spriteMaterial );
sprite.scale.set(6, 6, 1);
sprite.position.set( 0, 6, -6 );
scene.add( sprite );
var render = function () {
requestAnimationFrame( render );
renderer.render(scene, camera);
};
render();
</script>
</body>
</html>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.