Skip to content

🪧 Oclusión de texto en carteles de dos caras (Minecraft 26.3) ​

En Minecraft 26.3, los carteles y carteles colgantes cuentan con capacidad de texto en dos caras (SignTextSlot.FRONT y SignTextSlot.BACK). De manera predeterminada, el motor de renderizado de fuentes procesa, calcula espaciados y dibuja quads de texto, tintes y contornos brillantes para ambas caras simultáneamente, incluso si el jugador mira directamente al frente de un cartel de pared.

Camera Culling elimina los pases de dibujo innecesarios mediante el cálculo del producto escalar de vectores normales ($\vec{N} \cdot \vec{V}$) y descartes rápidos para texto vacío.


📋 Información de oclusión de texto en carteles ​

PropiedadValor
Canal de destinoBlockEntityRenderDispatcher.tryExtractRenderState @At("RETURN")
Gancho de APIsignState.frontText = null; / signState.backText = null;
Tipos compatiblesCarteles de pared, carteles de pie, carteles colgantes de pared y de techo
Paso rápido para texto vacíoOmite automáticamente las caras vacías sin caracteres visibles
Tolerancia de producto escalarMargen de $\pm 0.05$ que previene parpadeos en ángulos oblicuos

📐 Matemáticas del producto escalar de vectores normales ​

Para determinar si la cara frontal o posterior de un cartel apunta hacia la cámara, Camera Culling calcula el producto escalar entre el vector normal de la cara $\vec{N} = (N_x, N_z)$ y el vector desde el centro del cartel hacia la cámara $\vec{V} = (V_x, V_z)$:

$$V_x = X_{\text{cam} - (X_{\text{sign} + 0.5), \quad V_z = Z_{\text{cam} - (Z_{\text{sign} + 0.5)$$

1. Carteles de pared y carteles colgantes de pared ​

El vector normal se obtiene directamente de los desplazamientos de paso de la dirección del bloque: $$N_x = \text{facing.getStepX()}, \quad N_z = \text{facing.getStepZ()}$$

2. Carteles de pie y carteles colgantes de techo ​

La rotación se representa como un número entero de $0 \dots 15$. El ángulo $\theta$ en radianes se calcula: $$\theta = \left(\frac{\text{rotation} \times 360^\circ}{16}\right) \times \frac{\pi}{180}$$ $$N_x = -\sin\theta, \quad N_z = \cos\theta$$

3. Determinación de visibilidad ​

El producto escalar $D$ evalúa el ángulo de observación: $$D = N_x V_x + N_z V_z$$

  • Evaluación de cara frontal: Se ocluye cuando $D < -0.05$ (la cámara está detrás del plano del cartel).
  • Evaluación de cara posterior: Se ocluye cuando $D > 0.05$ (la cámara está delante del plano del cartel).

⚡ Descarte rápido para caras vacías ​

Si un jugador solo ha escrito texto en un lado del cartel (o lo ha colocado vacío como barrera decorativa), Camera Culling inspecciona las 4 líneas de texto:

java
public static boolean isTextEmpty(SignText text) {
    if (text == null) return true;
    for (Component msg : text.getMessages(false)) {
        if (msg != null && !msg.getString().trim().isEmpty()) {
            return false;
        }
    }
    return true;
}

Las caras en blanco se anulan inmediatamente sin realizar cálculos trigonométricos ni productos escalares.


🔗 Páginas relacionadas ​

Official documentation & web portal for Dasik Igaijinn mods.