XNA - plynulé otočení – .NET – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

XNA - plynulé otočení – .NET – Fórum – Programujte.comXNA - plynulé otočení – .NET – Fórum – Programujte.com

 

Matěj Andrle+1
Grafoman
14. 8. 2014   #1
-
0
-

Dobrý den,
takto napevno vykresluji 13 políček od hráče:

static readonly Matrix[] view =
{
// base => depth 0
new Matrix(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -40, -40, -48, 1),
new Matrix(0, 0, 1, 0, 0, 1, 0, 0, -1, 0, 0, 0, 40, -40, -48, 1),
new Matrix(-1, 0, 0, 0, 0, 1, 0, 0, 0, 0, -1, 0, 40, -40, 32, 1),
new Matrix(0, 0, -1, 0, 0, 1, 0, 0, 1, 0, 0, 0, -40, -40, 32, 1),
// base X - 1 => depth 0
new Matrix(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -120, -40, -48, 1),
new Matrix(0, 0, 1, 0, 0, 1, 0, 0, -1, 0, 0, 0, -40, -40, -48, 1),
new Matrix(-1, 0, 0, 0, 0, 1, 0, 0, 0, 0, -1, 0, -40, -40, 32, 1),
new Matrix(0, 0, -1, 0, 0, 1, 0, 0, 1, 0, 0, 0, -120, -40, 32, 1),
// base X + 1 => depth 0
new Matrix(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 40, -40, -48, 1),
new Matrix(0, 0, 1, 0, 0, 1, 0, 0, -1, 0, 0, 0, 120, -40, -48, 1),
new Matrix(-1, 0, 0, 0, 0, 1, 0, 0, 0, 0, -1, 0, 120, -40, 32, 1),
new Matrix(0, 0, -1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 40, -40, 32, 1),
// base Z + 1 => depth 1
new Matrix(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -40, -40, -128, 1),
new Matrix(0, 0, 1, 0, 0, 1, 0, 0, -1, 0, 0, 0, 40, -40, -128, 1),
new Matrix(-1, 0, 0, 0, 0, 1, 0, 0, 0, 0, -1, 0, 40, -40, -48, 1),
new Matrix(0, 0, -1, 0, 0, 1, 0, 0, 1, 0, 0, 0, -40, -40, -48, 1),
// base X - 1 => depth 1
new Matrix(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -120, -40, -128, 1),
new Matrix(0, 0, 1, 0, 0, 1, 0, 0, -1, 0, 0, 0, -40, -40, -128, 1),
new Matrix(-1, 0, 0, 0, 0, 1, 0, 0, 0, 0, -1, 0, -40, -40, -48, 1),
new Matrix(0, 0, -1, 0, 0, 1, 0, 0, 1, 0, 0, 0, -120, -40, -48, 1),
// base X - 2 => depth 1
new Matrix(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -200, -40, -128, 1),
new Matrix(0, 0, 1, 0, 0, 1, 0, 0, -1, 0, 0, 0, -120, -40, -128, 1),
new Matrix(-1, 0, 0, 0, 0, 1, 0, 0, 0, 0, -1, 0, -120, -40, -48, 1),
new Matrix(0, 0, -1, 0, 0, 1, 0, 0, 1, 0, 0, 0, -200, -40, -48, 1),
// base X + 1 => depth 1
new Matrix(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 40, -40, -128, 1),
new Matrix(0, 0, 1, 0, 0, 1, 0, 0, -1, 0, 0, 0, 120, -40, -128, 1),
new Matrix(-1, 0, 0, 0, 0, 1, 0, 0, 0, 0, -1, 0, 120, -40, -48, 1),
new Matrix(0, 0, -1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 40, -40, -48, 1),
// base X + 2 => depth 1
new Matrix(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 120, -40, -128, 1),
new Matrix(0, 0, 1, 0, 0, 1, 0, 0, -1, 0, 0, 0, 200, -40, -128, 1),
new Matrix(-1, 0, 0, 0, 0, 1, 0, 0, 0, 0, -1, 0, 200, -40, -48, 1),
new Matrix(0, 0, -1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 120, -40, -48, 1),
// base Z + 2 => depth 2
new Matrix(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -40, -40, -208, 1),
new Matrix(0, 0, 1, 0, 0, 1, 0, 0, -1, 0, 0, 0, 40, -40, -208, 1),
new Matrix(-1, 0, 0, 0, 0, 1, 0, 0, 0, 0, -1, 0, 40, -40, -128, 1),
new Matrix(0, 0, -1, 0, 0, 1, 0, 0, 1, 0, 0, 0, -40, -40, -128, 1),
// base X - 1 => depth 2
new Matrix(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -120, -40, -208, 1),
new Matrix(0, 0, 1, 0, 0, 1, 0, 0, -1, 0, 0, 0, -40, -40, -208, 1),
new Matrix(-1, 0, 0, 0, 0, 1, 0, 0, 0, 0, -1, 0, -40, -40, -128, 1),
new Matrix(0, 0, -1, 0, 0, 1, 0, 0, 1, 0, 0, 0, -120, -40, -128, 1),
// base X - 2 => depth 2
new Matrix(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, -200, -40, -208, 1),
new Matrix(0, 0, 1, 0, 0, 1, 0, 0, -1, 0, 0, 0, -120, -40, -208, 1),
new Matrix(-1, 0, 0, 0, 0, 1, 0, 0, 0, 0, -1, 0, -120, -40, -128, 1),
new Matrix(0, 0, -1, 0, 0, 1, 0, 0, 1, 0, 0, 0, -200, -40, -128, 1),
// base X + 1 => depth 2
new Matrix(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 40, -40, -208, 1),
new Matrix(0, 0, 1, 0, 0, 1, 0, 0, -1, 0, 0, 0, 120, -40, -208, 1),
new Matrix(-1, 0, 0, 0, 0, 1, 0, 0, 0, 0, -1, 0, 120, -40, -128, 1),
new Matrix(0, 0, -1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 40, -40, -128, 1),
// base X + 2 => depth 2
new Matrix(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 120, -40, -208, 1),
new Matrix(0, 0, 1, 0, 0, 1, 0, 0, -1, 0, 0, 0, 200, -40, -208, 1),
new Matrix(-1, 0, 0, 0, 0, 1, 0, 0, 0, 0, -1, 0, 200, -40, -128, 1),
new Matrix(0, 0, -1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 120, -40, -128, 1)
};


Výsledek:

Připojen obrázek.


Pohoda. Otočím se vpravo:

Připojen obrázek.


Pohoda. Jenže chtěl bych vložit ještě 7 meziroků. Bál jsem se, že tento fixní model to neumožní. Jenže vzápětí si uvědomuji, že mohu pracovat s Worldem. A také že ano - daří se mi tím měnit pozici a otočení celého světa. Nedaří se mi však vytvořit těch 7 kroků. Mám problém udělat Matrix otočení o Pí * (1/7 * 0.5). Zatím jsem udělal pole ostrého otočení - 90°:

public static Matrix[,] worlds = new Matrix[,]
{
	{
		new Matrix(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1),
		new Matrix(0, 0, 1, 0, 0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 1),
		new Matrix(0, 0, 1, 0, 0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 1),
		new Matrix(0, 0, 1, 0, 0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 1),
		new Matrix(0, 0, 1, 0, 0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 1),
		new Matrix(0, 0, 1, 0, 0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 1),
		new Matrix(0, 0, 1, 0, 0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 1),
		new Matrix(0, 0, 1, 0, 0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 1)
	},
	{
		new Matrix(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1),
		new Matrix(0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 1),
		new Matrix(0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 1),
		new Matrix(0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 1),
		new Matrix(0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 1),
		new Matrix(0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 1),
		new Matrix(0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 1),
		new Matrix(0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, 0, 0, 0, 0, 1)
	}
};


Jedno vlevo, druhé vpravo. Funguje jen vlevo - a to hodně divně. Prosím - jak mám zjistit správné hodnoty pro každý mezikrok? (v poli je pro pravo i levo kroků 8 - to proto, že nultý krok je již cíl)
Děkuji!

Nahlásit jako SPAM
IP: 78.136.152.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 13 hostů

Podobná vlákna

Plynulé přepisování času — založil Cpp_Amater

Otoceni brushe — založil CommanderZ

Otočení textu — založil sirek

Matice otoceni — založil Radulinka

Otočení- rotace — založil Klobma

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý