Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // 2D
- SpriteBatch.Begin(x, y)
- x - decyduje o kolejności rysowania sprajtów na ekranie ( z defaultu deferred)
- y - blendState - tryb nakładania sprajtów na podstawie kanału alfa
- ( additive, alphablend, opaque)
- SpriteFont renderuje teksty
- SpriteFont - transformacja vectorowych czcionek TrueType na czcionki
- bitmapowe
- jak dodać:
- add new item > sprite font
- font = Content.Load<SpriteFont>
- // w draw()
- // Vector2 - pozycja
- spriteBatch.DrawString(font, 'blah', Vector2, Color.Black);
- *.spritefont
- string bl = string.Format("blah")
- <FontName>Calibri</FontName>
- <Size>16</Size>
- <Spacing>0</Spacing> // odstep miedzy literami
- <UseKerning>true</UseKerning>
- <Style>"Bold, Italic"</Style>
- // region ascii
- <CharacterRegions>
- <CharacterRegion>
- <Start> </Start>
- <Start>~</Start> // 383, żeby móc użyc polskich też
- </CharacterRegion>
- </CharacterRegions>
- // font - spriteFont
- Vector2 textSize = font.MeasureString(s1); // długość wyrenderowanego 'prostokątu' z czcionka
- spriteBatch.DrawString(font, s1, Vector2.Zero);
- spriteBatch.DrawString(font, s2, new Vector2(textSize.X, 0));
- RUCH / ANIMACJA SPRITE'ÓW
- // RUCH
- Vector2 pos1 = Vector2.Zero;
- float speed1 = 2f;
- spriteBatch.Draw(texture1, pos1, null, Color.White, 0, Vector2.Zero, 1, SpriteEffects.None, 0);
- pos1.X += speed1;
- if (pos1.X > Window.ClientBounds.Width = texture1.Width || pos1.X < 0) {
- speed1 *= -1; // wektor prędkości w drugą stronę
- }
- Vector2 cetner, rPos, gPos, bPos;
- float rAngle, gAngle, bAngle;
- float distance;
- // w draw
- distance = 100.0f;
- rAngle = 0.04f;
- gAngle = 0.05f;
- bAngle = 0.06f;
- center = new Vector2(graphicsDevice.ViewPort.Width / 2 - red.Width / 2, graphicsDevice.ViewPort.Height / 2 - red.Height / 2,)
- rPos = center + distance * (new Vector2((float)(Math.Cos(rAngle), (float)(Math.Sin(rAngle)))
- // ANIMACJA - POJEDYNCZE KLATKI
- z reguły zapisywane w jednym pliku kilka animacji - na labkach to! kolejne animacje w [3x3], albo [4x4], ale nie wszystkie elementy 'pełne'
- Prinse of Persia - pierwszy motion capture ( 1985 ) - Jordan MechnerFrame
- Texture@D texture // plik z animacjami [6, 8]
- Point frameSize = new Point(75, 75);
- Point currentS = new Point(0,0); // pozycja aktualnego szablonu
- Point sheetSize = new Point(6,8); // rozmiar z animacjami [6, 8]
- spriteBatch.Draw(
- texture, new Vector(100, 100)
- new Rectangle(currentFrame.X * frameSize.X, currentFrame.Y * frameSize.Y, frameSize.X, frameSize.Y)
- Color.White, 0, Vector2.Zero, 1 , SpriteEffects.Nne, 0
- )
- w Draw - przesuwamy currentFrame x i y, jeśli przekroczy rozmiar sheetSize - zerujemy ( osobno x osobno y)
- ++currentFrameX;
- if (currentFrame.X >= sheetSize.X) {
- currentFrame.X = 0;
- ....
- }
- kontrola prędkości wyświetlania
- TargetElapsedTime = new TimeSpan(0, 0, 0, 0, 50) // 50ms = 20fps
- this.Window.Tile = string.Format("fps: {0}", (1 / gameTime.ElapsedGAmeTime.TotalSeconds));
- // inny sposob - LEPSZY
- int timeSinceLAstFrame = 0;
- cost int milisecondsPerFrame = 50
- w update()
- timeSinceLAstFrame += gameTime.ElapsedGAmeTime.Miliseconds;
- if (timeSinceLAstFrame > milisecondsPerFrame) {
- timeSinceLAstFrame -= milisecondsPerFrame;
- ++currentFrame.X
- if (currentFrame.X >= sheetSize.X) {
- currentFrame.X = 0;
- ++currentFrame.Y;
- if (currentFrame.Y >= sheetSize.Y) {
- currentFrame.Y = 0;
- }
- }
- }
- detekcja kolizji
- // można uzyć inflate
- bool Collide() {
- fingsRect = new Rectangle(
- ringPosiiton.X + ringsCollictionRectOffset,
- ringPosiiton.Y + ringsCollictionRectOffset,
- ringPosiiton.X - ringsCollictionRectOffset * 2,
- ringPosiiton.Y - ringsCollictionRectOffset * 2,
- )
- other = new Rectangle(
- otherPosiiton.X + otherCollictionRectOffset,
- otherPosiiton.Y + otherCollictionRectOffset,
- otherPosiiton.X - otherCollictionRectOffset * 2,
- otherPosiiton.Y - otherCollictionRectOffset * 2,
- )
- return fingsRect.intersects(other);
- }
- drzewa czwórkowe - detekcja kolizji
- // grafika3d
- // układ wspołrzędnych
- ortogonalność - prostopadłość osi
- P(x, y, z)
- 2 typy układów w grafice 3d
- right-handed / left-handed - oś Z w różną stronę
- ( prawosketny - Z w naszą stronę rośnie)
- right - openGL, xna
- left - directX
- // wektory mskaacierze
- wektor zaczepiony / wektor swobodny
- swobodny - początek w jakimkolwiek punkcie
- modul - |v| - dlugosc
- |v| = Math.sqrt(x^2 + y^2 +z^2 ) - Vector3.Length
- wektor jednostkowy ( dlugosc 1)
- Vector3.Normalize
- // dodawanie vectorów
- VectorX.Add()
- // odejmowanie
- VectorX.Subtract()
- // mnożenie wektorów ( skalarne, vectorowe )
- VectorX.Multiply()
- VectorX.Dot() = iloczyn skalarny - dot product a * b = |a||b|cos(kąt między nimi)
- arccos - wartość kąta miedzy a i b
- wykorzytanie światła - natężenie największe, kiedy wektor promienia prostopadły
- iloczyn wektorowy - Cross Product
- c = a x b = transpose([
- aybz, - azby,
- azbz, - axbz,
- axby, - aybx,
- ])
- |c| = |a||b|sin(kąt)
- Vector4
- Quaternion - do rotacji ( W. Hamilton ) - orientacja jak i rotacja wg. tego jednego wektora - oś obrotu, kąt obrotu
- propertysy Vector3
- UnitX
- UnitY
- UnitZ
- Right
- Left
- Up
- Down
- Forward
- Backward
- One
- Zero
- metodki
- Add
- Subtract
- Negate
- Dot
- Cross
- Multiply
- Divide
- Normalize
- Length
- LengthSquared - jesli tylko chcemy wiedziec, czy wektor sa roznej dlugosci - Length pierwiastkuje, a to trwa
- Distance
- DistanceSquared
- Min
- Max
- Transform - transformacja liniowa ( z macierzy transformacji / kwaternionów )
- rzutowanie 3d
- przeksztalcanie ukladu danych do ukladu obserwatora
- przeksztalcenie ukladu wspolrzednych
- przeksztalcenia geometryczne punktow
- w XNA:
- typ Matrix
- [
- Right, (x, y, z, w)
- Up, (x, y, z, w)
- Forward, (x, y, z, w)
- Translation, (x, y, z, w)
- ]
- Matrix.Identity
- [
- 1 0 0 0
- 0 1 0 0
- 0 0 1 0
- 0 0 0 1
- ]
- przesuniecia, skalowanie, obrót
- wspolrzędne jednorodne
- P ( x, y , z ) - P ( x, y, z, 1)
- przesuniecie
- x' = x + tx (tx - wartość przesunięcia)
- y' = y + ty
- z' = z + tz
- [
- 1 0 0 0
- 0 1 0 0
- 0 0 1 0
- tx, ty, tz, 1
- ]
- Matrix.CreateTranslation - paremetr wejsciowy - wektor przesuniecia
- skalowanie
- x' = sx x ( s - wspolczynnik skalowania )
- y' = sy y ( s - wspolczynnik skalowania )
- z' = sz z ( s - wspolczynnik skalowania )
- [
- sx 0 0 0
- 0 sx 0 0
- 0 0 sz 0
- 0 0 0 1
- ]
- Matrix.createScale
- obroty - os x
- x' x
- y' = ycos(alfa) - zsin(alf)
- z' = ysin(alfa) + zcos(alf)
- [
- sx 0 0 0
- 0 cos() sin() 0
- 0 -sin() cos() 0
- 0 0 0 1
- ]
- Matrix.CrateRotationX ( kąt w radianach )
- MathHelper.ToRadians
- CreateRotationY
- CreateRotationZ
- inne reprezentacje obrotow
- macierzy rotacje
- kąty eulera - yaw, pitch, roll
- kwaterniony
- Matrix.CreateFromYawPitchRoll(y, p, r)
- Matrix rotation = Matrix.CreateFromYawPitchRoll(y, p, r)
- Vector3 pointNew = Vector3.Transform(pointOld, rotation)
- Quaternion.CreateFromYawPitchRoll(y, p, r)
- Matrix result = Matrix.CreateRotationZ(angle) * Matrix.createTranslation(position);
- // albo Matrix.Multiply
- macierz swiata, widoku, projekcie
- widok - pozycja obserwatora ( kamera ) , pozycje, kierunek ( world, view, projection)
- projekcja - jak głęboko widzi macierz, początek koniec
- // srodek sceny
- worldMatrix = Matrx.Identity
- worldMatrix = Matrix.CreateRotation(new Vector3( 1, 1, 1));
- Matrix.createLookAt - definiowanie połozenia kamery ( vector3 pozycja kamery, Vector3 punkt gdzie patrzy, Vector3 gora kamery jak jest skierowana - orientacja kamery)
- // projekcja
- CreatePerspectiveFieldOfView(
- fieldOfView - pole widzenia kamerty - najczesniej 45 stopni,
- aspectRation - proporcje ekranu ( 1.77 - 16:9, Viewport.aspectRAtio )
- nearPlaceDistance - przednia odcinajaca plaszczyzna
- farPlaneDistance - tylna -||-
- ) - zaklada obserwatora w punkcie poza plaszczyzna obrazu - widok perspektywiczny
- CreateOrtographic() - rzut punktu na plaszczyzne - widok ortogonalny
- Notatki BY Kamil
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement