簡體   English   中英

XNA中的像素完美渲染

[英]Pixel perfect rendering in XNA

我在XNA中有一個帶有滾動攝像頭的2D游戲。 不幸的是,當屏幕移動時,我可以看到一些偽像-大多數是模糊的,屏幕上還有其他線條。

我考慮過在繪制之前更改坐標Floor()始終與Ceiling()Floor()一致),但這似乎效率不高。 這是唯一的方法嗎?

我使用SpriteBatch進行渲染。

這是我從Camera繪制的方法:

Vector2D適用於雙打, Vector2適用於浮點數(由XNA使用), Srpite只是具有spriteBatch.Draw數據的類。

public void DrawSprite(Sprite toDraw)
{
    Vector2D drawingPostion;
    Vector2 drawingPos;
    drawingPostion = toDraw.Position - transform.Position;
    drawingPos.X = (float) drawingPostion.X*UnitToPixels;
    drawingPos.Y = (float) drawingPostion.Y*UnitToPixels;

    spriteBatch.Draw(toDraw.Texture, drawingPos, toDraw.Source, toDraw.Color,
        toDraw.Rotation, toDraw.Origin, toDraw.Scale, toDraw.Effects, toDraw.LayerDepth + zsortingValue);
}

我的想法是這樣做:

drawingPos.X = (float) Math.Floor(drawingPostion.X*UnitToPixels);
drawingPos.Y = (float) Math.Floor(drawingPostion.Y*UnitToPixels);

它解決了這個問題。 我想我可以這樣接受。 但是還有其他選擇嗎?

GraphicsDevice.SamplerStates[0] = SamplerState.PointWrap; 

這不是相機的問題,因為它是采樣器。 使用Point Sampler狀態指示視頻卡根據位置直接從紋理中直接獲取單個點顏色樣本。 其他默認模式(例如LinearWrap和LinearClamp)將在紋理像素(源紋理上的像素)之間進行插值,並賦予其非常糊狀,模糊的外觀。 如果要使用像素圖形,則需要點采樣。

使用線性插值時,如果紋理中的紅色和白色彼此相鄰,並且在這兩者之間進行采樣(根據相機的某些方面),則將變為粉紅色。 使用點采樣,您將獲得紅色或白色。 兩者之間什么都沒有。

是的,有可能……嘗試一下……

bool redrawSprite = false;
Sprite toDraw;

void MainRenderer()
{
   if (redrawSprite)
   {
      DrawSprite(toDraw);
      redrawSprite = false;
   }
}

void ManualRefresh()
{
   "Create or set your sprite and set it to 'toDraw'"
   redrawSprite = true;
}

這樣,您將讓主循環按預期方式工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM