Prova questa:
function aa_test() {
renderer.setSize(4, 4);
var ortho_camera = new THREE.OrthographicCamera(0, 4, 0, 4, 0, 1);
var output = new Uint8Array(4);
var material = new THREE.LineBasicMaterial({
color: 0xffffff
});
var geometry = new THREE.Geometry();
geometry.vertices.push(new THREE.Vector3(0, 0, 0));
geometry.vertices.push(new THREE.Vector3(4, 4, 0));
var line = new THREE.Line(geometry, material);
renderer.clearTarget(aa_target.renderTarget, true, true, true);
renderer.context.lineWidth(4);
aa_target.add(line);
renderer.render(aa_target, ortho_camera, aa_target.renderTarget);
renderer.context.readPixels(0, 2, 1, 1, renderer.context.RGBA, renderer.context.UNSIGNED_BYTE, output);
if (output[0] == 0)
aa_available = false;
}
Quindi quello che hai, è un banco di prova per se AA è disponibile. Questo metodo funziona in Three.js. Ho provato a guardare Chrome e le sue pagine speciali (chrome: // gpu, ecc.) Ma non è possibile ottenere quei dati in uno script js arbitrario.
L'utilizzo di FXAA non è così grave, FINO A QUANTO lo spessore della linea è di circa 1,6. In caso contrario, non si ottiene abbastanza linea per fondere. FXAA è ottimo per le scene che hanno molto successo, ma se la scena è principalmente linee, tende a sfumare troppo le linee sullo sfondo.
La risposta migliore per questo sarebbe FXAA e utilizzando l'approccio qui:
https://github.com/OpenGLInsights/OpenGLInsightsCode/tree/master/Chapter%2011%20Antialiased%20Volumetric%20Lines%20Using%20Shader-Based%20Extrusion
questo utilizza un geometry shader sì, ma in precedenza, si menziona l'uso di un vertex shader per ottenere lo stesso risultato . Questo molto probabilmente darebbe linee molto più belle.
Spero che questo aiuti! : D
AFAIK impossibile usando solo JS, ma correggimi se sbaglio. Dovresti utilizzare alcune implementazioni del browser per rilevare (se possibile) – alexandernst
Che dire del rendering di una scena semplice (una riga) e il confronto di singoli pixel rispetto al riferimento? – noiv
@noiv Penso che il modo in cui lo implementeremo sia quello di rendere una scena semplice ma invece di confrontarla con un riferimento, cerca solo determinati colori.Se l'anti-aliasing è disattivato, il rendering di una linea bianca su sfondo nero non dovrebbe produrre alcun grigio. – Evanbbb