创建要导入 Three.JS 的 SVG 以使其符合真正的 SVG 设计时,错过了哪一步?
What step is being missed when creating an SVG for import into Three.JS so that it honors the true SVG design?
当我在 Illustrator 中创建 SVG 时,通过在不同图层上绘制多个描边路径,从路径开始到路径结束没有连接,也没有应用填充,然后将它们连接到一个图层中, SVG 在浏览器中按预期呈现,但在 Three.JS
中未按预期呈现
我逐字使用 ThreeJS 网站上定义的 "load" 代码:https://threejs.org/docs/#examples/loaders/SVGLoader, changing only the path to the SVG file being used. When I use sample SVG files from Wikimedia that have hollowed inner pieces they render as expected. For example I used this SVG which is a hollowed circle with no fill and ThreeJS renders it appropriately: https://upload.wikimedia.org/wikipedia/commons/d/dc/Circle_blank_font_awesome.svg
现在这是我在 Illustrator 中创建的示例图像:
https://www.dropbox.com/s/x2pibx6olayvfe0/test.svg?dl=0
上图仅使用象限 II 中的一条路径绘制,然后在其他象限中垂直和水平镜像自身,然后将所有路径连接到一个图层中。
这就是 Three.JS 渲染的内容(忽略网格 material)...
https://www.dropbox.com/s/iw4xwiw0807mf3x/threejs_test.png?dl=0
在 Illustrator 或 Three.JS 中是否有一个步骤我在 creating/saving SVG 或导入 Three.JS 时丢失,以便它知道不要填充空心内部形状,但只渲染描边的外部路径?
请参阅上面@WestLangley 对 link 的第一条评论,其中还显示了如何包含要呈现的 SVG 数据的子路径。
var strokeColor = path.userData.style.stroke;
if ( guiData.drawStrokes && strokeColor !== undefined && strokeColor !== 'none' ) {
var material = new THREE.MeshBasicMaterial( {
color: new THREE.Color().setStyle( strokeColor ),
opacity: path.userData.style.strokeOpacity,
transparent: path.userData.style.strokeOpacity < 1,
side: THREE.DoubleSide,
depthWrite: false
} );
for ( var j = 0, jl = path.subPaths.length; j < jl; j ++ ) {
var subPath = path.subPaths[ j ];
var geometry = THREE.SVGLoader.pointsToStroke( subPath.getPoints(), path.userData.style );
if ( geometry ) {
var mesh = new THREE.Mesh( geometry, material );
group.add( mesh );
}
}
}
当我在 Illustrator 中创建 SVG 时,通过在不同图层上绘制多个描边路径,从路径开始到路径结束没有连接,也没有应用填充,然后将它们连接到一个图层中, SVG 在浏览器中按预期呈现,但在 Three.JS
中未按预期呈现我逐字使用 ThreeJS 网站上定义的 "load" 代码:https://threejs.org/docs/#examples/loaders/SVGLoader, changing only the path to the SVG file being used. When I use sample SVG files from Wikimedia that have hollowed inner pieces they render as expected. For example I used this SVG which is a hollowed circle with no fill and ThreeJS renders it appropriately: https://upload.wikimedia.org/wikipedia/commons/d/dc/Circle_blank_font_awesome.svg
现在这是我在 Illustrator 中创建的示例图像:
https://www.dropbox.com/s/x2pibx6olayvfe0/test.svg?dl=0
上图仅使用象限 II 中的一条路径绘制,然后在其他象限中垂直和水平镜像自身,然后将所有路径连接到一个图层中。
这就是 Three.JS 渲染的内容(忽略网格 material)...
https://www.dropbox.com/s/iw4xwiw0807mf3x/threejs_test.png?dl=0
在 Illustrator 或 Three.JS 中是否有一个步骤我在 creating/saving SVG 或导入 Three.JS 时丢失,以便它知道不要填充空心内部形状,但只渲染描边的外部路径?
请参阅上面@WestLangley 对 link 的第一条评论,其中还显示了如何包含要呈现的 SVG 数据的子路径。
var strokeColor = path.userData.style.stroke;
if ( guiData.drawStrokes && strokeColor !== undefined && strokeColor !== 'none' ) {
var material = new THREE.MeshBasicMaterial( {
color: new THREE.Color().setStyle( strokeColor ),
opacity: path.userData.style.strokeOpacity,
transparent: path.userData.style.strokeOpacity < 1,
side: THREE.DoubleSide,
depthWrite: false
} );
for ( var j = 0, jl = path.subPaths.length; j < jl; j ++ ) {
var subPath = path.subPaths[ j ];
var geometry = THREE.SVGLoader.pointsToStroke( subPath.getPoints(), path.userData.style );
if ( geometry ) {
var mesh = new THREE.Mesh( geometry, material );
group.add( mesh );
}
}
}