将纹理添加到自定义three.js几何

银手

我一直在寻找一种在three.js中将uv-mapping添加到自定义几何中的方法。我已经找到了解决方法,但是没有找到有效的解决方案。谁能解释uv-mapping如何工作以及如何正确执行?

var s = 100;
var MapHeight = function(x, y, mult){
    var map = new Array(x);
    for(var i = 0; i < x; i++){
        map[i] = new Array(y);
        for (var j = 0; j < y; j++) {
            map[i][j] = Math.sin((i*12+j)/10)*mult;
        }
    }
    return map;
};
var heightMap = MapHeight(s, s, 0.3);
var loader = new THREE.TextureLoader();
var sandTex = loader.load("Textures/sand.jpeg");
var div = 2;
var Sand = function(color){
    var geo = new THREE.Geometry();
    var i;
    for (i = 0; i < s; i++) {
        for (var j = 0; j < s; j++) {
            geo.vertices.push(new THREE.Vector3(i/div, heightMap[i][j], j/div));
        }
    }
    for (i = 0; i < (s)*(s-1); i++) {
        if (!Number.isInteger((i+1)/s)){
            geo.faces.push(new THREE.Face3(i, i+1, i+s+1));
            geo.faces.push(new THREE.Face3(i, i+s+1, i+s));
        }
    }
    geo.computeVertexNormals();
    geo.computeFaceNormals();
    geo.center();
    var mesh = new THREE.Mesh(
        geo,
        new THREE.MeshStandardMaterial({map: map})
    );
    return mesh;
};

现在,当我尝试向几何图形添加UV贴图时,结果是黑色材质或程序无法运行。

拉比德76

必须将每个面的纹理坐标添加到第一层UV层。
参见THREE.Geometry.faceVertexUvs

在UV层上创建并排列:

geo.faceVertexUvs[0] = [];

THREE.Vector2为每个三角形面添加3的数组

geo.faceVertexUvs[0].push([
    new THREE.Vector2(u0, v1),
    new THREE.Vector2(u1, v1),
    new THREE.Vector2(u2, v2)
]);

将其应用于您的代码,如下所示:

var geo = new THREE.Geometry();
var i;
var uv = [];
for (i = 0; i < s; i++) {
    for (var j = 0; j < s; j++) {
        geo.vertices.push(new THREE.Vector3(i/div, heightMap[i][j], j/div));
        uv.push(new THREE.Vector2((i-1)/s, (j-1)/s));
    }
}

geo.faceVertexUvs[0] = [];
for (i = 0; i < (s)*(s-1); i++) {
    if (!Number.isInteger((i+1)/s)){

        var vi = [i, i+1, i+s+1, i+s];

        geo.faces.push(new THREE.Face3(vi[0], vi[1], vi[2]));
        geo.faces.push(new THREE.Face3(vi[0], vi[2], vi[3]));

        geo.faceVertexUvs[0].push([ uv[vi[0]], uv[vi[1]], uv[vi[2]] ]);
        geo.faceVertexUvs[0].push([ uv[vi[0]], uv[vi[2]], uv[vi[3]] ]);
    }
}
geo.computeVertexNormals();
geo.computeFaceNormals();

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

three.js:自定义几何不会纹理

来自分类Dev

如何在Three.js中将纹理应用于自定义几何

来自分类Dev

在Three.js中渲染自定义几何

来自分类Dev

使用ShaderMaterial为自定义几何图形加载纹理在Three.js中不起作用

来自分类Dev

在Three.js中,纹理在具有自定义几何形状的网格上显示为一种单色

来自分类Dev

Three.js扩展几何

来自分类Dev

将键盘箭头导航添加到自定义js

来自分类Dev

使用自定义属性将 js 添加到 wordpress

来自分类Dev

将自定义Js添加到Wordpress主题

来自分类Dev

三个JS创建自定义形状几何

来自分类Dev

自定义three.js几何图形不会显示其外观

来自分类Dev

在Three.js中为自定义几何计算光

来自分类Dev

three.js在平滑着色自定义几何时保持折痕

来自分类Dev

自定义three.js几何图形不会显示其外观

来自分类Dev

three.js在平滑着色自定义几何时保持折痕

来自分类Dev

将基于CSS样式而不是图像的自定义元素添加到图表D3.js

来自分类Dev

仅向上扩展Three.js几何

来自分类Dev

Three.js旋转和定位几何

来自分类Dev

three.js平面缓冲几何uvs

来自分类Dev

Three.js:更新几何与替换

来自分类Dev

细分几何的特定面。Three.js

来自分类Dev

在 Three.js 中将纹理设置为几何体

来自分类Dev

三.js | 无法将动态文本几何体添加到 3d 网格

来自分类Dev

如何在Three.js形状几何中添加正面和背面纹理?

来自分类Dev

Scenekit中自定义几何的纹理坐标

来自分类Dev

串联时将自定义字符串添加到JS文件中

来自分类Dev

如何在JS Fiddle中将自定义属性添加到head标签?

来自分类Dev

从GitHub将自定义javascript函数添加到scala-js-example-app

来自分类Dev

将自定义地图样式添加到Mapbox.js

Related 相关文章

热门标签

归档