úloha 038: Uživatelské rozhraní pro otáčení 3D objektem

Trackball aplikace

Úvod: cílem je vytvořit uživatelské rozhraní pro otáčení 3D objektem. Chceme, aby si uživatel mohl pomocí myši pohodlně prohlížet objekt, podobně jako např. v 3D Studiu, Blenderu, nebo při vizualizaci medicínských dat. Měl by mít především možnost objektem libovolně a intuitivně otáčet a objekt si rozumně přibližovat a oddalovat. Podívejte se na ilustrativní video.

Podstata úlohy: problém se typicky řeší tak, že si kolem manipulovaného objektu představíme kouli (trackball), se kterou je objekt pevně spojený. Uživatel na kouli kliknutím vybere bod a táhnutím myši po obrazovce určuje jeho novou pozici. Podstatou řešení je tedy určit které body na kouli odpovídají počátku a konci přetahování a určit z nich osu rotace. Technické detaily lze odvodit na papíře, nebo najít na
Implementace: jako kostru aplikace použijte projekt 038trackball z repository grcis. Ta vykresluje jednoduchou 6-barevnou kostku nebo scénu načtenou z OBJ souboru. Nejspíš budete chtít předělat některé z těchto metod:

Různé kurzory myši můžete nastavit pomocí Cursor.Current = Cursors.Hand a Cursor.Current = Cursors.Default. Rotační matice se dá sestrojit pomocí Matrix4.CreateFromAxisAngle, quaterniony můžete a nemusíte použít. Velikost okna v pixelech zjístíte pomocí glControl1.Width a glControl1.Height.

Dodefinování rozhraní mimo trackball: zašktnutá volba "restrict to trackball": je-li myš mimo trackball, objekt se jenom natáčí za myší (hledá se nejbližší bod na trackballu). V opačném případě má platit: je-li myš mimo trackball, objekt se dál otáčí ve směru tažení. Když si uživatel sníží citlivost, může tak lépe využít zbytku obrazovky k otáčení, aniž by musel přehmatávat na druhou stranu trackballu.

Odevzdání: jako řešení úlohy posílejte mailem modifikovaný zdrojový soubor Trackball.cs. Pokud jste vymysleli nebo použili nějakou netradiční metodu, doplňte ji krátkým průvodním textem.

BODY: 6 až 14 + bonus:

TERMÍN: do 18. 12. 2011

PROJEKT: 038trackball

ZDROJOVÝ SOUBOR: Trackball.cs

ŘEŠENÍ POSÍLEJTE Honzovi Benešovi, do předmětu připište "038trackball".


[Cvičení NPGR003]  [Návody k zápočtům v C#]  [Přednášky a semináře]  [Odkazy na demonstrace]

Valid XHTML 1.1 Copyright (C) 2011 J.Pelikán, last change: $Date: 2014-10-03 15:44:39 +0200 (Fri, 03 Oct 2014) $
Send comments/requests to pepca.at.cgg.mff.cuni.cz