Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
OpenTK (The Open Toolkit) je pokročilá a nízkoúrovňová knihovna C#, která usnadňuje práci s OpenGL, OpenCL a OpenAL. OpenTK lze použít pro hry, vědecké aplikace nebo jiné projekty, které vyžadují 3D grafiku, zvuk nebo výpočetní funkce. Tento článek obsahuje stručný úvod k používání OpenTK v aplikaci Xamarin.Mac.
V tomto článku se budeme zabývat základy OpenTK v aplikaci Xamarin.Mac. Důrazně doporučujeme, abyste si nejprve prošli článek Hello, Mac , konkrétně úvod do Xcode a Tvůrce rozhraní a výstupy a akce , protože se zabývá klíčovými koncepty a technikami, které budeme používat v tomto článku.
Možná se také budete chtít podívat na oddíly v dokumentu Interní dokumenty Xamarin.Mac pro zveřejnění tříd a metodObjective-Cjazyka C#. Vysvětluje také, které Register příkazy a Export které se používají k připojení tříd jazyka C# k Objective-C objektům a prvkům uživatelského rozhraní.
O openTK
Jak je uvedeno výše, OpenTK (The Open Toolkit) je pokročilá a nízkoúrovňová knihovna jazyka C#, která usnadňuje práci s OpenGL, OpenCL a OpenAL. Použití OpenTK v aplikaci Xamarin.Mac poskytuje následující funkce:
- Rychlý vývoj – OpenTK poskytuje silné datové typy a vloženou dokumentaci ke zlepšení pracovního postupu psaní kódu a snadnějšímu a rychlejšímu zachycení chyb.
- Snadná integrace – OpenTK byl navržen tak, aby se snadno integroval s aplikacemi .NET.
- Permissive License – OpenTK se distribuuje v rámci licencí MIT/X11 a je zcela zdarma.
- Bohaté vazby typu Sejf – OpenTK podporuje nejnovější verze OpenGL, OpenGL|ES, OpenAL a OpenCL s automatickým načítáním rozšíření, kontrolou chyb a vloženou dokumentací.
- Flexibilní možnosti grafického uživatelského rozhraní – OpenTK poskytuje nativní vysoce výkonné herní okno navržené speciálně pro hry a Xamarin.Mac.
- Plně spravovaný kód kompatibilní se specifikací CLS – OpenTK podporuje 32bitové a 64bitové verze systému macOS bez nespravovaných knihoven.
- 3D Math Toolkit OpenTK dodává ,
VectorMatrixQuaternionaBezierstruktury prostřednictvím 3D Math Toolkit.
OpenTK lze použít pro hry, vědecké aplikace nebo jiné projekty, které vyžadují 3D grafiku, zvuk nebo výpočetní funkce.
Další informace najdete na webu Open Toolkit .
Rychlý start openTK
Jako rychlý úvod k použití OpenTK v aplikaci Xamarin.Mac vytvoříme jednoduchou aplikaci, která otevře herní zobrazení, vykreslí jednoduchý trojúhelník v tomto zobrazení a připojí herní zobrazení k hlavnímu okně aplikace Mac, aby se zobrazil trojúhelník uživateli.
Spuštění nového projektu
Spusťte Visual Studio pro Mac a vytvořte nové řešení Xamarin.Mac. Vyberte aplikaci Mac>General>Cocoa App:>
Zadejte MacOpenTK název projektu:
Kliknutím na tlačítko Vytvořit sestavíte nový projekt.
Zahrnutí openTK
Než budete moct použít Open TK v aplikaci Xamarin.Mac, musíte zahrnout odkaz na sestavení OpenTK. V Průzkumník řešení klikněte pravým tlačítkem myši na složku Reference a vyberte Upravit odkazy....
Umístěte kontrolu a OpenTK klikněte na tlačítko OK :
Použití OpenTK
Po vytvoření nového projektu poklikejte na MainWindow.cs soubor v Průzkumník řešení ho otevřete pro úpravy. Udělejte třídu MainWindow takto:
using System;
using System.Drawing;
using OpenTK;
using OpenTK.Graphics;
using OpenTK.Graphics.OpenGL;
using OpenTK.Platform.MacOS;
using Foundation;
using AppKit;
using CoreGraphics;
namespace MacOpenTK
{
public partial class MainWindow : NSWindow
{
#region Computed Properties
public MonoMacGameView Game { get; set; }
#endregion
#region Constructors
public MainWindow (IntPtr handle) : base (handle)
{
}
[Export ("initWithCoder:")]
public MainWindow (NSCoder coder) : base (coder)
{
}
#endregion
#region Override Methods
public override void AwakeFromNib ()
{
base.AwakeFromNib ();
// Create new Game View and replace the window content with it
Game = new MonoMacGameView(ContentView.Frame);
ContentView = Game;
Game.OpenGLContext.View = Game;
// Wire-up any required Game events
Game.Load += (sender, e) =>
{
// TODO: Initialize settings, load textures and sounds here
};
Game.Resize += (sender, e) =>
{
// Adjust the GL view to be the same size as the window
GL.Viewport(0, 0, Game.Size.Width, Game.Size.Height);
};
Game.UpdateFrame += (sender, e) =>
{
// TODO: Add any game logic or physics
};
Game.RenderFrame += (sender, e) =>
{
// Setup buffer
GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);
GL.MatrixMode(MatrixMode.Projection);
// Draw a simple triangle
GL.LoadIdentity();
GL.Ortho(-1.0, 1.0, -1.0, 1.0, 0.0, 4.0);
GL.Begin(BeginMode.Triangles);
GL.Color3(Color.MidnightBlue);
GL.Vertex2(-1.0f, 1.0f);
GL.Color3(Color.SpringGreen);
GL.Vertex2(0.0f, -1.0f);
GL.Color3(Color.Ivory);
GL.Vertex2(1.0f, 1.0f);
GL.End();
};
// Run the game at 60 updates per second
Game.Run(60.0);
}
#endregion
}
}
Pojďme si tento kód podrobně projít níže.
Požadovaná rozhraní API
K použití OpenTK ve třídě Xamarin.Mac je potřeba několik odkazů. Na začátku definice jsme zahrnuli následující using příkazy:
using System;
using System.Drawing;
using OpenTK;
using OpenTK.Graphics;
using OpenTK.Graphics.OpenGL;
using OpenTK.Platform.MacOS;
using Foundation;
using CoreGraphics;
Tato minimální sada bude vyžadována pro všechny třídy používající OpenTK.
Přidání zobrazení hry
Dále musíme vytvořit zobrazení hry, které bude obsahovat všechny naše interakce s OpenTK a zobrazit výsledky. Použili jsme následující kód:
public MonoMacGameView Game { get; set; }
...
// Create new Game View and replace the window content with it
Game = new MonoMacGameView(ContentView.Frame);
ContentView = Game;
Tady jsme vytvořili zobrazení hry stejnou velikost jako hlavní okno Mac a nahradili zobrazení obsahu okna novým MonoMacGameView. Vzhledem k tomu, že jsme nahradili existující obsah okna, změní se velikost zobrazení při změně velikosti hlavního okna automaticky.
Reakce na události
Existuje několik výchozích událostí, na které by každé zobrazení hry mělo reagovat. V této části se budeme zabývat hlavními požadovanými událostmi.
Událost načtení
Událost Load je místo pro načtení prostředků z disku, jako jsou obrázky, textury nebo hudba. Pro naši jednoduchou testovací aplikaci nepoužíváme Load událost, ale zahrnuli jsme ji pro referenci:
Game.Load += (sender, e) =>
{
// TODO: Initialize settings, load textures and sounds here
};
Událost změny velikosti
Událost Resize by se měla volat při každé změně velikosti zobrazení hry. Pro naši ukázkovou aplikaci vytváříme GL Viewport stejnou velikost jako zobrazení hry (což je automaticky změněno hlavním oknem Mac) s následujícím kódem:
Game.Resize += (sender, e) =>
{
// Adjust the GL view to be the same size as the window
GL.Viewport(0, 0, Game.Size.Width, Game.Size.Height);
};
Událost aktualizačního rámce
Událost UpdateFrame se používá ke zpracování uživatelského vstupu, aktualizaci pozic objektů, spouštění fyziky nebo výpočtů umělé inteligence. Pro naši jednoduchou testovací aplikaci nepoužíváme UpdateFrame událost, ale zahrnuli jsme ji pro referenci:
Game.UpdateFrame += (sender, e) =>
{
// TODO: Add any game logic or physics
};
Důležité
Implementace openTK Xamarin.Mac nezahrnuje Input APIrozhraní API, takže budete muset použít rozhraní API poskytovaná společností Apple pro přidání klávesnice a podpory myši. Volitelně můžete vytvořit vlastní instanci MonoMacGameView a přepsat metody a KeyUp metodyKeyDown.
Událost RenderFrame
Událost RenderFrame obsahuje kód, který slouží k vykreslení (kreslení) grafiky. V naší ukázkové aplikaci vyplňujeme zobrazení hry jednoduchým trojúhelníkem:
Game.RenderFrame += (sender, e) =>
{
// Setup buffer
GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);
GL.MatrixMode(MatrixMode.Projection);
// Draw a simple triangle
GL.LoadIdentity();
GL.Ortho(-1.0, 1.0, -1.0, 1.0, 0.0, 4.0);
GL.Begin(BeginMode.Triangles);
GL.Color3(Color.MidnightBlue);
GL.Vertex2(-1.0f, 1.0f);
GL.Color3(Color.SpringGreen);
GL.Vertex2(0.0f, -1.0f);
GL.Color3(Color.Ivory);
GL.Vertex2(1.0f, 1.0f);
GL.End();
};
Kód vykreslení obvykle bude s voláním GL.Clear odebrat všechny existující prvky před vykreslením nových prvků.
Důležité
Pro verzi OpenTK Xamarin.Mac nevolajíSwapBuffers metodu vaší MonoMacGameView instance na konci kódu vykreslování. Tím dojde k rychlému strobe zobrazení hry místo zobrazení vykresleného zobrazení.
Spuštění zobrazení hry
Se všemi požadovanými událostmi definujeme a zobrazení hry připojené k hlavnímu okně Mac naší aplikace, přečteme si, abychom spustili zobrazení hry a zobrazili naši grafiku. Použijte následující kód:
// Run the game at 60 updates per second
Game.Run(60.0);
Předáváme požadovanou frekvenci snímků, na kterou chceme aktualizovat zobrazení hry, v našem příkladu jsme vybrali 60 snímky za sekundu (stejná frekvence aktualizace jako normální televize).
Pojďme spustit naši aplikaci a podívat se na výstup:
Pokud změníme velikost okna, bude se také nacházet zobrazení hry a trojúhelník se změní a aktualizuje se i v reálném čase.
Kde na další?
Se základy práce s OpenTk v aplikaci Xamarin.mac jsou hotové, tady je několik návrhů, co si vyzkoušet dál:
- Zkuste změnit barvu trojúhelníku a barvu pozadí herního zobrazení v
Loadudálostech aRenderFrameudálostech. - Změňte barvu trojúhelníku, když uživatel stiskne klávesu v
UpdateFrameudálostech aRenderFrameudálosti nebo nastaví vlastníMonoMacGameViewtřídu a přepíšeKeyUpaKeyDownmetody. - Nastavte trojúhelník přes obrazovku pomocí kláves s vědomím
UpdateFramev události. Tip: PomocíMatrix4.CreateTranslationmetody vytvořte matici překladu a zavolejte metoduGL.LoadMatrixRenderFrame, která ji načte v události. forPomocí smyčky můžete vRenderFrameudálosti vykreslit několik trojúhelníků.- Otočte kameru, abyste získali jiný pohled na trojúhelníček ve 3D prostoru. Tip: Pomocí
Matrix4.CreateTranslationmetody vytvořte matici překladu a zavolejte metoduGL.LoadMatrix, která ji načte. Můžete také použítVector2,Vector3Vector4aMatrix4třídy pro manipulaci s kamerou.
Další příklady najdete v úložišti GitHub s ukázkami OpenTK. Obsahuje oficiální seznam příkladů použití OpenTK. Tyto příklady budete muset přizpůsobit pro použití s verzí Xamarin.Mac openTK.
Shrnutí
Tento článek se rychle podíval na práci s OpenTK v aplikaci Xamarin.Mac. Viděli jsme, jak vytvořit herní okno, jak připojit herní okno k okně Mac a jak vykreslit jednoduchý obrazec v okně Hry.



