[英]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.