我有一个用例,用户可以在其中指定纹理,然后将纹理映射到多个面上的对象。所以不幸的是我不能像Blender一样使用标准的UV映射,因此想要编写我自己的自定义UVGenerator
来创建我自己的投影。
所以我正在寻找详细信息如何做到这一点。
我知道THREE.ExtrudeGeometry.WorldUVGenerator
可以作为位于src/extras/geometries/ExtrudeGeometry.js
在那里,我找到了两种方法,我不确定如何一起工作。第一个是generateTopUV
,它基本上将3个顶点作为参数,并期望我返回三对u / v值。所以这个方法很简单。
generateTopUV: function ( geometry, indexA, indexB, indexC )
第二个对我来说很奇怪,因为它需要四个顶点,我想知道为什么这个名字并没有真正帮助我。希望某人能够对此有所了解。
WorldUVGenerator的代码是:
generateSideWallUV: function ( geometry, indexA, indexB, indexC, indexD ) {
var vertices = geometry.vertices;
var a = vertices[ indexA ];
var b = vertices[ indexB ];
var c = vertices[ indexC ];
var d = vertices[ indexD ];
if ( Math.abs( a.y - b.y ) < 0.01 ) {
return [
new THREE.Vector2( a.x, 1 - a.z ),
new THREE.Vector2( b.x, 1 - b.z ),
new THREE.Vector2( c.x, 1 - c.z ),
new THREE.Vector2( d.x, 1 - d.z )
];
} else {
return [
new THREE.Vector2( a.y, 1 - a.z ),
new THREE.Vector2( b.y, 1 - b.z ),
new THREE.Vector2( c.y, 1 - c.z ),
new THREE.Vector2( d.y, 1 - d.z )
];
}
}
干杯汤姆
答案 0 :(得分:0)
最后,我通过将geometry.faceVertexUvs设置为一个数组数组来解决这个问题,其中内部数组包含3个给出uv值的vector2&#39; s。
很好地工作:-)并且不需要处理4个顶点
答案 1 :(得分:0)
顶部和底部UV生成过程中的三个顶点各自定义一个三角形。
(单独)将侧壁创建为一串矩形,然后将每个矩形分成两个共面三角形。这四个顶点定义一个矩形。
如果请求了斜角,则它是此矩形处理的一部分。