劣质纹理stage3D

时间:2012-12-07 18:14:43

标签: actionscript-3 flash flash-builder stage3d molehill

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

Square

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

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

有什么想法吗? 问候, 托马斯

3 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:1)

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

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

Texture:  0123456789ABCDEFGHIJKLM
Screen:   0AK

答案 2 :(得分:1)

我找到了它!!!“

我去了Starling论坛,找到了来自Starling的Daniel的答案:

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

所以我遇到了this文章说三线性仅在你的片段着色器中将参数“线性”放在我的示例程序中时使用:

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

问候,
托马斯