using System; using System.Collections.Generic; using System.Linq; using System.Text; using OpenGL4NET; using System.IO; using System.Runtime.InteropServices; using System.Drawing; using System.Windows.Forms; namespace ZPG_semestralka { class Dum { // pole vrcholů pro jednolivé objekty VrcholANormala[] vrcholTexturaZdi, vrcholTexturaDvere, vrcholTexturaOkna, vrcholTexturaStit, vrcholTexturaStrecha, vrcholTexturaPodhledy;//,vrcholTexturaPlot; VrcholANormala[] vrcholTexturaVrata, vrcholTexturaCislaNaDvere, vrcholTexturaZamkovka, vrcholTexturaPodlaha, vrcholTexturaChodnik,vrcholTexturaSilnice; VrcholANormala[] vrcholTexturaPlot = new VrcholANormala[0]; uint[] indexZdi, indexDvere, indexOkna ,indexStit ,indexStrecha, indexPodhledy,indexVrata, indexCislaNaDvere,indexZamkovka,indexPodlaha; uint[] indexChodnik, indexSilnice, indexPlot; // Buffery pro jednotlivé textury uint vertexZdiBuff, indexZdiBuff, vertexDvereBuff, indexDvereBuff, vertexOknaBuff, indexOknaBuff, vertexStitBuff, indexStitBuff; uint vertexStrechaBuff, indexStrechaBuff, vertexPodhledyBuff, indexPodhledyBuff,vertexVrataBuff, indexVrataBuff, indexPodlahaBuff; uint vertexCislaNaDvereBuff, indexCislaNaDvereBuff, vertexZamkovkaBuff, indexZamkovkaBuff, vertexPodlahaBuff, indexChodnikBuff, vertexChodnikBuff; uint vertexSilniceBuff, indexSilniceBuff, vertexPlotBuff, indexPlotBuff; // pole textur uint [] textury = new uint[12]; // pole neprůchodných stěn Vector4[] steny = new Vector4[8]; // velikost a pozice Domu float poziceX; float poziceY; float poziceZ; float sirkaX; float hlobkaY; float vyskaZ; // pozice Dveří a Vrat na domě float poziceDvere1X1; float poziceDvere1Y1; float poziceDvere1X2; float poziceDvere1Y2; float poziceVrataX1; float poziceVrataY1; float poziceVrataX2; float poziceVrataY2; // číslo klíče které otevírá dané dveře public int klicNaDvere1; // pozice čísla dveří Vector4 cisloNaDvere1; // Obsluha dveří public bool odevriVrata = false; public bool zahejnoOtevirani = true; public float casDoOtevreni = 0; public float casDoZavreni = 0; public float casZmeny = 0; public bool zavrenoOtevreno = false; public bool zavriVrata = false; public bool zahejnoZavirani = true; public float casZmenyZ = 0; Vector4 dvere1; bool dvereOtevreny1 = false; bool jsemVDome = false; int pocetNarazenychSten = 0; public int nalezenej = -1; Time cas; float koficientNarazu = (float)0.75; float odsazeni = (float)-0.01; public Dum(float poziceX, float poziceY, float poziceZ, float sirkaX, float hlobkaY, float vyskaZ, int klicNaDvere1) { cisloNaDvere1 = GLW.vratPozTexCisla(klicNaDvere1); cas = new Time(); steny[0] = new Vector4(poziceX-koficientNarazu, poziceY-koficientNarazu, sirkaX+2*koficientNarazu,2*koficientNarazu); steny[1] = new Vector4(poziceX +sirkaX - koficientNarazu, poziceY - koficientNarazu, 2 * koficientNarazu, hlobkaY+ 2*koficientNarazu); steny[2] = new Vector4(poziceX - koficientNarazu, poziceY+hlobkaY - koficientNarazu, sirkaX +2 * koficientNarazu, 2 * koficientNarazu); steny[3] = new Vector4(poziceX - koficientNarazu, poziceY + hlobkaY -5, 2 * koficientNarazu, 5+ koficientNarazu); steny[4] = new Vector4(poziceX - koficientNarazu, poziceY - koficientNarazu, 2 * koficientNarazu, 1 + koficientNarazu); steny[7] = new Vector4(poziceX - koficientNarazu, poziceY +1 , 2 * koficientNarazu, 3 ); steny[6] = new Vector4(poziceX - koficientNarazu, poziceY + 4, 2 * koficientNarazu, 2 ); dvere1 = new Vector4(poziceX - koficientNarazu, poziceY +6 - koficientNarazu, 2 * koficientNarazu, 1 + 2*koficientNarazu); steny[5] = dvere1; this.klicNaDvere1 = klicNaDvere1; this.poziceX = poziceX; this.poziceY = poziceY; this.poziceZ = poziceZ; this.sirkaX = sirkaX; this.hlobkaY = hlobkaY; this.vyskaZ = vyskaZ; this.poziceDvere1Y1 = poziceY + 6; this.poziceDvere1Y2 = poziceY + 7; this.poziceDvere1X1 = poziceX + odsazeni; this.poziceDvere1X2 = poziceX + odsazeni; this.poziceVrataY1 = poziceY + 1; this.poziceVrataY2 = poziceY + 4; this.poziceVrataX1 = poziceX + odsazeni; this.poziceVrataX2 = poziceX + odsazeni; indexZdi = new uint[]{ 0,1,3,2, 4,5,7,6, 8,9,11,10, 12,13,15,14, 16,17,19,18 , 20,21,23,22 , 24,25,27,26, 28,29,31,30 }; indexDvere = new uint[] { 0, 1, 3, 2, 4, 5, 7, 6 }; indexVrata = new uint[] { 0, 1, 3, 2, }; indexOkna = new uint[] { 0, 1, 3, 2, 4, 5, 7, 6, 8, 9, 11, 10, 12, 13, 15, 14, 16, 17, 19, 18, 20, 21, 23, 22, }; indexStit = new uint[] { 0, 1, 2,3 ,4 ,5}; indexStrecha = new uint[] { 0, 1, 3, 2, 4, 5, 7, 6, }; indexPodhledy = new uint[] { 0, 1, 3, 2, 4, 5, 7, 6, }; indexCislaNaDvere = new uint[] { 0, 1, 3, 2, }; indexZamkovka = new uint[] { 0, 1, 2, 3, 4, 5, 6, 7 }; indexPodlaha = new uint[] { 0, 1, 3,2 }; indexChodnik = new uint[] { 0, 1, 2, 3, 4, 5, 6, 7 }; vrcholTexturaZdi = new VrcholANormala[32]; vrcholTexturaDvere = new VrcholANormala[8]; vrcholTexturaVrata = new VrcholANormala[4]; vrcholTexturaOkna = new VrcholANormala[24]; vrcholTexturaStit = new VrcholANormala[6]; vrcholTexturaStrecha = new VrcholANormala[8]; vrcholTexturaPodhledy = new VrcholANormala[8]; vrcholTexturaCislaNaDvere = new VrcholANormala[4]; vrcholTexturaZamkovka = new VrcholANormala[8]; vrcholTexturaPodlaha = new VrcholANormala[4]; vrcholTexturaChodnik = new VrcholANormala[8]; //-------------------------------------------- Stěny domu vrcholTexturaZdi[0] = new VrcholANormala(poziceX, poziceY, poziceZ, (float)-1, (float)0, (float)0, (float)0, (float)1); vrcholTexturaZdi[1] = new VrcholANormala(poziceX, poziceY, poziceZ + vyskaZ, (float)-1, (float)0, (float)0, (float)0, (float)0); // zed vedle vrat vrcholTexturaZdi[2] = new VrcholANormala(poziceX, poziceY + 1, poziceZ, (float)-1, (float)0, (float)0, (float)0.2, (float)1); vrcholTexturaZdi[3] = new VrcholANormala(poziceX, poziceY + 1, poziceZ + vyskaZ, (float)-1, (float)0, (float)0, (float)0.2, (float)0); vrcholTexturaZdi[24] = new VrcholANormala(poziceX, poziceY + 4, poziceZ, (float)-1, (float)0, (float)0, (float)0, (float)1); vrcholTexturaZdi[25] = new VrcholANormala(poziceX, poziceY + 4, poziceZ + vyskaZ, (float)-1, (float)0, (float)0, (float)0, (float)0); // zed mezi vraty a dvermi vrcholTexturaZdi[26] = new VrcholANormala(poziceX, poziceY + 6, poziceZ, (float)-1, (float)0, (float)0, (float)0.2, (float)1); vrcholTexturaZdi[27] = new VrcholANormala(poziceX, poziceY + 6, poziceZ + vyskaZ, (float)-1, (float)0, (float)0, (float)0.2, (float)0); vrcholTexturaZdi[28] = new VrcholANormala(poziceX, poziceY + 1, poziceZ + (float)2.5, (float)-1, (float)0, (float)0, (float)0, (float)1 / 6); vrcholTexturaZdi[29] = new VrcholANormala(poziceX, poziceY + 1, poziceZ + vyskaZ, (float)-1, (float)0, (float)0, (float)0, (float)0); // zed nad vraty vrcholTexturaZdi[30] = new VrcholANormala(poziceX, poziceY + 4, poziceZ + (float)2.5, (float)-1, (float)0, (float)0, (float)3 / 5, (float)1 / 6); vrcholTexturaZdi[31] = new VrcholANormala(poziceX, poziceY + 4, poziceZ + vyskaZ, (float)-1, (float)0, (float)0, (float)3 / 5, (float)0); vrcholTexturaZdi[16] = new VrcholANormala(poziceX, poziceY + 7, poziceZ, (float)-1, (float)0, (float)0, (float)0, (float)1); vrcholTexturaZdi[17] = new VrcholANormala(poziceX, poziceY + 7, poziceZ + vyskaZ, (float)-1, (float)0, (float)0, (float)0, (float)0); // zed za oknem vrcholTexturaZdi[18] = new VrcholANormala(poziceX, poziceY + 12, poziceZ, (float)-1, (float)0, (float)0, (float)0.834, (float)1); vrcholTexturaZdi[19] = new VrcholANormala(poziceX, poziceY + 12, poziceZ + vyskaZ, (float)-1, (float)0, (float)0, (float)0.834, (float)0); vrcholTexturaZdi[20] = new VrcholANormala(poziceX, poziceY + 7, poziceZ + 2, (float)-1, (float)0, (float)0, (float)0, (float)0.334); vrcholTexturaZdi[21] = new VrcholANormala(poziceX, poziceY + 7, poziceZ + vyskaZ, (float)-1, (float)0, (float)0, (float)0, (float)0); //----------zed nad dvermi vrcholTexturaZdi[22] = new VrcholANormala(poziceX, poziceY + 6, poziceZ + 2, (float)-1, (float)0, (float)0, (float)0.167, (float)0.334); vrcholTexturaZdi[23] = new VrcholANormala(poziceX, poziceY + 6, poziceZ + vyskaZ, (float)-1, (float)0, (float)0, (float)0.167, (float)0); vrcholTexturaZdi[4] = new VrcholANormala(poziceX, poziceY, poziceZ, (float)0, (float)-1, (float)0, (float)0, (float)1); vrcholTexturaZdi[5] = new VrcholANormala(poziceX, poziceY, poziceZ + vyskaZ, (float)0, (float)-1, (float)0, (float)0, (float)0); vrcholTexturaZdi[6] = new VrcholANormala(poziceX + sirkaX, poziceY, poziceZ, (float)0, (float)-1, (float)0, (float)1, (float)1); vrcholTexturaZdi[7] = new VrcholANormala(poziceX + sirkaX, poziceY, poziceZ + vyskaZ, (float)0, (float)-1, (float)0, (float)1, (float)0); vrcholTexturaZdi[8] = new VrcholANormala(poziceX+sirkaX, poziceY, poziceZ, (float)1, (float)0, (float)0, (float)0, (float)1); vrcholTexturaZdi[9] = new VrcholANormala(poziceX+sirkaX, poziceY, poziceZ+ vyskaZ, (float)1, (float)0, (float)0, (float)0, (float)0); vrcholTexturaZdi[10] = new VrcholANormala(poziceX+sirkaX, poziceY+hlobkaY, poziceZ, (float)1, (float)0, (float)0, (float)1, (float)1); vrcholTexturaZdi[11] = new VrcholANormala(poziceX+sirkaX, poziceY+hlobkaY, poziceZ+ vyskaZ, (float)1, (float)0, (float)0, (float)1, (float)0); vrcholTexturaZdi[12] = new VrcholANormala(poziceX+sirkaX, poziceY+hlobkaY, poziceZ, (float)0, (float)1, (float)0, (float)0, (float)1); vrcholTexturaZdi[13] = new VrcholANormala(poziceX + sirkaX, poziceY + hlobkaY, poziceZ + vyskaZ, (float)0, (float)1, (float)0, (float)0, (float)0); vrcholTexturaZdi[14] = new VrcholANormala(poziceX, poziceY+hlobkaY, poziceZ, (float)0, (float)1, (float)0, (float)1, (float)1); vrcholTexturaZdi[15] = new VrcholANormala(poziceX, poziceY+hlobkaY,poziceZ+ vyskaZ, (float)0, (float)1, (float)0, (float)1, (float)0); //---------------------------------------- DVERE vrcholTexturaDvere[0] = new VrcholANormala(poziceX + sirkaX - 2, poziceY + odsazeni, poziceZ, (float)0, (float)-1, (float)0, (float)0, (float)1); vrcholTexturaDvere[1] = new VrcholANormala(poziceX + sirkaX - 2, poziceY + odsazeni, poziceZ + 2, (float)0, (float)-1, (float)0, (float)0, (float)0); vrcholTexturaDvere[2] = new VrcholANormala(poziceX + sirkaX - 1, poziceY + odsazeni, poziceZ, (float)0, (float)-1, (float)0, (float)1, (float)1); vrcholTexturaDvere[3] = new VrcholANormala(poziceX + sirkaX - 1, poziceY + odsazeni, poziceZ + 2, (float)0, (float)-1, (float)0, (float)1, (float)0); vrcholTexturaDvere[4] = new VrcholANormala(poziceDvere1X1, poziceDvere1Y1, poziceZ, (float)-1, (float)0, (float)0, (float)0, (float)1); vrcholTexturaDvere[5] = new VrcholANormala(poziceDvere1X1, poziceDvere1Y1, poziceZ + 2, (float)-1, (float)0, (float)0, (float)0, (float)0); vrcholTexturaDvere[6] = new VrcholANormala(poziceDvere1X2, poziceDvere1Y2, poziceZ, (float)-1, (float)0, (float)0, (float)1, (float)1); vrcholTexturaDvere[7] = new VrcholANormala(poziceDvere1X2, poziceDvere1Y2, poziceZ + 2, (float)-1, (float)0, (float)0, (float)1, (float)0); //----------------------------------------CISLA NA DVERE vrcholTexturaCislaNaDvere[0] = new VrcholANormala(poziceDvere1X1 + odsazeni, poziceDvere1Y1 + (float)1.4, poziceZ + (float)1.60, (float)-1, (float)0, (float)0, (float)cisloNaDvere1.y, (float)cisloNaDvere1.w); vrcholTexturaCislaNaDvere[1] = new VrcholANormala(poziceDvere1X1 + odsazeni, poziceDvere1Y1 + (float)1.4, poziceZ + (float)1.75, (float)-1, (float)0, (float)0, (float)cisloNaDvere1.y, (float)cisloNaDvere1.z); vrcholTexturaCislaNaDvere[2] = new VrcholANormala(poziceDvere1X2 + odsazeni, poziceDvere1Y2 + (float)0.6, poziceZ + (float)1.60, (float)-1, (float)0, (float)0, (float)cisloNaDvere1.x, (float)cisloNaDvere1.w); vrcholTexturaCislaNaDvere[3] = new VrcholANormala(poziceDvere1X2 + odsazeni, poziceDvere1Y2 + (float)0.6, poziceZ + (float)1.75, (float)-1, (float)0, (float)0, (float)cisloNaDvere1.x, (float)cisloNaDvere1.z); //--------------------------------------- OKNA vrcholTexturaOkna[0] = new VrcholANormala(poziceX + sirkaX - 5, poziceY + odsazeni, poziceZ + 1, (float)0, (float)-1, (float)0, (float)0, (float)1); vrcholTexturaOkna[1] = new VrcholANormala(poziceX + sirkaX - 5, poziceY + odsazeni, poziceZ + 2, (float)0, (float)-1, (float)0, (float)0, (float)0); vrcholTexturaOkna[2] = new VrcholANormala(poziceX + sirkaX - 4, poziceY + odsazeni, poziceZ + 1, (float)0, (float)-1, (float)0, (float)1, (float)1); vrcholTexturaOkna[3] = new VrcholANormala(poziceX + sirkaX - 4, poziceY + odsazeni, poziceZ + 2, (float)0, (float)-1, (float)0, (float)1, (float)0); vrcholTexturaOkna[4] = new VrcholANormala(poziceX + 3, poziceY + odsazeni, poziceZ + 1, (float)0, (float)-1, (float)0, (float)0, (float)1); vrcholTexturaOkna[5] = new VrcholANormala(poziceX + 3, poziceY + odsazeni, poziceZ + 2, (float)0, (float)-1, (float)0, (float)0, (float)0); vrcholTexturaOkna[6] = new VrcholANormala(poziceX + 4, poziceY + odsazeni, poziceZ + 1, (float)0, (float)-1, (float)0, (float)1, (float)1); vrcholTexturaOkna[7] = new VrcholANormala(poziceX + 4, poziceY + odsazeni, poziceZ + 2, (float)0, (float)-1, (float)0, (float)1, (float)0); //-------------------------------------------- DvojOkno vrcholTexturaOkna[8] = new VrcholANormala(poziceX + odsazeni, poziceY + 11, poziceZ + 1, (float)-1, (float)0, (float)0, (float)0, (float)1); vrcholTexturaOkna[9] = new VrcholANormala(poziceX + odsazeni, poziceY + 11, (float)(poziceZ + 2.5), (float)-1, (float)0, (float)0, (float)0, (float)0); vrcholTexturaOkna[10] = new VrcholANormala(poziceX + odsazeni, poziceY + 10, poziceZ + 1, (float)-1, (float)0, (float)0, (float)0.854, (float)1); vrcholTexturaOkna[11] = new VrcholANormala(poziceX + odsazeni, poziceY + 10, (float)(poziceZ + 2.5), (float)-1, (float)0, (float)0, (float)0.854, (float)0); vrcholTexturaOkna[12] = new VrcholANormala(poziceX + odsazeni, poziceY + 9, poziceZ + 1, (float)-1, (float)0, (float)0, (float)0, (float)1); vrcholTexturaOkna[13] = new VrcholANormala(poziceX + odsazeni, poziceY + 9, (float)(poziceZ + 2.5), (float)-1, (float)0, (float)0, (float)0, (float)0); vrcholTexturaOkna[14] = new VrcholANormala(poziceX + odsazeni, poziceY + 10, poziceZ + 1, (float)-1, (float)0, (float)0, (float)0.854, (float)1); vrcholTexturaOkna[15] = new VrcholANormala(poziceX + odsazeni, poziceY + 10, (float)(poziceZ + 2.5), (float)-1, (float)0, (float)0, (float)0.854, (float)0); //----------------------------------------------- balkon - okno vrcholTexturaOkna[16] = new VrcholANormala(poziceX + 4, poziceY + odsazeni, poziceZ + 4, (float)0, (float)-1, (float)0, (float)0, (float)1); vrcholTexturaOkna[17] = new VrcholANormala(poziceX + 4, poziceY + odsazeni, poziceZ + 5, (float)0, (float)-1, (float)0, (float)0, (float)0); vrcholTexturaOkna[18] = new VrcholANormala(poziceX + 5, poziceY + odsazeni, poziceZ + 4, (float)0, (float)-1, (float)0, (float)1, (float)1); vrcholTexturaOkna[19] = new VrcholANormala(poziceX + 5, poziceY + odsazeni, poziceZ + 5, (float)0, (float)-1, (float)0, (float)1, (float)0); vrcholTexturaOkna[20] = new VrcholANormala(poziceX + 5, poziceY + odsazeni, poziceZ + 4, (float)0, (float)-1, (float)0, (float)0, (float)1); vrcholTexturaOkna[21] = new VrcholANormala(poziceX + 5, poziceY + odsazeni, poziceZ + 5, (float)0, (float)-1, (float)0, (float)0, (float)0); vrcholTexturaOkna[22] = new VrcholANormala(poziceX + 6, poziceY + odsazeni, poziceZ + 4, (float)0, (float)-1, (float)0, (float)1, (float)1); vrcholTexturaOkna[23] = new VrcholANormala(poziceX + 6, poziceY + odsazeni, poziceZ + 5, (float)0, (float)-1, (float)0, (float)1, (float)0); //---------------------------------------STIT 1, 2 vrcholTexturaStit[0] = new VrcholANormala(poziceX, poziceY, poziceZ + vyskaZ, (float)0, (float)-1, (float)0, (float)1, (float)1); vrcholTexturaStit[1] = new VrcholANormala(poziceX + sirkaX, poziceY, poziceZ + vyskaZ, (float)0, (float)-1, (float)0, (float)0, (float)1); vrcholTexturaStit[2] = new VrcholANormala(poziceX + sirkaX / 2, poziceY, (float)(poziceZ + vyskaZ + 2.5), (float)0, (float)-1, (float)0, (float)0.5, (float)0.5); vrcholTexturaStit[3] = new VrcholANormala(poziceX, poziceY+hlobkaY, poziceZ + vyskaZ, (float)0, (float)1, (float)0, (float)1, (float)1); vrcholTexturaStit[4] = new VrcholANormala(poziceX + sirkaX, poziceY + hlobkaY, poziceZ + vyskaZ, (float)0, (float)1, (float)0, (float)0, (float)1); vrcholTexturaStit[5] = new VrcholANormala(poziceX + sirkaX / 2, poziceY + hlobkaY, (float)(poziceZ + vyskaZ + 2.5), (float)0, (float)1, (float)0, (float)0.5, (float)0.5); //-------------------------------------- STRECHA vrcholTexturaStrecha[0] = new VrcholANormala(poziceX + sirkaX + 1, (float)(poziceY - 1), (float)(poziceZ + vyskaZ - 0.5), (float)1, (float)0, (float)1, (float)0, (float)1); vrcholTexturaStrecha[1] = new VrcholANormala(poziceX + sirkaX / 2, (float)(poziceY - 1), (float)(poziceZ + vyskaZ + 2.5), (float)1, (float)0, (float)1, (float)0, (float)0); vrcholTexturaStrecha[2] = new VrcholANormala(poziceX + sirkaX + 1, (float)(poziceY + hlobkaY + 1), (float)(poziceZ + vyskaZ - 0.5), (float)1, (float)0, (float)1, (float)1, (float)1); vrcholTexturaStrecha[3] = new VrcholANormala(poziceX + sirkaX / 2, (float)(poziceY + hlobkaY + 1), (float)(poziceZ + vyskaZ + 2.5), (float)1, (float)0, (float)1, (float)1, (float)0); vrcholTexturaStrecha[4] = new VrcholANormala(poziceX - 1, (float)(poziceY + hlobkaY + 1), (float)(poziceZ + vyskaZ - 0.5), (float)-1, (float)0, (float)1, (float)1, (float)1); vrcholTexturaStrecha[5] = new VrcholANormala(poziceX + sirkaX / 2, (float)(poziceY + hlobkaY + 1), (float)(poziceZ + vyskaZ + 2.5), (float)-1, (float)0, (float)1, (float)1, (float)0); vrcholTexturaStrecha[6] = new VrcholANormala(poziceX - 1, (float)(poziceY - 1), (float)(poziceZ + vyskaZ - 0.5), (float)-1, (float)0, (float)1, (float)0, (float)1); vrcholTexturaStrecha[7] = new VrcholANormala(poziceX + sirkaX / 2, (float)(poziceY - 1), (float)(poziceZ + vyskaZ + 2.5), (float)-1, (float)0, (float)1, (float)0, (float)0); //----------------------------------------PODHLEDY vrcholTexturaPodhledy[0] = new VrcholANormala(poziceX + sirkaX + 1, (float)(poziceY - 1), (float)(poziceZ + vyskaZ - 0.5)+odsazeni, (float)0, (float)0, (float)1, (float)0, (float)1); vrcholTexturaPodhledy[1] = new VrcholANormala(poziceX + sirkaX / 2, (float)(poziceY - 1), (float)(poziceZ + vyskaZ + 2.5) + odsazeni, (float)0, (float)0, (float)1, (float)0, (float)0); vrcholTexturaPodhledy[2] = new VrcholANormala(poziceX + sirkaX + 1, (float)(poziceY + hlobkaY + 1), (float)(poziceZ + vyskaZ - 0.5) + odsazeni, (float)0, (float)0, (float)1, (float)1, (float)1); vrcholTexturaPodhledy[3] = new VrcholANormala(poziceX + sirkaX / 2, (float)(poziceY + hlobkaY + 1), (float)(poziceZ + vyskaZ + 2.5) + odsazeni, (float)0, (float)0, (float)1, (float)1, (float)0); vrcholTexturaPodhledy[4] = new VrcholANormala(poziceX - 1, (float)(poziceY + hlobkaY + 1), (float)(poziceZ + vyskaZ - 0.5) + odsazeni, (float)0, (float)0, (float)1, (float)1, (float)1); vrcholTexturaPodhledy[5] = new VrcholANormala(poziceX + sirkaX / 2, (float)(poziceY + hlobkaY + 1), (float)(poziceZ + vyskaZ + 2.5) + odsazeni, (float)0, (float)0, (float)1, (float)1, (float)0); vrcholTexturaPodhledy[6] = new VrcholANormala(poziceX - 1, (float)(poziceY - 1), (float)(poziceZ + vyskaZ - 0.5), (float)0, (float)0 + odsazeni, (float)1, (float)0, (float)1); vrcholTexturaPodhledy[7] = new VrcholANormala(poziceX + sirkaX / 2, (float)(poziceY - 1), (float)(poziceZ + vyskaZ + 2.5), (float)0 + odsazeni, (float)0, (float)1, (float)0, (float)0); //----------------------------------------VRATA vrcholTexturaVrata[0] = new VrcholANormala(poziceX + odsazeni, (float)(poziceY + 1), (float)(poziceZ) + odsazeni, (float)-1, (float)0, (float)0, (float)0, (float)1); vrcholTexturaVrata[1] = new VrcholANormala(poziceX + odsazeni, (float)(poziceY + 1), (float)(poziceZ + 2.5) + odsazeni, (float)-1, (float)0, (float)0, (float)0, (float)0); vrcholTexturaVrata[2] = new VrcholANormala(poziceX + odsazeni, (float)(poziceY + 4), (float)(poziceZ) + odsazeni, (float)-1, (float)0, (float)0, (float)1, (float)1); vrcholTexturaVrata[3] = new VrcholANormala(poziceX + odsazeni, (float)(poziceY + 4), (float)(poziceZ + 2.5) + odsazeni, (float)-1, (float)0, (float)0, (float)1, (float)0); //----------------------------------------Zamkovka vrcholTexturaZamkovka[0] = new VrcholANormala(poziceX + odsazeni, (float)(poziceY + 1), (float)(poziceZ) - odsazeni, (float)0, (float)0, (float)1, (float)0, (float)1); vrcholTexturaZamkovka[1] = new VrcholANormala(poziceX - 3 + odsazeni, (float)(poziceY + 1), (float)(poziceZ) - odsazeni, (float)0, (float)0, (float)1, (float)0, (float)0); vrcholTexturaZamkovka[2] = new VrcholANormala(poziceX -3+ odsazeni, (float)(poziceY + 4), (float)(poziceZ) -odsazeni, (float)0, (float)0, (float)1, (float)1, (float)1); vrcholTexturaZamkovka[3] = new VrcholANormala(poziceX + odsazeni, (float)(poziceY + 4), (float)(poziceZ ) - odsazeni, (float)0, (float)0, (float)1, (float)1, (float)0); vrcholTexturaZamkovka[4] = new VrcholANormala(poziceX -3 + odsazeni, (float)(poziceY + 1), (float)(poziceZ) - odsazeni, (float)0, (float)0, (float)1, (float)0, (float)1); vrcholTexturaZamkovka[5] = new VrcholANormala(poziceX - 6 + odsazeni, (float)(poziceY + 1), (float)(poziceZ) - odsazeni, (float)0, (float)0, (float)1, (float)0, (float)0); vrcholTexturaZamkovka[6] = new VrcholANormala(poziceX - 6 + odsazeni, (float)(poziceY + 4), (float)(poziceZ) - odsazeni, (float)0, (float)0, (float)1, (float)1, (float)1); vrcholTexturaZamkovka[7] = new VrcholANormala(poziceX -3 + odsazeni, (float)(poziceY + 4), (float)(poziceZ) - odsazeni, (float)0, (float)0, (float)1, (float)1, (float)0); //---------------------------------------Podlaha vrcholTexturaPodlaha[0] = new VrcholANormala(poziceX, (float)(poziceY + hlobkaY), (float)(poziceZ) - odsazeni, (float)0, (float)0, (float)1, (float)0, (float)1); vrcholTexturaPodlaha[1] = new VrcholANormala(poziceX , (float)(poziceY), (float)(poziceZ) - odsazeni, (float)0, (float)0, (float)1, (float)0, (float)0); vrcholTexturaPodlaha[2] = new VrcholANormala(poziceX +sirkaX, (float)(poziceY + hlobkaY), (float)(poziceZ) - odsazeni, (float)0, (float)0, (float)1, (float)1, (float)1); vrcholTexturaPodlaha[3] = new VrcholANormala(poziceX +sirkaX, (float)(poziceY ), (float)(poziceZ) - odsazeni, (float)0, (float)0, (float)1, (float)1, (float)0); //---------------------------------------Chodnik vrcholTexturaChodnik[0] = new VrcholANormala(poziceX + odsazeni, (float)(poziceY + 6), (float)(poziceZ) - odsazeni, (float)0, (float)0, (float)1, (float)0, (float)1); vrcholTexturaChodnik[1] = new VrcholANormala(poziceX - 3 + odsazeni, (float)(poziceY + 6), (float)(poziceZ) - odsazeni, (float)0, (float)0, (float)1, (float)0, (float)0); vrcholTexturaChodnik[2] = new VrcholANormala(poziceX - 3 + odsazeni, (float)(poziceY + 7), (float)(poziceZ) - odsazeni, (float)0, (float)0, (float)1, (float)1, (float)1); vrcholTexturaChodnik[3] = new VrcholANormala(poziceX + odsazeni, (float)(poziceY + 7), (float)(poziceZ) - odsazeni, (float)0, (float)0, (float)1, (float)1, (float)0); vrcholTexturaChodnik[4] = new VrcholANormala(poziceX - 3 + odsazeni, (float)(poziceY + 6), (float)(poziceZ) - odsazeni, (float)0, (float)0, (float)1, (float)0, (float)1); vrcholTexturaChodnik[5] = new VrcholANormala(poziceX - 6 + odsazeni, (float)(poziceY + 6), (float)(poziceZ) - odsazeni, (float)0, (float)0, (float)1, (float)0, (float)0); vrcholTexturaChodnik[6] = new VrcholANormala(poziceX - 6 + odsazeni, (float)(poziceY + 7), (float)(poziceZ) - odsazeni, (float)0, (float)0, (float)1, (float)1, (float)1); vrcholTexturaChodnik[7] = new VrcholANormala(poziceX - 3 + odsazeni, (float)(poziceY + 7), (float)(poziceZ) - odsazeni, (float)0, (float)0, (float)1, (float)1, (float)0); //------------------------------------------Silnice Pred domem int delka = 6; indexSilnice = new uint[delka*4]; vrcholTexturaSilnice = new VrcholANormala[delka * 4]; for (int i = 0; i < delka; i++) { vrcholTexturaSilnice[0 + (i * 4)] = new VrcholANormala(poziceX - 6, (float)(poziceY -3+ (3 * i)), (float)(poziceZ) - odsazeni, (float)0, (float)0, (float)1, (float)0, (float)1); vrcholTexturaSilnice[1 + (i * 4)] = new VrcholANormala(poziceX - 9, (float)(poziceY - 3 + (3 * i)), (float)(poziceZ) - odsazeni, (float)0, (float)0, (float)1, (float)0, (float)0); vrcholTexturaSilnice[2 + (i * 4)] = new VrcholANormala(poziceX - 9, (float)(poziceY - 3 + 3 * (i + 1)), (float)(poziceZ) - odsazeni, (float)0, (float)0, (float)1, (float)1, (float)0); vrcholTexturaSilnice[3 + (i * 4)] = new VrcholANormala(poziceX - 6, (float)(poziceY - 3 + 3 * (i + 1)), (float)(poziceZ) - odsazeni, (float)0, (float)0, (float)1, (float)1, (float)1); for (int j = 0; j < 4; j++) { indexSilnice[i * 4 + j] = (uint)(i * 4 + j); } } //------------------------------------------ Plot vytvorPlotX(poziceY-2, poziceY+4, poziceX-5); vytvorPlotX(poziceY+4, poziceY + 8, poziceX-5); vytvorPlotX(poziceY+7, poziceY + 21, poziceX-5); vytvorPlotX(poziceY-2 , poziceY + 30, poziceX+17); vytvorPlotY(poziceX - 5, poziceX + 39, poziceY-2); vytvorPlotY(poziceX - 5, poziceX + 39, poziceY +14); //--------------------------- Zdi NahrajTexturu("textury/cihly.jpg", 0); vertexZdiBuff = vytvorVertexBuffer(vrcholTexturaZdi); indexZdiBuff = vytvorIndexBuffer(indexZdi); //------------------------------Strecha NahrajTexturu("textury/tasky.jpg", 3); vertexStrechaBuff = vytvorVertexBuffer(vrcholTexturaStrecha); indexStrechaBuff = vytvorIndexBuffer(indexStrecha); //---------------------------- Buffer podhledy----------------- NahrajTexturu("textury/palubky.jpg", 4); vertexPodhledyBuff = vytvorVertexBuffer(vrcholTexturaPodhledy); indexPodhledyBuff = vytvorIndexBuffer(indexPodhledy); //---------------------------- Buffer stit---------------------- vertexStitBuff = vytvorVertexBuffer(vrcholTexturaStit); indexStitBuff = vytvorIndexBuffer(indexStit); //------------------------DVERE-------------------------- NahrajTexturu("textury/dvere.jpg", 1); vertexDvereBuff = vytvorVertexBuffer(vrcholTexturaDvere); indexDvereBuff = vytvorIndexBuffer(indexDvere); //------------------------OKNA--------------------------- NahrajTexturu("textury/okno.jpg", 2); vertexOknaBuff = vytvorVertexBuffer(vrcholTexturaOkna); indexOknaBuff = vytvorIndexBuffer(indexOkna); //--------------------------- Vrata NahrajTexturu("textury/vrata.jpg", 5); vertexVrataBuff = vytvorVertexBuffer(vrcholTexturaVrata); indexVrataBuff = vytvorIndexBuffer(indexVrata); //--------------------------- CISLA NA DVERE NahrajTexturu("textury/cisla.jpg", 6); vertexCislaNaDvereBuff = vytvorVertexBuffer(vrcholTexturaCislaNaDvere); indexCislaNaDvereBuff = vytvorIndexBuffer(indexCislaNaDvere); //---------------------------- Cesta do Garáže NahrajTexturu("textury/kaminky.jpg", 7); vertexZamkovkaBuff = vytvorVertexBuffer(vrcholTexturaZamkovka); indexZamkovkaBuff = vytvorIndexBuffer(indexZamkovka); //----------------------------- Podlaha NahrajTexturu("textury/podlaha.jpg", 8); vertexPodlahaBuff = vytvorVertexBuffer(vrcholTexturaPodlaha); indexPodlahaBuff = vytvorIndexBuffer(indexPodlaha); //------------------------------Chodník NahrajTexturu("textury/chodnik.jpg", 9); vertexChodnikBuff = vytvorVertexBuffer(vrcholTexturaChodnik); indexChodnikBuff = vytvorIndexBuffer(indexChodnik); //------------------------------ Silnice NahrajTexturu("textury/silnice.jpg", 10); vertexSilniceBuff = vytvorVertexBuffer(vrcholTexturaSilnice); indexSilniceBuff = vytvorIndexBuffer(indexSilnice); //--------------------------- Plot NahrajTexturu("textury/plot.jpg", 11); vertexPlotBuff = vytvorVertexBuffer(vrcholTexturaPlot); indexPlotBuff = vytvorIndexBuffer(indexPlot); } /* * Metoda nahraje texturu do pole textur na danou pozici * nazev - cesta k souboru s texturou * pozice - pozice na jaké bude uložena textura v poly */ public void NahrajTexturu(String nazev,int pozice) { Bitmap image = null; if (!File.Exists(nazev)) { System.Console.Out.WriteLine("Textura nebyla nalezena!"); } else { image = new Bitmap(nazev); System.Drawing.Imaging.BitmapData bitmapdata; Rectangle rect = new Rectangle(0, 0, image.Width, image.Height); bitmapdata = image.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format24bppRgb); textury[pozice] = gl.GenTexture(); gl.BindTexture(GL.TEXTURE_2D, textury[pozice]); gl.TexImage2D(GL.TEXTURE_2D, 0, (int)GL.RGB, image.Width, image.Height, 0, GL.BGR_EXT, GL.UNSIGNED_BYTE, bitmapdata.Scan0); gl.TexParameterf(GL.TEXTURE_2D, GL.TEXTURE_MIN_FILTER, GL.LINEAR); gl.TexParameterf(GL.TEXTURE_2D, GL.TEXTURE_MAG_FILTER, GL.LINEAR); gl.TexParameterf(GL.TEXTURE_2D, GL.TEXTURE_WRAP_S, GL.REPEAT); gl.TexParameterf(GL.TEXTURE_2D, GL.TEXTURE_WRAP_T, GL.REPEAT); } } public void Render() { //-------------------Zdi pomRender(0, vertexZdiBuff, indexZdiBuff, true,indexZdi); //-------------------Strecha pomRender(3, vertexStrechaBuff, indexStrechaBuff, true,indexStrecha); //-------------------Podhledy pomRender(4, vertexPodhledyBuff, indexPodhledyBuff, true, indexPodhledy); //------------------ render stit pomRender(0,vertexStitBuff,indexStitBuff,false,indexStit); //-------------------render dvere pomRender(1, vertexDvereBuff, indexDvereBuff, true,indexDvere); //-------------------------------- RENDER okna pomRender(2, vertexOknaBuff, indexOknaBuff, true,indexOkna); //--------------------- Render CISLA NA DVERE pomRender(6, vertexCislaNaDvereBuff, indexCislaNaDvereBuff, true, indexCislaNaDvere); //--------------------- Render Zamkovka pomRender(7, vertexZamkovkaBuff, indexZamkovkaBuff, true, indexZamkovka); //--------------------- Render Podlaha pomRender(8, vertexPodlahaBuff, indexPodlahaBuff, true, indexPodlaha); //--------------------- Render Chodnik pomRender(9, vertexChodnikBuff, indexChodnikBuff, true, indexChodnik); //--------------------- Render Chodnik pomRender(10, vertexSilniceBuff, indexSilniceBuff, true, indexSilnice); //--------------------- Render Plot pomRender(11, vertexPlotBuff, indexPlotBuff, true, indexPlot); //----------------------Odevri vrata if (odevriVrata) { if (zahejnoOtevirani) { zahejnoOtevirani = false; casZmeny = cas.FrameTime; } float pomCas = (cas.FrameTime - casZmeny) / 3000; if (pomCas >= 1) { pomCas = 1; steny[7] = new Vector4(0, 0, 0, 0); } vrcholTexturaVrata[0] = new VrcholANormala(poziceX + odsazeni, (float)(poziceY + 1), (float)((poziceZ) + odsazeni) + (float)2.5 * pomCas, (float)-1, (float)0, (float)0, (float)0, (float)1); vrcholTexturaVrata[1] = new VrcholANormala(poziceX + odsazeni, (float)(poziceY + 1), (float)(poziceZ + 2.5) + odsazeni, (float)-1, (float)0, (float)0, (float)0, (float)pomCas); vrcholTexturaVrata[2] = new VrcholANormala(poziceX + odsazeni, (float)(poziceY + 4), (float)((poziceZ) + odsazeni) + (float)2.5 * pomCas, (float)-1, (float)0, (float)0, (float)1, (float)1); vrcholTexturaVrata[3] = new VrcholANormala(poziceX + odsazeni, (float)(poziceY + 4), (float)(poziceZ + 2.5) + odsazeni, (float)-1, (float)0, (float)0, (float)1, (float)pomCas); } else { zahejnoOtevirani = true; vrcholTexturaVrata[0] = new VrcholANormala(poziceX + odsazeni, (float)(poziceY + 1), (float)(poziceZ) + odsazeni, (float)-1, (float)0, (float)0, (float)0, (float)1); vrcholTexturaVrata[1] = new VrcholANormala(poziceX + odsazeni, (float)(poziceY + 1), (float)(poziceZ + 2.5) + odsazeni, (float)-1, (float)0, (float)0, (float)0, (float)0); vrcholTexturaVrata[2] = new VrcholANormala(poziceX + odsazeni, (float)(poziceY + 4), (float)(poziceZ) + odsazeni, (float)-1, (float)0, (float)0, (float)1, (float)1); vrcholTexturaVrata[3] = new VrcholANormala(poziceX + odsazeni, (float)(poziceY + 4), (float)(poziceZ + 2.5) + odsazeni, (float)-1, (float)0, (float)0, (float)1, (float)0); steny[7] = new Vector4(poziceX - koficientNarazu, poziceY + 1, 2 * koficientNarazu, 4); } vertexVrataBuff = vytvorVertexBuffer(vrcholTexturaVrata); pomRender(5, vertexVrataBuff, indexVrataBuff, true, indexVrata); cas.NextFrame(); } /* * Metoda rendruje objekt uložený ve vstupních buffrech * cisloTextury - pozice v poli textur kde je uložena naše textura * vertexBuff - Buffer s jednotlivými body * indexBuff - Buffer s jednotlivými spoji mezi vrcholy * guardTriangl - určuje zda se budou kreslit čtverce či trojúhelníky * poleSpoju - pole spojů */ private void pomRender(int cisloTextury, uint vertexBuff, uint indexBuff, bool quardTiangl, uint[] poleSpoju) { gl.ActiveTexture(GL.TEXTURE0); gl.Enable(GL.TEXTURE_2D); gl.BindTexture(GL.TEXTURE_2D, textury[cisloTextury]); gl.TexEnvf(GL.TEXTURE_ENV, GL.TEXTURE_ENV_MODE, GL.MODULATE); gl.BindBuffer(GL.ARRAY_BUFFER, vertexBuff); // NAČTENÍ BUFFERU gl.BindBuffer(GL.ELEMENT_ARRAY_BUFFER, indexBuff); gl.ClientActiveTexture(GL.TEXTURE0); gl.EnableClientState(GL.TEXTURE_COORD_ARRAY); // TEXTURA gl.TexCoordPointer(2, GL.FLOAT, VrcholANormala.SizeInBytes, (IntPtr)24); gl.EnableClientState(GL.NORMAL_ARRAY); // NORMÁLY gl.NormalPointer(GL.FLOAT, VrcholANormala.SizeInBytes, (IntPtr)12); gl.EnableClientState(GL.VERTEX_ARRAY); // POZICE BODU gl.VertexPointer(3, GL.FLOAT, VrcholANormala.SizeInBytes, (IntPtr)0); if (quardTiangl) { gl.DrawElements(GL.QUADS, poleSpoju.Length, GL.UNSIGNED_INT, (IntPtr)0); } else { gl.DrawElements(GL.TRIANGLES, poleSpoju.Length, GL.UNSIGNED_INT, (IntPtr)0); // VYKRESLENÍ } gl.DisableClientState(GL.VERTEX_ARRAY); // ÚKLID gl.DisableClientState(GL.NORMAL_ARRAY); gl.DisableClientState(GL.TEXTURE_COORD_ARRAY); gl.BindBuffer(GL.ARRAY_BUFFER, 0); gl.BindBuffer(GL.ELEMENT_ARRAY_BUFFER, 0); gl.BindTexture(GL.TEXTURE_2D, 0); gl.ActiveTexture(GL.TEXTURE0); gl.Disable(GL.TEXTURE_2D); gl.BindTexture(GL.TEXTURE_2D, 0); } /* * Metoda uloží pole jednotlivých bodů do Bufferu * apoleVrcholu - pole vrcholů Vector3 */ public static uint vytvorVertexBuffer(VrcholANormala[] apoleVrcholu) { uint Buffer = gl.GenBuffer(); gl.BindBuffer(GL.ARRAY_BUFFER, Buffer); gl.BufferData(GL.ARRAY_BUFFER, (int)(apoleVrcholu.Length) * VrcholANormala.SizeInBytes, apoleVrcholu, GL.STATIC_DRAW); gl.BindBuffer(GL.ARRAY_BUFFER, 0); return Buffer; } /* * Metoda uloží pole spojů jednotlivých bodů do Bufferu * apoleSpoju - pole spojů */ public static uint vytvorIndexBuffer( uint[] apoleSpoju){ uint Buffer = gl.GenBuffer(); gl.BindBuffer(GL.ELEMENT_ARRAY_BUFFER, Buffer); gl.BufferData(GL.ELEMENT_ARRAY_BUFFER, apoleSpoju.Length * sizeof(uint), apoleSpoju, GL.STATIC_DRAW); gl.BindBuffer(GL.ELEMENT_ARRAY_BUFFER, 0); return Buffer; } /* * Metoda vrací true pokud jsme v blízkosti Vrat * x - aktuální pozice x * y - aktuální pozice y */ public bool jsemPredVraty(float x, float y) { if (poziceVrataX1 - 2 < x && x < poziceVrataX1 + 2 && poziceVrataY1 - 1 < y && y < poziceVrataY2 + 1) { //System.Console.Out.WriteLine("Jsem pred vraty"); return true; } return false; } /* * Metoda vrací true pokud jsme v blízkosti dveří * x - aktuální pozice x * y - aktuální pozice y */ public bool jsemPredDvermy1(float x, float y) { if (poziceDvere1X1 - 2 < x && x < poziceDvere1X1 + 2 && poziceDvere1Y1 - 1 < y && y < poziceDvere1Y2 + 1) { return true; } return false; } /* * Metoda určuje zda jsme narazily na stěnu či nikoliv * x - aktuální pozice x * y - aktuální pozice y */ public int overNarazDoSteny(float x, float y) { pocetNarazenychSten = 0; for (int i = 0; i < steny.Length; i++) { if (steny[i].x < x && x < steny[i].x + steny[i].z && steny[i].y < y && y < steny[i].y + steny[i].w) { nalezenej = i; pocetNarazenychSten++; } } return pocetNarazenychSten; } /* * Metoda řeší náraz na stěnu X * staraX - pozice na ose x na které stála postava před započetím pohybu * y - aktuální pozice postavy na ose y */ public bool narazeniNaStenuX(float staraX, float y) { int i = nalezenej; if ((steny[i].x > staraX || staraX > steny[i].x + steny[i].z) && steny[i].y < y && y < steny[i].y + steny[i].w) { return true; } return false; } /* * Metoda řeší náraz na stěnu X v rohu tedy při nárazu na dvě stěny * staraX - pozice na ose x na které stála postava před započetím pohybu * y - aktuální pozice postavy na ose y */ public bool narazeniNaStenuForX(float staraX, float y) { for (int i = 0; i < steny.Length; i++) { if ((steny[i].x > staraX || staraX > steny[i].x + steny[i].z) && steny[i].y < y && y < steny[i].y + steny[i].w) { return true; } } return false; } /* * Metoda řeší náraz na stěnu Y * staraY - pozice na ose y na které stála postava před započetím pohybu * x - aktuální pozice postavy na ose x */ public bool narazeniNaStenuY(float x, float staraY) { int i = nalezenej; if ((steny[i].y > staraY || staraY > steny[i].y + steny[i].w) && steny[i].x < x && x < steny[i].x + steny[i].z) { return true; } return false; } /* * Metoda řeší náraz na stěnu Y v rohu tedy při nárazu na dvě stěny * staraY - pozice na ose y na které stála postava před započetím pohybu * x - aktuální pozice postavy na ose x */ public bool narazeniNaStenuForY(float x, float staraY) { for (int i = 0; i < steny.Length; i++) { if ((steny[i].y > staraY || staraY > steny[i].y + steny[i].w) && steny[i].x < x && x < steny[i].x + steny[i].z) { return true; } } return false; } /* * Metoda pro otevření hlavních dveří */ public void otevriDvere1() { dvereOtevreny1 = true; steny[5] = new Vector4(0, 0, 0, 0); vrcholTexturaDvere[4] = new VrcholANormala(poziceX + odsazeni, poziceY + 6, poziceZ, (float)0, (float)0, (float)1, (float)0, (float)1); vrcholTexturaDvere[5] = new VrcholANormala(poziceX + odsazeni, poziceY + 6, poziceZ + 2, (float)0, (float)0, (float)1, (float)0, (float)0); vrcholTexturaDvere[6] = new VrcholANormala(poziceX +1+ odsazeni, poziceY + 6, poziceZ, (float)0, (float)0, (float)1, (float)1, (float)1); vrcholTexturaDvere[7] = new VrcholANormala(poziceX +1+ odsazeni, poziceY + 6, poziceZ + 2, (float)0, (float)0, (float)1, (float)1, (float)0); vertexDvereBuff = vytvorVertexBuffer(vrcholTexturaDvere); } /* * Metoda pro zavření hlavních dveří */ public void zavriDvere1() { dvereOtevreny1 = false; steny[5] = dvere1; vrcholTexturaDvere[4] = new VrcholANormala(poziceDvere1X1, poziceDvere1Y1, poziceZ, (float)-1, (float)0, (float)0, (float)0, (float)1); vrcholTexturaDvere[5] = new VrcholANormala(poziceDvere1X1, poziceDvere1Y1, poziceZ + 2, (float)-1, (float)0, (float)0, (float)0, (float)0); vrcholTexturaDvere[6] = new VrcholANormala(poziceDvere1X2, poziceDvere1Y2, poziceZ, (float)-1, (float)0, (float)0, (float)1, (float)1); vrcholTexturaDvere[7] = new VrcholANormala(poziceDvere1X2, poziceDvere1Y2, poziceZ + 2, (float)-1, (float)0, (float)0, (float)1, (float)0); vertexDvereBuff = vytvorVertexBuffer(vrcholTexturaDvere); } /* * Metoda vytvoří plot po X ose * pocatek - počátek plotu na ose X * konec - konec plotu na ose X * X - souřadnice Y */ private void vytvorPlotX(float pocatek, float konec, float X){ int delka =(int) (Math.Abs(konec - pocatek)/0.1)/2; VrcholANormala[] pomVrcholTexturaPlot = new VrcholANormala[12*delka+vrcholTexturaPlot.Length]; Vector4[] pomSteny = new Vector4[steny.Length +1 ]; for (int i = 0; i < pomSteny.Length-1; i++) { pomSteny[i] = steny[i]; } pomSteny[steny.Length] = new Vector4(X, pocatek - (float)0.5, (float)0.5, Math.Abs(pocatek - konec) / 2 + (float)0.5); steny = pomSteny; for (int i = 0; i < vrcholTexturaPlot.Length; i++) { pomVrcholTexturaPlot[i] = vrcholTexturaPlot[i]; } indexPlot = new uint[delka*12 + vrcholTexturaPlot.Length]; for (int i = 0; i < delka*2; i++) { if (i % 2 == 0) { pomVrcholTexturaPlot[0 + ((i / 2) * 12) + vrcholTexturaPlot.Length] = new VrcholANormala(X , (float)(pocatek + (0.05 * i)), (float)(poziceZ), (float)0, (float)0, (float)1, (float)0, (float)1); pomVrcholTexturaPlot[1 + ((i / 2) * 12) + vrcholTexturaPlot.Length] = new VrcholANormala(X , (float)(pocatek + (0.05 * i)), (float)(poziceZ) + 1, (float)0, (float)0, (float)1, (float)0, (float)0); pomVrcholTexturaPlot[2 + ((i / 2) * 12) + vrcholTexturaPlot.Length] = new VrcholANormala(X , (float)(pocatek + 0.05 * (i + 1)), (float)(poziceZ) + 1, (float)0, (float)0, (float)1, (float)1, (float)0); pomVrcholTexturaPlot[3 + ((i / 2) * 12) + vrcholTexturaPlot.Length] = new VrcholANormala(X , (float)(pocatek + 0.05 * (i + 1)), (float)(poziceZ), (float)0, (float)0, (float)1, (float)1, (float)1); pomVrcholTexturaPlot[4 + ((i / 2) * 12) + vrcholTexturaPlot.Length] = new VrcholANormala(X , (float)(pocatek - 0.025 + (0.05 * i)), (float)(poziceZ) + (float)0.7, (float)0, (float)0, (float)1, (float)0, (float)1); pomVrcholTexturaPlot[5 + ((i / 2) * 12) + vrcholTexturaPlot.Length] = new VrcholANormala(X , (float)(pocatek - 0.025 + (0.05 * i)), (float)(poziceZ) + (float)0.8, (float)0, (float)0, (float)1, (float)0, (float)0); pomVrcholTexturaPlot[6 + ((i / 2) * 12) + vrcholTexturaPlot.Length] = new VrcholANormala(X , (float)(pocatek + 0.025 + 0.05 * (i + 1)), (float)(poziceZ) + (float)0.8, (float)0, (float)0, (float)1, (float)1, (float)0); pomVrcholTexturaPlot[7 + ((i / 2) * 12) + vrcholTexturaPlot.Length] = new VrcholANormala(X , (float)(pocatek + 0.025 + 0.05 * (i + 1)), (float)(poziceZ) + (float)0.7, (float)0, (float)0, (float)1, (float)1, (float)1); pomVrcholTexturaPlot[8 + ((i / 2) * 12) + vrcholTexturaPlot.Length] = new VrcholANormala(X , (float)(pocatek - 0.025 + (0.05 * i)), (float)(poziceZ) + (float)0.2, (float)0, (float)0, (float)1, (float)0, (float)1); pomVrcholTexturaPlot[9 + ((i / 2) * 12) + vrcholTexturaPlot.Length] = new VrcholANormala(X , (float)(pocatek - 0.025 + (0.05 * i)), (float)(poziceZ) + (float)0.3, (float)0, (float)0, (float)1, (float)0, (float)0); pomVrcholTexturaPlot[10 + ((i / 2) * 12) + vrcholTexturaPlot.Length] = new VrcholANormala(X, (float)(pocatek + 0.025 + 0.05 * (i + 1)), (float)(poziceZ) + (float)0.3, (float)0, (float)0, (float)1, (float)1, (float)0); pomVrcholTexturaPlot[11 + ((i / 2) * 12) + vrcholTexturaPlot.Length] = new VrcholANormala(X, (float)(pocatek + 0.025 + 0.05 * (i + 1)), (float)(poziceZ) + (float)0.2, (float)0, (float)0, (float)1, (float)1, (float)1); } } for (int j = 0; j < indexPlot.Length; j++) { indexPlot[j] = (uint)(j); } vrcholTexturaPlot = pomVrcholTexturaPlot; } /* * Metoda vytvoří plot po Y ose * pocatek - počátek plotu na ose y * konec - konec plotu na ose y * X - souřadnice x */ private void vytvorPlotY(float pocatek, float konec, float X) { int delka = (int)(Math.Abs(konec - pocatek) / 0.1) / 2; VrcholANormala[] pomVrcholTexturaPlot = new VrcholANormala[12 * delka + vrcholTexturaPlot.Length]; Vector4[] pomSteny = new Vector4[steny.Length + 1]; for (int i = 0; i < pomSteny.Length - 1; i++) { pomSteny[i] = steny[i]; } pomSteny[steny.Length] = new Vector4(pocatek + (float)0.2, X, Math.Abs(pocatek - konec) / 2 + (float)0.5, (float)0.5); steny = pomSteny; for (int i = 0; i < vrcholTexturaPlot.Length; i++) { pomVrcholTexturaPlot[i] = vrcholTexturaPlot[i]; } indexPlot = new uint[delka * 12 + vrcholTexturaPlot.Length]; for (int i = 0; i < delka * 2; i++) { if (i % 2 == 0) { pomVrcholTexturaPlot[0 + ((i / 2) * 12) + vrcholTexturaPlot.Length] = new VrcholANormala((float)(pocatek + (0.05 * i)), X, (float)(poziceZ), (float)0, (float)0, (float)1, (float)0, (float)1); pomVrcholTexturaPlot[1 + ((i / 2) * 12) + vrcholTexturaPlot.Length] = new VrcholANormala( (float)(pocatek + (0.05 * i)), X, (float)(poziceZ) + 1, (float)0, (float)0, (float)1, (float)0, (float)0); pomVrcholTexturaPlot[2 + ((i / 2) * 12) + vrcholTexturaPlot.Length] = new VrcholANormala( (float)(pocatek + 0.05 * (i + 1)), X, (float)(poziceZ) + 1, (float)0, (float)0, (float)1, (float)1, (float)0); pomVrcholTexturaPlot[3 + ((i / 2) * 12) + vrcholTexturaPlot.Length] = new VrcholANormala( (float)(pocatek + 0.05 * (i + 1)), X, (float)(poziceZ), (float)0, (float)0, (float)1, (float)1, (float)1); pomVrcholTexturaPlot[4 + ((i / 2) * 12) + vrcholTexturaPlot.Length] = new VrcholANormala( (float)(pocatek - 0.025 + (0.05 * i)), X, (float)(poziceZ) + (float)0.7, (float)0, (float)0, (float)1, (float)0, (float)1); pomVrcholTexturaPlot[5 + ((i / 2) * 12) + vrcholTexturaPlot.Length] = new VrcholANormala( (float)(pocatek - 0.025 + (0.05 * i)), X, (float)(poziceZ) + (float)0.8, (float)0, (float)0, (float)1, (float)0, (float)0); pomVrcholTexturaPlot[6 + ((i / 2) * 12) + vrcholTexturaPlot.Length] = new VrcholANormala( (float)(pocatek + 0.025 + 0.05 * (i + 1)), X, (float)(poziceZ) + (float)0.8, (float)0, (float)0, (float)1, (float)1, (float)0); pomVrcholTexturaPlot[7 + ((i / 2) * 12) + vrcholTexturaPlot.Length] = new VrcholANormala( (float)(pocatek + 0.025 + 0.05 * (i + 1)), X, (float)(poziceZ) + (float)0.7, (float)0, (float)0, (float)1, (float)1, (float)1); pomVrcholTexturaPlot[8 + ((i / 2) * 12) + vrcholTexturaPlot.Length] = new VrcholANormala( (float)(pocatek - 0.025 + (0.05 * i)), X, (float)(poziceZ) + (float)0.2, (float)0, (float)0, (float)1, (float)0, (float)1); pomVrcholTexturaPlot[9 + ((i / 2) * 12) + vrcholTexturaPlot.Length] = new VrcholANormala( (float)(pocatek - 0.025 + (0.05 * i)), X, (float)(poziceZ) + (float)0.3, (float)0, (float)0, (float)1, (float)0, (float)0); pomVrcholTexturaPlot[10 + ((i / 2) * 12) + vrcholTexturaPlot.Length] = new VrcholANormala( (float)(pocatek + 0.025 + 0.05 * (i + 1)), X, (float)(poziceZ) + (float)0.3, (float)0, (float)0, (float)1, (float)1, (float)0); pomVrcholTexturaPlot[11 + ((i / 2) * 12) + vrcholTexturaPlot.Length] = new VrcholANormala( (float)(pocatek + 0.025 + 0.05 * (i + 1)), X, (float)(poziceZ) + (float)0.2, (float)0, (float)0, (float)1, (float)1, (float)1); } } for (int j = 0; j < indexPlot.Length; j++) { indexPlot[j] = (uint)(j); } vrcholTexturaPlot = pomVrcholTexturaPlot; } /* * Metoda pro uvolnění bufferů */ public void Destroy() { gl.DeleteBuffer(vertexDvereBuff); gl.DeleteBuffer(indexDvereBuff); gl.DeleteBuffer(vertexOknaBuff); gl.DeleteBuffer(indexOknaBuff); gl.DeleteBuffer(vertexZdiBuff); gl.DeleteBuffer(indexZdiBuff); gl.DeleteBuffer(vertexVrataBuff); gl.DeleteBuffer(indexVrataBuff); gl.DeleteBuffer(vertexStitBuff); gl.DeleteBuffer(indexStitBuff); gl.DeleteBuffer(vertexStrechaBuff); gl.DeleteBuffer(indexStrechaBuff); gl.DeleteBuffer(vertexPodhledyBuff); gl.DeleteBuffer(indexPodhledyBuff); gl.DeleteBuffer(vertexCislaNaDvereBuff); gl.DeleteBuffer(indexCislaNaDvereBuff); gl.DeleteBuffer(vertexZamkovkaBuff); gl.DeleteBuffer(indexZamkovkaBuff); gl.DeleteBuffer(vertexPodlahaBuff); gl.DeleteBuffer(indexPodlahaBuff); gl.DeleteBuffer(vertexChodnikBuff); gl.DeleteBuffer(indexChodnikBuff); gl.DeleteBuffer(vertexSilniceBuff); gl.DeleteBuffer(indexSilniceBuff); gl.DeleteBuffer(vertexPlotBuff); gl.DeleteBuffer(indexPlotBuff); } } class StrukturaSteny { public Vector3 stena1_X1Y1; public Vector3 stena1_X2Y1; public Vector3 stena1_X1Y2; public Vector3 stena1_X2Y2; float koficientNarazu = (float)0.75; public StrukturaSteny(float poziceX, float poziceY, float sirkaX) { this.stena1_X1Y1 = new Vector3(poziceX - koficientNarazu, poziceY - koficientNarazu, 0); this.stena1_X2Y1 = new Vector3(poziceX +sirkaX + koficientNarazu, poziceY - koficientNarazu, 0); this.stena1_X1Y1 = new Vector3(poziceX - koficientNarazu, poziceY + koficientNarazu, 0); this.stena1_X2Y1 = new Vector3(poziceX + sirkaX + koficientNarazu, poziceY + koficientNarazu, 0); } } }