1

我在 stage3D 中绘制了一个简单的正方形,但是图片中的数字和边缘的质量并没有达到应有的水平:

正方形

这是带有(小)源代码的示例,我将最多的源代码放在一个文件中。 http://users.telenet.be/fusion/SquareQuality/
http://users.telenet.be/fusion/SquareQuality/srcview/

我正在使用 mipmapping,在我的着色器中我使用“<2d, miplinear, repeat>”,纹理为 256x256 jpg(比图像上的大),还尝试了 png,尝试了“mipnearest”并尝试不使用 mipmapping。抗锯齿 4,但 10 或更多根本没有帮助......

有任何想法吗?问候,托马斯

4

3 回答 3

2

您是否对 backBuffer 使用抗锯齿功能?

// Listen for when the Context3D is created for it
stage3D.addEventListener(Event.CONTEXT3D_CREATE, onContext3DCreated);

function onContext3DCreated(ev:Event): void
{
    var context3D:Context3D = stage3D.context3D;

    // Setup the back buffer for the context
    context3D.configureBackBuffer(stage.stageWidth, stage.stageHeight,
                                  0, // no antialiasing (values 2-16 for antialiasing)
                                  true);
}
于 2012-12-07T18:35:09.447 回答
1

我认为你的资源纹理的大小太高了。GPU 在片段着色器中逐个像素地渲染场景。当它渲染纹理的像素时,片段着色器会得到一个表示纹理 UV 的变量。GPU 只是在纹理的 UV 坐标上获取像素的颜色。

现在,当您的纹理尺寸太大时,您将丢失信息,因为屏幕上的两个相邻像素将对应于纹理资源上的非相邻像素。例如:如果你绘制一个比资源小 10 倍的纹理,你会得到这样的结果(如果每个字符对应一个像素,在一维中):

Texture:  0123456789ABCDEFGHIJKLM
Screen:   0AK
于 2012-12-07T18:23:52.647 回答
1

我找到了!!!

我去了 Starling 论坛,从 Starling 的 Daniel 那里找到了一个答案:

“如果您使用的是 TRILINEAR,那么您已经在使用可用的最佳质量。您可以尝试的另一件事是将 Starling 的“抗锯齿”值设置为较高的值,例如 16,看看是否有帮助。

所以我看到这篇文章说三线性仅在您将参数“线性”放在片段着色器中时使用,在我的示例程序中:

“tex ft0,v0,fs0 <2d,线性,miplinear,重复>”。

问候,
托马斯

于 2012-12-07T22:16:54.840 回答