我需要找出用户是否在使用Chrome浏览器浏览一个被WebGL黑名单限制的网站时,使用了一张显卡。
http://support.google.com/chrome/bin/answer.py?hl=en-GB&answer=1220892
具体来说,我需要知道他们是否使用ATI显卡。我正在使用THREE.js进行的项目在Chrome上使用ATI显卡查看时会产生非常丑陋的渲染效果(线条不平滑),因此我想提供一种替代方案。
我知道有一种后期效果可以模糊线条,但与美术方向的结果更差。
我需要找出用户是否在使用Chrome浏览器浏览一个被WebGL黑名单限制的网站时,使用了一张显卡。
http://support.google.com/chrome/bin/answer.py?hl=en-GB&answer=1220892
具体来说,我需要知道他们是否使用ATI显卡。我正在使用THREE.js进行的项目在Chrome上使用ATI显卡查看时会产生非常丑陋的渲染效果(线条不平滑),因此我想提供一种替代方案。
我知道有一种后期效果可以模糊线条,但与美术方向的结果更差。
试试这个:
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;
}
在WebGL中,通常用于查找信息的OpenGL调用对于此目的是无用的,因为浏览器会篡改字符串值:http://jsbin.com/ovekor/3/。然而,有一个扩展WEBGL_debug_renderer_info
可以使用,但当前浏览器支持情况未知,并且由于被标记为安全风险,使用起来可能不太顺畅(可能需要某种调试标志或用户提示)。
仅仅测试“ATI卡”也有点邪恶,因为驱动程序可能会改进,或者问题在某些卡上不存在。(这类似于臭名昭著的浏览器嗅探与特性检测之间的区别。)
因此,最好的方法是按照评论中建议进行一些小型测试渲染。
如果您指的是HorizontalBlurShader和VerticalBlurShader,那么我建议您尝试使用FXAAShader,它是一种实际的屏幕空间抗锯齿滤镜,而不仅仅是模糊整个图像。我知道有一种后期效果可以模糊线条,但与艺术方向的结果更糟。