Una soluzione generica che si applica alle geometrie di qualsiasi complessità potrebbe essere l'applicazione di uno shader di frammenti tramite lo ShaderMaterial class in three.js. Non sei sicuro di quale sia il tuo livello di esperienza, ma se ne hai bisogno, puoi trovare un'introduzione agli shader here.
Un buon esempio in cui si utilizzano gli ombreggiatori per evidenziare le geometrie è here. Nella loro vertex, calcolano il normale per un vertice e un parametro utilizzato per indicare l'intensità di un effetto di incandescenza:
uniform vec3 viewVector;
uniform float c;
uniform float p;
varying float intensity;
void main()
{
vec3 vNormal = normalize(normalMatrix * normal);
vec3 vNormel = normalize(normalMatrix * viewVector);
intensity = pow(c - dot(vNormal, vNormel), p);
gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
}
Questi parametri vengono passati allo shader frammento dove vengono utilizzati per modificare i valori di colore dei pixel circonda la geometria:
uniform vec3 glowColor;
varying float intensity;
void main()
{
vec3 glow = glowColor * intensity;
gl_FragColor = vec4(glow, 1.0);
}
si può solo clonare e impostare il materiale normale, poi scalare il clone un po 'e allontanarlo dalla fotocamera. Quindi il contorno è solo un modello più grande dietro al modello attuale. Solo un'idea, ricordo di aver letto un gioco che lo ha fatto in quel modo ... – yaku
beh, grazie yaku. Proverò a spostare il clone dalla fotocamera per testare la tua strada, ma il fatto è che i miei personaggi sono più complessi di questo, e camminano per terra, suppongo che solo perché la cinepresa sta guardando dall'alto, il clone dello schema andare dietro la terra e pasticciare tutto! –
Sei riuscito a farlo funzionare alla fine? Sono molto interessato alla soluzione. – spassvogel