C# Snabbreferens
  • C# snabbreferens
  • Lathund: Skapa projekt
  • Lathund: koda i konsolen
  • Lathund: koda i WPF
  • Kompilering och publicering
  • Externa resurser
  • Grundläggande
    • Datatyper […]
      • String
      • Tuples
      • Enum
    • Fel
    • Typkonvertering
    • Operatorer
    • Boolska satser
    • Konsolen (Console)
    • If-satser
    • Loopar
    • Listor och arrayer
    • Slump (Random)
    • Strings
    • Metoder
    • Använda bibliotek (using)
    • Delegates, events och lambdas
    • Matematik (Math)
    • Vektorer (Numerics)
    • Datum och tid
    • Try-catch och Exception
    • Namngivning
    • Begrepp
    • Reference vs value types
    • Projektstruktur
    • Dotnet i terminalen
  • Filhantering
    • Filsökvägar
    • Läsa och skriva
    • Filer och mappar
    • Open, close, using
    • Serialisering […]
      • JSON-serialisering
      • XML-serialisering
    • Resursfiler
    • Filformat
      • JSON
  • Klasser och objektorientering
    • Översikt objektorientering
    • Lathund för klassdesign
    • Klasser och instanser
    • Struct
    • Public, private och protected
    • Klassdiagram
    • Klassmetoder
    • Konstruktorer
    • Arv
    • Komposition
    • Inkapsling och properties
    • Static
    • Polymorfism […]
      • Virtual, override
    • Generiska klasser
    • Abstract
    • Interface
    • Attribut
  • Annat
    • RayLib […]
      • Raylib setup
      • Fönster i Raylib
      • Grundläggande grafik
      • Geometriska former
      • Bilder och texturer
        • Texture
        • Image
      • Input
      • Text
      • Rectangle
      • Kollisioner
      • Kamera
      • Ljud
      • Raylib-CSharp*
    • MonoGame […]
      • Monogame-projekt*
      • MCGB Editor*
      • Input*
      • Grafik*
      • Kollisioner
      • Ljud*
    • Nätverk och internet […]
      • CRUD, HTTP och REST
      • URL:er och REST
      • RESTful client*
      • Thunder
      • RESTful server (Minimal API)
        • Swagger och OpenAPI
      • RESTful server (Web API) […]
        • Controllers
        • Models/dataklasser
        • Tester med RESTer
    • Linq
      • Linq-metoder
      • Linq-queries
    • Databaser
      • SQLite-kommandon
      • SQLite och VSCode
      • C# och SQLite
      • Entity Framework Core
    • Threading
      • Thread
      • Task
    • Pseudokod och diagram
    • Windows UI
      • WPF
      • XAML*
      • WinUI*
  • Mjukvara
    • Dotnet SDK
    • Visual Studio Code […]
      • Extensions
      • Inställningar
      • Debugging
      • Snabbkommandon
      • Snippets
      • Felsökning
    • Git & GitHub […]
      • Git-begrepp
    • Andra verktyg
  • Tekniker
    • Begränsa input
    • Game states
    • Gå igenom en array (eller lista)
    • Länkade listor och andra strukturer
    • Ta bort saker ur listan man går igenom
    • 2D-spelbräden
    • Timers
  • CONTRIBUTING
Powered by GitBook
On this page
  • Width och height
  • Läsa in
  • LoadTexture()
  • LoadTextureFromImage()
  • Rita ut till skärmen
  • DrawTexture()
  • DrawTextureEx()
  • DrawTextureRec()
  • DrawTexturePro()
  • SetTextureFilter()

Was this helpful?

  1. Annat
  2. RayLib […]
  3. Bilder och texturer

Texture

PreviousBilder och texturerNextImage

Last updated 1 year ago

Was this helpful?

En Texture är en bild som är sparad i grafikkortets minne, och är redo att ritas ut på skärmen. Man kan skapa en Texture utifrån en eller läsa in en bildfil från hårddisken direkt.

Width och height

Varje texture har en width och en height.

Console.WriteLine($"Width: {goombaTexture.Width});
Console.WriteLine($"Height: {goombaTexture.Height});

Rectangle hitBox = new Rectangle(0, 0, goombaTexture.Width, goombaTexture.Height);

Läsa in

LoadTexture()

Läser in en bildfil och skapar en texture direkt från den.

Texture2D goombaTexture = Raylib.LoadTexture(@"goomba.png");

LoadTextureFromImage()

Skapar en ny texture baserat på en .

Texture2D heroTexture = Raylib.LoadTextureFromImage(originalImage);

Detta är alltså motsatsen till .

Rita ut till skärmen

DrawTexture()

Ritar ut en texture till fönstret.

// Ritar texturen heroTexture till fönstret, på x-position 40 och 
// y-position 300, utan infärgning (WHITE färgar inte)
Raylib.DrawTexture(heroTexture, 40, 300, Color.WHITE)

DrawTextureEx()

Rotationen anges i grader och skalningen i decimalform.

// Ritar texturen heroTexture till fönstret, på x-position 40 och 
// y-position 300, utan infärgning (WHITE färgar inte)
// Använd skalning 0.5 och rotation 0.
Vector2 position = new Vector2(40, 300);
Raylib.DrawTexture(heroTexture, position, 0, 0.5f, Color.WHITE)
using System.Numerics;

DrawTextureRec()

Ritar ut en del av en texture till fönstret. Fungerar som DrawTextureEx men utan rotationen och skalan, och med en rektangel som säger vilken del av texturen man vill klippa ut.

Rectangle source = new Rectangle(0, 0, 100, 100);
Vector2 position = new Vector(40, 300);

Raylib.DrawTextureRec(heroTexture, source, position, Color.WHITE);

Det här kan man bland annat använda sig av när man har en bild som är ett s.k. sprite sheet, där alla bildrutor i en karaktärs animation finns med. Man behöver då inte klippa upp animationen i en massa olika bildfiler utan kan istället använda DrawTexturePro för att kopiera en del av bilden till raylibfönstret i taget.

Man kan också ange en source-rektangel med negativ bredd eller höjd för att få en urklippt bild som är flippad längs x- eller y-axeln.

Rectangle source = new Rectangle(0, 0, -100, 100);
Vector2 position = new Vector(40, 300);

Raylib.DrawTextureRec(heroTexture, source, position, Color.WHITE);

DrawTexturePro()

En ännu mer avancerad version av DrawTexture. Här anges två rektanglar – en för källan, alltså vilken del av texturen som ska kopieras. Och så en för destinationen, alltså var någonstans på fönstret kopian ska placeras och hur stor den ska göras.

Dessutom anges en Vector2 för "origin", som är den position som ritandet och roterandet utgår från. Vill man rotera och skala en textur kring dess mittpunkt anger man alltså en Vector2 vars x- och y-värden är halva destination-rektangelns bredd och höjd.

Texture2D spriteSheet = Raylib.LoadTexture("herosheet.png");

// Det som ska kopieras från texturen är en ruta i storlek 64x64 pixlar från 
//  dess övre vänstra hörn (0,0)
Rectangle heroSpriteSource = new Rectangle(0,0,64,64);

// Hjältespriten ska ritas ut på position 200, 200 och förstoras upp till 256x256.
Rectangle heroSpriteDest = new Rectangle(200, 200, 256, 256);

// En Vector2 med halva destinationens bredd och höjd som x- och y-värde.
// Den räknas från destinationens övre vänstra hörn, så hamnar alltså i mitten av den.
Vector2 heroOrigin = new Vector2(
  heroSpriteDest.width / 2,
  heroSpriteDest.height / 2
);

float rotation = 0;

// ---

Raylib.DrawTexturePro(
  texture, 
  heroSpriteSource,
  heroSpriteDest,
  heroOrigin,
  rotation,
  Color.WHITE );

Bilden nedan visar principen:

SetTextureFilter()

I vanliga fall när man ritar ut en texture i en annan storlek än den är från början så skalas den med interpolering – den hittar på mjuka övergångar mellan originalpixlarna. Det fungerar bra för foton och liknande, men sämre för pixelart.

// Bestäm att texturen heroTexture ska skalas med "point"-filter, som ger skarp
// pixelart - ingen interpolering.
Raylib.SetTextureFilter(heroTexture, TextureFilter.TEXTURE_FILTER_POINT);

Ritar ut en texture till fönstret, med andra parametrar: En för att ange x och y-positionen den ska ritas ut på, och floats som anger rotation och skalning av texturen.

OBSERVERA: För att kunna använda så måste du lägga in detta bland dina using-statements:

Vector2
Image
Image
Vector2
LoadImageFromTexture()