2017-01-30 70 views
0

当我使用pixi js绘制圆时,我一直无法获得平滑的圆周。当我画大圆圈时,我已经可以看到几个角落,而当我把它缩小时,情况会变得更糟。 (我需要一个小圆圈)。如何在PixiJS中使用Antialias图形(圆形)?

下面的代码:

renderer = PIXI.autoDetectRenderer(
 
    document.getElementById("animations-canvas").width, 
 
    document.getElementById("animations-canvas").height, 
 
    { 
 
    view:document.getElementById("animations-canvas"), 
 
    }, 
 
    false, true 
 
); 
 

 
var stage = new PIXI.Container(); 
 

 

 
circle = new PIXI.Graphics(); 
 
circle.beginFill(0xFFFFFF); 
 
circle.drawCircle(60, 60, 50); 
 
circle.endFill(); 
 
stage.addChild(circle); 
 

 
renderer.render(stage);
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, user-scalable=no"> 
 
<canvas id="animations-canvas"></canvas> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/pixi.js/4.3.4/pixi.min.js"></script>

任何帮助是极大的赞赏,让我知道如果您需要了解我的代码一些更多的信息。非常感谢!

回答

3

你不只是需要通过antialias:true到启动PARAMS? See the docs

renderer = PIXI.autoDetectRenderer(
 
    document.getElementById("animations-canvas").width, 
 
    document.getElementById("animations-canvas").height, 
 
    { 
 
    view:document.getElementById("animations-canvas"), 
 
    antialias: true, // ADDED!!! 
 
    }, 
 
    false, true 
 
); 
 

 
var stage = new PIXI.Container(); 
 

 

 
circle = new PIXI.Graphics(); 
 
circle.beginFill(0xFFFFFF); 
 
circle.drawCircle(60, 60, 50); 
 
circle.endFill(); 
 
stage.addChild(circle); 
 

 
renderer.render(stage);
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, user-scalable=no"> 
 
<canvas id="animations-canvas"></canvas> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/pixi.js/4.3.4/pixi.min.js"></script>

不知道你是false, true参数是在您的通话结束PIXI.autoDetectRenderer

您还可以通过较高的号码resolution但你需要正确设置您的CSS

renderer = PIXI.autoDetectRenderer(
 
    document.getElementById("animations-canvas").width, 
 
    document.getElementById("animations-canvas").height, 
 
    { 
 
    view:document.getElementById("animations-canvas"), 
 
    antialias: true, // ADDED!!! 
 
    resolution: 2, // ADDED!!! 
 
    }, 
 
    false, true 
 
); 
 

 
var stage = new PIXI.Container(); 
 

 

 
circle = new PIXI.Graphics(); 
 
circle.beginFill(0xFFFFFF); 
 
circle.drawCircle(60, 60, 50); 
 
circle.endFill(); 
 
stage.addChild(circle); 
 

 
renderer.render(stage);
/* -- ADDED -- */ 
 
#animations-canvas { 
 
    width: 300px; 
 
    height: 150px; 
 
}
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, user-scalable=no"> 
 
<canvas id="animations-canvas"></canvas> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/pixi.js/4.3.4/pixi.min.js"></script>

+0

非常感谢! antialias:真实和分辨率对我来说是个诀窍,还有一个问题,您认为将分辨率设置为更高的值会以任何方式影响性能?再次感谢! –

+0

更高的分辨率将意味着系统更加紧张。例如,如果您的画布宽度和高度为1920x1080,则将您的分辨率设置为2意味着您将以4k分辨率渲染!您只需为您支持的设备和浏览器找到合适的组合。与桌面浏览器相比,不要害怕降低较旧的移动设备的分辨率! – themoonrat

+0

你也可以考虑像PC游戏那样,用户可以选择'选项 - >图形 - >分辨率'并选择在其系统上运行正常的设置。当然,我不知道你在做什么。如果您使用pixi只是为了从电子表格渲染静态图表,那么perf可能不是问题 – gman

0

如果你不能/不会在渲染级别使用反锯齿,这里有一个小窍门抗锯齿特定的图形。

var radius = 20; 
 

 
// Create "intermediary" container for graphics 
 
var gContainer = new PIXI.Container(); 
 
stage.addChild(gContainer); 
 

 
var myCircle = new PIXI.Graphics(); 
 
gContainer.addChild(myCircle); 
 

 
// Draw graphic x2 size 
 
myCircle.beginFill(0xFF0000); 
 
myCircle.drawCircle(0, 0, radius * 2); 
 

 
// Use cacheAsBitmap to render bitmap 
 
gContainer.cacheAsBitmap = true; 
 

 
// Scale down (the bitmap) to get smooth edges 
 
gContainer.scale.set(0.5);

如果您需要更新您的图形,只要将cacheAsBitmap设置=假,做了更新,然后再次将cacheAsBitmap设置=真。

千万记住纹理渲染对于每个更新,这远远不只是重新绘制图形本身效率较低。

相关问题