Advertisement
Alan468

Notatki

Oct 23rd, 2018
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.00 KB | None | 0 0
  1. // 2D
  2.  
  3. SpriteBatch.Begin(x, y)
  4.  
  5. x - decyduje o kolejności rysowania sprajtów na ekranie ( z defaultu deferred)
  6.  
  7. y - blendState - tryb nakładania sprajtów na podstawie kanału alfa
  8. ( additive, alphablend, opaque)
  9.  
  10. SpriteFont renderuje teksty
  11.  
  12. SpriteFont - transformacja vectorowych czcionek TrueType na czcionki
  13. bitmapowe
  14.  
  15. jak dodać:
  16. add new item > sprite font
  17.  
  18. font = Content.Load<SpriteFont>
  19.  
  20. // w draw()
  21.  
  22. // Vector2 - pozycja
  23. spriteBatch.DrawString(font, 'blah', Vector2, Color.Black);
  24.  
  25.  
  26. *.spritefont
  27.  
  28. string bl = string.Format("blah")
  29.  
  30. <FontName>Calibri</FontName>
  31. <Size>16</Size>
  32. <Spacing>0</Spacing> // odstep miedzy literami
  33. <UseKerning>true</UseKerning>
  34. <Style>"Bold, Italic"</Style>
  35.  
  36. // region ascii
  37.  
  38. <CharacterRegions>
  39. <CharacterRegion>
  40. <Start>&#32;</Start>
  41. <Start>&#126;</Start> // 383, żeby móc użyc polskich też
  42. </CharacterRegion>
  43. </CharacterRegions>
  44.  
  45. // font - spriteFont
  46.  
  47. Vector2 textSize = font.MeasureString(s1); // długość wyrenderowanego 'prostokątu' z czcionka
  48.  
  49. spriteBatch.DrawString(font, s1, Vector2.Zero);
  50. spriteBatch.DrawString(font, s2, new Vector2(textSize.X, 0));
  51.  
  52. RUCH / ANIMACJA SPRITE'ÓW
  53.  
  54. // RUCH
  55.  
  56. Vector2 pos1 = Vector2.Zero;
  57. float speed1 = 2f;
  58.  
  59. spriteBatch.Draw(texture1, pos1, null, Color.White, 0, Vector2.Zero, 1, SpriteEffects.None, 0);
  60.  
  61. pos1.X += speed1;
  62. if (pos1.X > Window.ClientBounds.Width = texture1.Width || pos1.X < 0) {
  63. speed1 *= -1; // wektor prędkości w drugą stronę
  64. }
  65.  
  66.  
  67. Vector2 cetner, rPos, gPos, bPos;
  68. float rAngle, gAngle, bAngle;
  69. float distance;
  70.  
  71.  
  72. // w draw
  73.  
  74. distance = 100.0f;
  75. rAngle = 0.04f;
  76. gAngle = 0.05f;
  77. bAngle = 0.06f;
  78.  
  79. center = new Vector2(graphicsDevice.ViewPort.Width / 2 - red.Width / 2, graphicsDevice.ViewPort.Height / 2 - red.Height / 2,)
  80.  
  81. rPos = center + distance * (new Vector2((float)(Math.Cos(rAngle), (float)(Math.Sin(rAngle)))
  82.  
  83. // ANIMACJA - POJEDYNCZE KLATKI
  84.  
  85. z reguły zapisywane w jednym pliku kilka animacji - na labkach to! kolejne animacje w [3x3], albo [4x4], ale nie wszystkie elementy 'pełne'
  86.  
  87. Prinse of Persia - pierwszy motion capture ( 1985 ) - Jordan MechnerFrame
  88.  
  89. Texture@D texture // plik z animacjami [6, 8]
  90.  
  91. Point frameSize = new Point(75, 75);
  92. Point currentS = new Point(0,0); // pozycja aktualnego szablonu
  93.  
  94. Point sheetSize = new Point(6,8); // rozmiar z animacjami [6, 8]
  95.  
  96. spriteBatch.Draw(
  97. texture, new Vector(100, 100)
  98. new Rectangle(currentFrame.X * frameSize.X, currentFrame.Y * frameSize.Y, frameSize.X, frameSize.Y)
  99. Color.White, 0, Vector2.Zero, 1 , SpriteEffects.Nne, 0
  100. )
  101.  
  102. w Draw - przesuwamy currentFrame x i y, jeśli przekroczy rozmiar sheetSize - zerujemy ( osobno x osobno y)
  103.  
  104. ++currentFrameX;
  105. if (currentFrame.X >= sheetSize.X) {
  106. currentFrame.X = 0;
  107. ....
  108. }
  109.  
  110. kontrola prędkości wyświetlania
  111.  
  112.  
  113. TargetElapsedTime = new TimeSpan(0, 0, 0, 0, 50) // 50ms = 20fps
  114.  
  115. this.Window.Tile = string.Format("fps: {0}", (1 / gameTime.ElapsedGAmeTime.TotalSeconds));
  116.  
  117. // inny sposob - LEPSZY
  118.  
  119. int timeSinceLAstFrame = 0;
  120. cost int milisecondsPerFrame = 50
  121.  
  122.  
  123. w update()
  124.  
  125. timeSinceLAstFrame += gameTime.ElapsedGAmeTime.Miliseconds;
  126. if (timeSinceLAstFrame > milisecondsPerFrame) {
  127. timeSinceLAstFrame -= milisecondsPerFrame;
  128. ++currentFrame.X
  129. if (currentFrame.X >= sheetSize.X) {
  130. currentFrame.X = 0;
  131. ++currentFrame.Y;
  132. if (currentFrame.Y >= sheetSize.Y) {
  133. currentFrame.Y = 0;
  134. }
  135. }
  136. }
  137.  
  138. detekcja kolizji
  139.  
  140.  
  141. // można uzyć inflate
  142.  
  143. bool Collide() {
  144. fingsRect = new Rectangle(
  145. ringPosiiton.X + ringsCollictionRectOffset,
  146. ringPosiiton.Y + ringsCollictionRectOffset,
  147. ringPosiiton.X - ringsCollictionRectOffset * 2,
  148. ringPosiiton.Y - ringsCollictionRectOffset * 2,
  149. )
  150.  
  151. other = new Rectangle(
  152. otherPosiiton.X + otherCollictionRectOffset,
  153. otherPosiiton.Y + otherCollictionRectOffset,
  154. otherPosiiton.X - otherCollictionRectOffset * 2,
  155. otherPosiiton.Y - otherCollictionRectOffset * 2,
  156. )
  157.  
  158. return fingsRect.intersects(other);
  159. }
  160.  
  161. drzewa czwórkowe - detekcja kolizji
  162.  
  163. // grafika3d
  164.  
  165. // układ wspołrzędnych
  166.  
  167. ortogonalność - prostopadłość osi
  168.  
  169. P(x, y, z)
  170.  
  171. 2 typy układów w grafice 3d
  172. right-handed / left-handed - oś Z w różną stronę
  173. ( prawosketny - Z w naszą stronę rośnie)
  174.  
  175. right - openGL, xna
  176. left - directX
  177.  
  178. // wektory mskaacierze
  179.  
  180. wektor zaczepiony / wektor swobodny
  181.  
  182. swobodny - początek w jakimkolwiek punkcie
  183.  
  184. modul - |v| - dlugosc
  185.  
  186. |v| = Math.sqrt(x^2 + y^2 +z^2 ) - Vector3.Length
  187.  
  188. wektor jednostkowy ( dlugosc 1)
  189. Vector3.Normalize
  190.  
  191. // dodawanie vectorów
  192. VectorX.Add()
  193. // odejmowanie
  194. VectorX.Subtract()
  195. // mnożenie wektorów ( skalarne, vectorowe )
  196.  
  197. VectorX.Multiply()
  198.  
  199. VectorX.Dot() = iloczyn skalarny - dot product a * b = |a||b|cos(kąt między nimi)
  200. arccos - wartość kąta miedzy a i b
  201.  
  202. wykorzytanie światła - natężenie największe, kiedy wektor promienia prostopadły
  203.  
  204. iloczyn wektorowy - Cross Product
  205.  
  206. c = a x b = transpose([
  207. aybz, - azby,
  208. azbz, - axbz,
  209. axby, - aybx,
  210. ])
  211.  
  212. |c| = |a||b|sin(kąt)
  213.  
  214. Vector4
  215. Quaternion - do rotacji ( W. Hamilton ) - orientacja jak i rotacja wg. tego jednego wektora - oś obrotu, kąt obrotu
  216.  
  217.  
  218. propertysy Vector3
  219.  
  220. UnitX
  221. UnitY
  222. UnitZ
  223. Right
  224. Left
  225. Up
  226. Down
  227. Forward
  228. Backward
  229. One
  230. Zero
  231.  
  232.  
  233. metodki
  234.  
  235. Add
  236. Subtract
  237. Negate
  238. Dot
  239. Cross
  240. Multiply
  241. Divide
  242. Normalize
  243. Length
  244. LengthSquared - jesli tylko chcemy wiedziec, czy wektor sa roznej dlugosci - Length pierwiastkuje, a to trwa
  245. Distance
  246. DistanceSquared
  247. Min
  248. Max
  249. Transform - transformacja liniowa ( z macierzy transformacji / kwaternionów )
  250.  
  251.  
  252.  
  253. rzutowanie 3d
  254. przeksztalcanie ukladu danych do ukladu obserwatora
  255. przeksztalcenie ukladu wspolrzednych
  256. przeksztalcenia geometryczne punktow
  257.  
  258.  
  259. w XNA:
  260.  
  261. typ Matrix
  262. [
  263. Right, (x, y, z, w)
  264. Up, (x, y, z, w)
  265. Forward, (x, y, z, w)
  266. Translation, (x, y, z, w)
  267. ]
  268.  
  269. Matrix.Identity
  270. [
  271. 1 0 0 0
  272. 0 1 0 0
  273. 0 0 1 0
  274. 0 0 0 1
  275. ]
  276.  
  277. przesuniecia, skalowanie, obrót
  278.  
  279. wspolrzędne jednorodne
  280.  
  281. P ( x, y , z ) - P ( x, y, z, 1)
  282.  
  283. przesuniecie
  284.  
  285. x' = x + tx (tx - wartość przesunięcia)
  286. y' = y + ty
  287. z' = z + tz
  288.  
  289. [
  290. 1 0 0 0
  291. 0 1 0 0
  292. 0 0 1 0
  293. tx, ty, tz, 1
  294. ]
  295.  
  296. Matrix.CreateTranslation - paremetr wejsciowy - wektor przesuniecia
  297.  
  298.  
  299. skalowanie
  300.  
  301. x' = sx x ( s - wspolczynnik skalowania )
  302. y' = sy y ( s - wspolczynnik skalowania )
  303. z' = sz z ( s - wspolczynnik skalowania )
  304.  
  305. [
  306. sx 0 0 0
  307. 0 sx 0 0
  308. 0 0 sz 0
  309. 0 0 0 1
  310. ]
  311.  
  312. Matrix.createScale
  313.  
  314.  
  315. obroty - os x
  316.  
  317. x' x
  318. y' = ycos(alfa) - zsin(alf)
  319. z' = ysin(alfa) + zcos(alf)
  320.  
  321. [
  322. sx 0 0 0
  323. 0 cos() sin() 0
  324. 0 -sin() cos() 0
  325. 0 0 0 1
  326. ]
  327.  
  328.  
  329. Matrix.CrateRotationX ( kąt w radianach )
  330.  
  331. MathHelper.ToRadians
  332.  
  333.  
  334. CreateRotationY
  335. CreateRotationZ
  336.  
  337. inne reprezentacje obrotow
  338.  
  339. macierzy rotacje
  340. kąty eulera - yaw, pitch, roll
  341. kwaterniony
  342.  
  343. Matrix.CreateFromYawPitchRoll(y, p, r)
  344.  
  345.  
  346. Matrix rotation = Matrix.CreateFromYawPitchRoll(y, p, r)
  347. Vector3 pointNew = Vector3.Transform(pointOld, rotation)
  348.  
  349. Quaternion.CreateFromYawPitchRoll(y, p, r)
  350.  
  351.  
  352. Matrix result = Matrix.CreateRotationZ(angle) * Matrix.createTranslation(position);
  353.  
  354. // albo Matrix.Multiply
  355.  
  356.  
  357. macierz swiata, widoku, projekcie
  358.  
  359. widok - pozycja obserwatora ( kamera ) , pozycje, kierunek ( world, view, projection)
  360.  
  361. projekcja - jak głęboko widzi macierz, początek koniec
  362.  
  363.  
  364.  
  365. // srodek sceny
  366.  
  367. worldMatrix = Matrx.Identity
  368.  
  369. worldMatrix = Matrix.CreateRotation(new Vector3( 1, 1, 1));
  370.  
  371.  
  372. Matrix.createLookAt - definiowanie połozenia kamery ( vector3 pozycja kamery, Vector3 punkt gdzie patrzy, Vector3 gora kamery jak jest skierowana - orientacja kamery)
  373.  
  374. // projekcja
  375.  
  376. CreatePerspectiveFieldOfView(
  377. fieldOfView - pole widzenia kamerty - najczesniej 45 stopni,
  378. aspectRation - proporcje ekranu ( 1.77 - 16:9, Viewport.aspectRAtio )
  379. nearPlaceDistance - przednia odcinajaca plaszczyzna
  380. farPlaneDistance - tylna -||-
  381.  
  382. ) - zaklada obserwatora w punkcie poza plaszczyzna obrazu - widok perspektywiczny
  383. CreateOrtographic() - rzut punktu na plaszczyzne - widok ortogonalny
  384.  
  385. Notatki BY Kamil
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement