gpt4 book ai didi

javascript - 如何对球体的不规则平面进行纹理处理?

转载 作者:数据小太阳 更新时间:2023-10-29 04:44:38 26 4
gpt4 key购买 nike

我想为 THREE.js 球体的每个面赋予它自己的纹理。所以我让 SphereGeometry 计算顶点并使用面的顶点将每个面转换为 PlaneGeometry。

THREE.SpherePlaneGeometry = function ( v1, v2, v3, v4 ) {

THREE.Geometry.call( this );

var normal = new THREE.Vector3( 0, 1, 0 );

this.vertices.push( v1.clone() );
this.vertices.push( v2.clone() );
this.vertices.push( v3.clone() );
this.vertices.push( v4.clone() );

var face = new THREE.Face4( 0, 1, 2, 3 );

face.normal.copy( normal );
face.vertexNormals.push( normal.clone(), normal.clone(), normal.clone(), normal.clone() );

this.faces.push( face );

var uvs = [
new THREE.UV( 1.0, 0.0 ),
new THREE.UV( 0.0, 0.0 ),
new THREE.UV( 0.0, 1.0 ),
new THREE.UV( 1.0, 1.0 ),
];
this.faceVertexUvs[ 0 ].push( uvs );

};

为了确保所有这些都在稍后使用返回的几何体运行:

geometry.computeCentroids();
geometry.computeFaceNormals();
geometry.verticesNeedUpdate = true;
geometry.uvsNeedUpdate = true;
geometry.normalsNeedUpdate = true;
geometry.tangentsNeedUpdate = true;
geometry.elementsNeedUpdate = true;
geometry.dynamic = true;

通过应用这个纹理:

texture

我得到了这个结果:

sphere

如何消除红点和绿点之间的失真?对于极点,一个顶点被使用了两次,但它可能会更好,有什么想法吗?

最佳答案

这是一个棘手的问题。我们的纹理映射仍然是仿射的。

blah

在某些时候,我们需要试验透视正确的纹理贴图。我在某处读到过一些关于插入 w... 的内容,但我不确定这是否能解决您的问题。

为了简化问题...查看纹理映射图像中的仿射映射四边形。想象一下,您将左上角的顶点移动到右上角。通过这样做,你基本上将左边的三 Angular 形变成了一条从左下角到右上角的简单直线。这基本上意味着你不会看到它。因为直 Angular 三 Angular 形的顶点没有移动,三 Angular 形仍然存在,可见,并且 UV 分配给每个顶点。

所以我能想到的唯一解决方案是:

  1. 为这些多边形添加一级分割。
  2. 针对这些可能的情况使用特殊的预校正纹理(使用 canvas 或 photoshop)。

关于javascript - 如何对球体的不规则平面进行纹理处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11962522/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com