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:
Pohoda. Otočím se vpravo:
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!