第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

不正確的 SpriteBatch 旋轉(zhuǎn)

不正確的 SpriteBatch 旋轉(zhuǎn)

C#
函數(shù)式編程 2022-11-21 21:43:35
我正在嘗試旋轉(zhuǎn)Texture2D以正確適合/填充旋轉(zhuǎn)Polygon(我自己的類)的邊界,但它拒絕正常工作。SpriteBatch我使用的方法是:spriteBatch.Draw(texture, new Rectangle((int)Position.X, (int)Position.Y, Width, Height), null, color, Rotation, Vector2.Zero, SpriteEffects.None, 1.0f);但是,其中唯一重要的位是Rectangle和 origin,當(dāng)前設(shè)置為Vector2.Zero。運行上面的代碼時,它會生成此圖像,其中Texture2D(填充的紅色方塊)與Polygon(石灰線框)的偏移值為(texture.Width / 2, texture.Height / 2). 但是,旋轉(zhuǎn)是正確的,因為兩種形狀都有平行邊。我努力了:spriteBatch.Draw(texture, new Rectangle((int)Position.X, (int)Position.Y, Width, Height), null, color, Rotation, new Vector2(Width / 2, Height / 2), SpriteEffects.None, 1.0f);此調(diào)用的唯一區(qū)別是我將原點(Texture2D 應(yīng)圍繞其旋轉(zhuǎn)的點)更改為new Vector2(Width / 2, Height / 2),這導(dǎo)致此圖像中 與Texture2D的偏移Polygon值為(-Width, -Height),但它仍隨 旋轉(zhuǎn)Polygon。發(fā)生的另一個錯誤是,當(dāng)使用Texture2D與第一個不同的寬度和高度時——盡管它應(yīng)該產(chǎn)生相同的結(jié)果,因為destinationRectangle字段沒有改變——但它在程序中是不同的,如此圖所示。同樣,這使用與之前完全相同的調(diào)用,只是使用不同的圖像(具有不同的尺寸)。對這些問題中的任何一個的任何幫助將不勝感激。謝謝!
查看完整描述

3 回答

?
胡子哥哥

TA貢獻1825條經(jīng)驗 獲得超6個贊

原點根據(jù)源矩形調(diào)整旋轉(zhuǎn)中心。(當(dāng)像null您的情況一樣傳遞時,源矩形是整個紋理。

請記住,在涉及平移、旋轉(zhuǎn)和縮放時,順序很重要。

旋轉(zhuǎn)應(yīng)用于源矩形的平移原點,允許旋轉(zhuǎn) sprite 表的各個幀。

以下代碼應(yīng)產(chǎn)生預(yù)期的輸出:

spriteBatch.Draw(texture, new Rectangle((int)Position.Center.X, (int)Position.Center.Y, Width, Height), null, color, Rotation, new Vector2(texture.Width / 2, texture.Height / 2), SpriteEffects.None, 1.0f);



查看完整回答
反對 回復(fù) 2022-11-21
?
繁花如伊

TA貢獻2012條經(jīng)驗 獲得超12個贊

http://www.monogame.net/documentation/?page=M_Microsoft_Xna_Framework_Graphics_SpriteBatch_Draw

為了正確旋轉(zhuǎn),你需要確保origin是正確的,

0.5f, 0.5f如果它是一個標準化值,要么是,要么是width / 2.0f, height / 2.0f.

或者根據(jù)您的情況旋轉(zhuǎn)任何其他合適的角。


查看完整回答
反對 回復(fù) 2022-11-21
?
皈依舞

TA貢獻1851條經(jīng)驗 獲得超3個贊

我的兩個問題的答案在于一個錯誤:

SpriteBatch 在應(yīng)用縮放平移之前應(yīng)用圍繞原點的旋轉(zhuǎn)。

為了解釋這一點,這里有一個例子:

您有一個Texture2D大小為(16, 16),并希望它在圍繞原點(等于)旋轉(zhuǎn)時填充一個(48, 48)大小。因此,您希望最終得到一個圍繞其中心點旋轉(zhuǎn)的正方形。destinationRectangle(destinationRectangle.Width / 2, destinationRectangle.Height / 2)(24, 24)

首先,SpriteBatch將旋轉(zhuǎn)Texture2Daround point (24, 24),因為Texture2D尚未縮放,因此大小為(16, 16),將導(dǎo)致不正確和意外的結(jié)果。在此之后,它將被縮放,使其只是旋轉(zhuǎn)不佳的正方形的放大版本。

要解決此問題,請使用 (texture.Width / 2, texture.Height / 2) 而不是 (destinationRectangle.Width / 2, destinationRectangle.Height / 2) 作為原點。

例子:spriteBatch.Draw(texture, new Rectangle((int)Position.X, (int)Position.Y, Width, Height), null, color, Rotation, new Vector2(texture.Width / 2, texture.Height / 2), SpriteEffects.None, 0f);

可以在此處此處找到進一步的解釋。


查看完整回答
反對 回復(fù) 2022-11-21
  • 3 回答
  • 0 關(guān)注
  • 148 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號