koo*_*ber 5 javascript svg three.js
以下对 Three.js 的 R76 和 R77 中的 svg 文件效果很好,但在 R78 中我只能让它与 pngs 和 jpgs 一起使用
var floor = new THREE.TextureLoader();
floor.load('layout.svg', function ( texture ) {
var geometry = new THREE.PlaneBufferGeometry(4096, 4096);
var material = new THREE.MeshBasicMaterial( { map: texture } );
var mesh = new THREE.Mesh(geometry, material);
mesh.rotation.x = -Math.PI / 2;
scene.add(mesh);
} );
Run Code Online (Sandbox Code Playgroud)
由于问题出现,我在加载参数中添加了进度和错误函数...
function ( xhr ) {
console.log( (xhr.loaded / xhr.total * 100) + '% loaded' );
},
function ( xhr ) {
console.log( 'An error happened' );
}
Run Code Online (Sandbox Code Playgroud)
...这告诉我在 r78 中,svg 已 100% 加载,但它没有出现在场景中。我应该补充一点,我还将它与 phongmaterial 一起用于反射属性,并使用透明度来显示显然漂浮在天空图中的 svg 元素,非常有趣。我的问题是,我怎样才能让它工作?
在 R77 中,svg 将映射到 FF 或 chrome 中的 planeBufferGeometry。
在 R78 中它不会加载,Firebug 上没有显示错误。
更新
我调查了 SVGLoader.js、SVGRenderer.js(也需要 Projector.js)。渲染面向相机的 svg 文件,响应平移,但不响应旋转;即没有透视图是可能的。我在 svg 文件中添加了一个 xml 标头,然后添加了一个 doctype,但 Threejs 显然并没有因为它们的缺席而烦恼。使用 localhost 在 FF 中没有区别,在 Chrome 中是必需的
所以问题似乎出在 TextureLoader 或 WebGLRenderer 上,它们都在 R78 中进行了相当大的改组。
我还简要地尝试了 dev 版本,它的作用与 r78 相同。
谁能建议我从这里去哪里?我不确定是提交错误还是“功能恢复”。 这是想要的效果。
现在我的理解是,在R78之前,svgs在渲染之前在内部转换为光栅图像。
要在 R78 及以上版本中继续使用 Textureloader 中的 svg 图像,请预先将它们转换为 png。
或者,如果 svg 始终面向相机,请使用THREE.SVGLoader。
或者如果在 Three.js 场景中需要单独的 svg 元素,请将它们转换为路径并使用此示例来制作 2d 形状或 3d 拉伸形状。
我在这里得到的教训是不要仅仅依靠示例来发挥作用。我应该立即深入研究,打破常规,并及时了解Github 上的最新问题。
并且使用不止一种浏览器;当时,Chrome 正在经历一个与此不完全无关的 bug 阶段。
归档时间: |
|
查看次数: |
986 次 |
最近记录: |