【发布时间】:2025-12-19 08:30:16
【问题描述】:
我有一个轮廓的对象。
在它后面我想画一个透明的物体。我的问题是轮廓与透明对象混合。
我怎样才能画出轮廓,这样它就不会被混合?
# PLANE
geo1 = new THREE.PlaneGeometry 500, 500
mat1 = new THREE.MeshPhongMaterial({color: 0x00ff00, transparent: true, opacity: 0.5})
plane = new THREE.Mesh geo1, mat1
plane.position.z = -100
scene.add plane
# SHADED MODEL
torusKnotGeo = new THREE.TorusKnotGeometry 50, 10, 128, 16
phongMat2 = new THREE.MeshPhongMaterial 0xffffff
torusKnot = new THREE.Mesh torusKnotGeo, phongMat2
scene.add torusKnot
# OUTLINE
uniforms = offset:
type: "f"
value: 2
shader = shader['outline']
shaderMat = new THREE.ShaderMaterial
uniforms: uniforms,
vertexShader: shader.vertex_shader,
fragmentShader: shader.fragment_shader,
torusKnotOutline = new THREE.Mesh torusKnotGeo, shaderMat
torusKnotOutline.material.depthWrite = false
outScene.add torusKnotOutline
【问题讨论】:
-
透明对象在不透明对象之后渲染。重写你的程序,首先渲染飞机。
-
我尝试将 sortObjects 设置为 false 并先添加平面,但没有成功。我错过了什么吗? jsfiddle.net/ckra27s1。我会试试阿德里安说的。
-
正如我所说,透明对象在不透明对象之后渲染。您必须将其放在单独的渲染通道中。
标签: three.js