Javascript 三、形状由绿色变为红色

Javascript 三、形状由绿色变为红色,javascript,colors,three.js,geometry,shapes,Javascript,Colors,Three.js,Geometry,Shapes,我用三个形状创建了一个简单的圆圈,并将其涂成绿色 但是,我希望更改颜色,使其从绿色(中间)变为红色(边框) 我一直在看网站上的一个例子,但我不明白如何为我的项目实现类似的方法 创建圆的代码: var arcShape = new THREE.Shape(); arcShape.absarc(100, 100, circleRadius, 0, Math.PI * 2, false); var geometry = new THREE.ShapeGeometry(arcShape); var m

我用三个形状创建了一个简单的圆圈,并将其涂成绿色

但是,我希望更改颜色,使其从绿色(中间)变为红色(边框)

我一直在看网站上的一个例子,但我不明白如何为我的项目实现类似的方法

创建圆的代码:

var arcShape = new THREE.Shape();
arcShape.absarc(100, 100, circleRadius, 0, Math.PI * 2, false);

var geometry = new THREE.ShapeGeometry(arcShape);
var material = new THREE.MeshBasicMaterial({ color: 0x00ff11, overdraw: 0.5, side: THREE.DoubleSide });

var mesh = new THREE.Mesh(geometry, material);
mesh.position = CirclePosition;
mesh.rotation.set(Algorithms.ConvertDegreesToRadians(-90), 0, 0);

你所举的例子在这里并不重要。最简单的方法就是使用图像。如果您喜欢使用仅与WebGL渲染器兼容的方法,我制作了一个JSFIDLE,其中显示了一个GLSL着色器的简单示例:

关键位是片段着色器:

varying vec2 vUv;
varying vec3 vPosition;
uniform float radius;
void main() {
    vec3 center = vec3(100.0, 100.0, 0.0);
    float redAmount = max(0.0, min(1.0, distance(vPosition, center) / radius));
    gl_FragColor = vec4(redAmount, 1.0 - redAmount, 0.0, 1.0);
}

您可能也可以在JS中使用顶点颜色完全做到这一点,这也将与CanvasRenderer兼容;您只需要找出中心顶点的位置。

您引用的示例在这里并不相关。最简单的方法就是使用图像。如果您喜欢使用仅与WebGL渲染器兼容的方法,我制作了一个JSFIDLE,其中显示了一个GLSL着色器的简单示例:

关键位是片段着色器:

varying vec2 vUv;
varying vec3 vPosition;
uniform float radius;
void main() {
    vec3 center = vec3(100.0, 100.0, 0.0);
    float redAmount = max(0.0, min(1.0, distance(vPosition, center) / radius));
    gl_FragColor = vec4(redAmount, 1.0 - redAmount, 0.0, 1.0);
}

您可能也可以在JS中使用顶点颜色完全做到这一点,这也将与CanvasRenderer兼容;您只需要找出中心顶点的位置。

您引用的示例在这里并不相关。最简单的方法就是使用图像。如果您喜欢使用仅与WebGL渲染器兼容的方法,我制作了一个JSFIDLE,其中显示了一个GLSL着色器的简单示例:

关键位是片段着色器:

varying vec2 vUv;
varying vec3 vPosition;
uniform float radius;
void main() {
    vec3 center = vec3(100.0, 100.0, 0.0);
    float redAmount = max(0.0, min(1.0, distance(vPosition, center) / radius));
    gl_FragColor = vec4(redAmount, 1.0 - redAmount, 0.0, 1.0);
}

您可能也可以在JS中使用顶点颜色完全做到这一点,这也将与CanvasRenderer兼容;您只需要找出中心顶点的位置。

您引用的示例在这里并不相关。最简单的方法就是使用图像。如果您喜欢使用仅与WebGL渲染器兼容的方法,我制作了一个JSFIDLE,其中显示了一个GLSL着色器的简单示例:

关键位是片段着色器:

varying vec2 vUv;
varying vec3 vPosition;
uniform float radius;
void main() {
    vec3 center = vec3(100.0, 100.0, 0.0);
    float redAmount = max(0.0, min(1.0, distance(vPosition, center) / radius));
    gl_FragColor = vec4(redAmount, 1.0 - redAmount, 0.0, 1.0);
}

您可能也可以在JS中使用顶点颜色完全做到这一点,这也将与CanvasRenderer兼容;您只需找出中心顶点的位置。

另一种方法是使用顶点颜色

var colorRed = new THREE.Color (0.9, 0.0, 0.0);
var colorGreen = new THREE.Color (0.0, 0.9, 0.0);

material = new THREE.MeshBasicMaterial({ vertexColors: THREE.VertexColors});

geometry = new THREE.CircleGeometry(100, 10, 0, 3);

var nmax = geometry.faces.length;
for (var n=0; n<nmax; n++) {
    geometry.faces[n].vertexColors[0] = colorRed;
    geometry.faces[n].vertexColors[1] = colorRed;
    geometry.faces[n].vertexColors[2] = colorGreen;
}
var colorRed=新的三种颜色(0.9,0.0,0.0);
var colorGreen=新的三种颜色(0.0,0.9,0.0);
材质=新的三个.MeshBasicMaterial({vertexColors:THREE.vertexColors});
几何=新的三个圆几何(100,10,0,3);
var nmax=geometry.faces.length;

对于(var n=0;n另一种方法是使用顶点颜色

var colorRed = new THREE.Color (0.9, 0.0, 0.0);
var colorGreen = new THREE.Color (0.0, 0.9, 0.0);

material = new THREE.MeshBasicMaterial({ vertexColors: THREE.VertexColors});

geometry = new THREE.CircleGeometry(100, 10, 0, 3);

var nmax = geometry.faces.length;
for (var n=0; n<nmax; n++) {
    geometry.faces[n].vertexColors[0] = colorRed;
    geometry.faces[n].vertexColors[1] = colorRed;
    geometry.faces[n].vertexColors[2] = colorGreen;
}
var colorRed=新的三种颜色(0.9,0.0,0.0);
var colorGreen=新的三种颜色(0.0,0.9,0.0);
材质=新的三个.MeshBasicMaterial({vertexColors:THREE.vertexColors});
几何=新的三个圆几何(100,10,0,3);
var nmax=geometry.faces.length;

对于(var n=0;n另一种方法是使用顶点颜色

var colorRed = new THREE.Color (0.9, 0.0, 0.0);
var colorGreen = new THREE.Color (0.0, 0.9, 0.0);

material = new THREE.MeshBasicMaterial({ vertexColors: THREE.VertexColors});

geometry = new THREE.CircleGeometry(100, 10, 0, 3);

var nmax = geometry.faces.length;
for (var n=0; n<nmax; n++) {
    geometry.faces[n].vertexColors[0] = colorRed;
    geometry.faces[n].vertexColors[1] = colorRed;
    geometry.faces[n].vertexColors[2] = colorGreen;
}
var colorRed=新的三种颜色(0.9,0.0,0.0);
var colorGreen=新的三种颜色(0.0,0.9,0.0);
材质=新的三个.MeshBasicMaterial({vertexColors:THREE.vertexColors});
几何=新的三个圆几何(100,10,0,3);
var nmax=geometry.faces.length;

对于(var n=0;n另一种方法是使用顶点颜色

var colorRed = new THREE.Color (0.9, 0.0, 0.0);
var colorGreen = new THREE.Color (0.0, 0.9, 0.0);

material = new THREE.MeshBasicMaterial({ vertexColors: THREE.VertexColors});

geometry = new THREE.CircleGeometry(100, 10, 0, 3);

var nmax = geometry.faces.length;
for (var n=0; n<nmax; n++) {
    geometry.faces[n].vertexColors[0] = colorRed;
    geometry.faces[n].vertexColors[1] = colorRed;
    geometry.faces[n].vertexColors[2] = colorGreen;
}
var colorRed=新的三种颜色(0.9,0.0,0.0);
var colorGreen=新的三种颜色(0.0,0.9,0.0);
材质=新的三个.MeshBasicMaterial({vertexColors:THREE.vertexColors});
几何=新的三个圆几何(100,10,0,3);
var nmax=geometry.faces.length;

for(var n=0;nWorks也很好!谢谢!也很好!谢谢!也很好!谢谢!也很好!谢谢!也很好!谢谢!