Cuando tiene dos planos en Three.js/WebGL y uno o ambos son transparentes, a veces el plano detrás quedará oculto por el plano transparente de arriba. ¿Por qué es esto?Three.js/WebGL: planos transparentes que ocultan otros planos detrás de ellos
Respuesta
Esto no es un error, es solo cómo funciona OpenGL (y, por lo tanto, WebGL). Las superficies transparentes no funcionan bien con el z-buffer, y como tales deben ser ordenadas manualmente y renderizadas de atrás hacia adelante. Three JS intenta hacer esto por usted (razón por la cual el problema desaparece cuando establece el valor X> 0) pero no puede manejar de forma robusta el caso de la geometría de intersección como lo muestra.
He explicado el problema más a fondo en un different SO question, por lo que es posible que desee hacer referencia a eso.
Pruebe agregar alphaTest: 0.5
al material.
Lo he intentado, no funcionó:/Supongo que es un problema web, así que tengo que volver a diseñar cómo mi juego muestra planos. Aunque se verá un poco pirateado. – MaiaVictor
Tengo un plano con una textura basada en lienzo asignada a él que muestra texto. En ciertos ángulos/posiciones tuve problemas con la transparencia del material de textura y esto lo solucionó, ¡gracias! – plyawn
Nota: 'alphaTest' es un umbral que hará que las áreas semitransparentes en las texturas sean totalmente opacas (cuando la opacidad del píxel sea> treshold) o totalmente transparentes (cuando la opacidad del píxel sea
fwiw, si tiene muchos planos paralelos (no puede ver su muestra, Google no puede resolver su dominio), es fácil mantenerlos ordenados a lo largo del eje perpendicular. Para una lista de planos [A B C D], el orden para dibujar será [A B C D] o [D C B A] y nada más. Por lo tanto, no es necesario que la clasificación ordene el rendimiento. Solo mantenlos en orden sobre la marcha.
el problema es que tengo algunos planos que deberían representarse cruzando los otros. Como si fueran espadas planas 3d. ¿Puedo preguntar, cómo encontraste esa pregunta mucho tiempo después de que se me preguntó y cómo vinieron 4 videntes? – MaiaVictor
Tus preguntas sobre el comportamiento de las personas No puedo responder :) Sin embargo, si tienes polígonos que se cruzan, no hay una solución correcta fácil que no sea por fragmento como K-Buffers o el algoritmo original de A-Buffer, a menos que específicamente las intersecciones triangulares y teselarlas sobre la marcha. – bjorke
Digamos que está utilizando alguna imagen * .png transparente. Entonces esto ayudaría:
new THREE.MeshBasicMaterial({ side:THREE.BackSide,map:texture, depthWrite: false, depthTest: false });
Por alguna razón, la parte 'side: THREE.BackSide' impidió que mis imágenes se renderizaran todas juntas. Pero aparte de eso, el resto funcionó muy bien! –
Probablemente desee utilizar TRREE.DoubleSide para que sea visible desde ambos lados. – Blaise
¡Esto realmente funciona muy bien! – polyclick
Al establecer la propiedad depthWrite
a false
solucionado mi problema.
new THREE.MeshBasicMaterial({
opacity: 0.25,
transparent: true,
side: THREE.DoubleSide,
depthWrite: false
});
GRACIAS. ¡No más "problema de caja negra transparente"! – Andy
- 1. Cómo anotar entre planos o entre planos en paneles de múltiples planos en R
- 2. matraz: error_handler para planos
- 3. OpenGL: representación de dos planos transparentes que se intersectan entre sí: ¿imposible o no?
- 4. ¿Objetos antiguos planos en Ruby?
- 5. base de datos vs. archivos planos
- 6. Elementos planos de QTreeView: no anidados
- 7. Argmax de matriz numpy que devuelve índices no planos
- 8. Encontrar ciclos hamiltonianos en gráficos planos cúbicos
- 9. ¿PDFBox admite colores planos y separaciones?
- 10. Android RadioGroup/RadioButtons dinámicos como botones planos
- 11. ¿Cómo reconoce Google StreetView los planos 3D?
- 12. Ejemplo de base de datos de archivos planos
- 13. Uso de extensiones de matraz en planos de matraz
- 14. ¿Cómo puedo encontrar el punto de intersección de tres planos?
- 15. ¿Son buenas las bases de datos de archivos planos?
- 16. Activos específicos de planos en Flask utilizando Flask-Assets?
- 17. Consultas SQL simples y rápidas para archivos planos
- 18. ¿Requiere iniciar sesión para ciertos planos en Flask?
- 19. Agregar comportamiento REST a una clase con matraz, caso de planos?
- 20. Cambiar el color de fondo de los planos de los ejes de una trama 3D matplotlib
- 21. Cómo probar de manera efectiva un analizador de archivos planos de longitud fija utilizando MSpec?
- 22. ¿Puede NHibernate persistir en archivos planos en lugar de bases de datos?
- 23. Base de datos SQL VS. Múltiples archivos planos (miles de CSV pequeños)
- 24. ¿Cómo mostrar la estructura de datos planos en una estructura de datos jerárquica (Java)?
- 25. ¿Es posible cambiar los iconos del administrador de planos de Google Maps?
- 26. ¿Puede crear automáticamente un gráfico de objetos a partir de objetos planos?
- 27. ¿Parcela en una parcela específica en la ventana de varios planos?
- 28. Escribir mensajes de correo electrónico a archivos planos en Outlook con VBA
- 29. ¿Qué es más rápido, archivos planos o una base de datos RAM MySQL?
- 30. ¿Cómo se cargan los planos de Machinist cuando se usa Spork?
Gracias por la respuesta, pero me está diciendo que es mejor rediseñar mi juego o que es una solución para hackear Three.JS? – MaiaVictor
@Toji, la pregunta a la que se refiere no trata exactamente con el mismo problema. En la otra pregunta, es solo una parte del objeto/textura que es transparente, donde en esta pregunta todo el plano es transparente y esto es fácilmente solucionable simplemente desactivando el 'depthWrite' totalmente para el plano transparente. – Wilt