diff --git a/Makefile b/Makefile
index 7b40cbb..69f14f4 100644
--- a/Makefile
+++ b/Makefile
@@ -7,7 +7,7 @@ OUTPUT = output.exe
CPPSTD = c++17
default:
- $(CC) -g *.cpp $(CFLAGS) $(DEPS) $(LINK) -std=$(CPPSTD) -static -static-libgcc -fno-keep-inline-dllexport -o $(OUTPUT)
+ $(CC) -g *.cpp $(CFLAGS) $(DEPS) $(LINK) -std=$(CPPSTD) -static -static-libgcc -fno-keep-inline-dllexport -Os -s -Wl,--build-id=none -o $(OUTPUT)
run: default
$(OUTPUT)
diff --git a/grafikaKBT.vcxproj b/grafikaKBT.vcxproj
index 403c19e..e8089fa 100644
--- a/grafikaKBT.vcxproj
+++ b/grafikaKBT.vcxproj
@@ -126,6 +126,8 @@
+
+
@@ -133,6 +135,8 @@
+
+
diff --git a/grafikaKBT.vcxproj.filters b/grafikaKBT.vcxproj.filters
index 15876af..7b94c6c 100644
--- a/grafikaKBT.vcxproj.filters
+++ b/grafikaKBT.vcxproj.filters
@@ -33,6 +33,12 @@
Source Files
+
+ Source Files
+
+
+ Source Files
+
@@ -50,6 +56,12 @@
Header Files
+
+ Header Files
+
+
+ Header Files
+
diff --git a/lazik.cpp b/lazik.cpp
index f7c564f..d40dc32 100644
--- a/lazik.cpp
+++ b/lazik.cpp
@@ -1,15 +1,21 @@
#include "lazik.hpp"
-lazik::lazik(float x, float y, float z, const char* modelpath){
+//lazik::lazik(float x, float y, float z, const char* modelpath, const char* texturepath) {
+lazik::lazik(float x, float y, float z, const char* modelpath) {
this->c_x = x;
this->c_y = y;
this->c_z = z;
this->modelpath = modelpath;
+ // this->texturepath = texturepath;
timestampedCout("lazik.cpp: Zaladowano dane w konstruktorze.")
}
+// void lazik::passProgramID(GLuint programID) {
+// this->programID = programID;
+// }
+
void lazik::loadModel() {
timestampedCout("lazik.cpp:");
@@ -18,6 +24,11 @@ void lazik::loadModel() {
if (res) timestampedCout("Pomyslnie zaladowano model lazika.")
else timestampedCout("Nie udalo sie zaladowac modelu lazika.");
+ //this->Texture = loadDDS(this->texturepath);
+ //timestampedCout("lazik.cpp: this->Texture = " << this->Texture);
+ //this->TextureID = glGetUniformLocation(this->programID, "myTextureSampler");
+ //timestampedCout("lazik.cpp: this->TextureID = " << this->TextureID);
+
glGenBuffers(1, &vertexbuffer);
glBindBuffer(GL_ARRAY_BUFFER, this->vertexbuffer);
glBufferData(GL_ARRAY_BUFFER, this->vertices.size() * sizeof(glm::vec3), &vertices[0], GL_STATIC_DRAW);
@@ -30,6 +41,13 @@ void lazik::loadModel() {
void lazik::draw() {
+ // glEnable(GL_TEXTURE_2D);
+ // // Bind our texture in Texture Unit 0
+ // glActiveTexture(GL_TEXTURE0);
+ // glBindTexture(GL_TEXTURE_2D, Texture);
+ // // Set our "myTextureSampler" sampler to use Texture Unit 0
+ // glUniform1i(TextureID, 0);
+
// 1st attribute buffer: vertices
glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, this->vertexbuffer);
@@ -57,11 +75,19 @@ void lazik::draw() {
// Draw vertices
glDrawArrays(GL_TRIANGLES, 0, this->vertices.size());
+ // glDisable(GL_TEXTURE_2D);
+
glDisableVertexAttribArray(0);
glDisableVertexAttribArray(1);
}
+void lazik::unload(){
+ glDeleteBuffers(1, &this->vertexbuffer);
+ glDeleteBuffers(1, &this->uvbuffer);
+ // glDeleteTextures(1, &this->Texture);
+}
+
void lazik::moveX(float x){
// TODO: dodać timer do poniższych funkcji, aby czas przejścia z punktu A do B był uniezależniony od FPSów
timestampedCout("dummy moveX");
diff --git a/lazik.hpp b/lazik.hpp
index 8207c88..910320e 100644
--- a/lazik.hpp
+++ b/lazik.hpp
@@ -8,6 +8,8 @@
#include "timeh.hpp"
#include "GL/glm/glm.hpp"
#include "loadOBJ.h"
+#include "texture.hpp"
+#include "shader.hpp"
class lazik {
private:
@@ -23,10 +25,17 @@ class lazik {
GLuint vertexbuffer;
GLuint uvbuffer;
const char* modelpath;
+ //GLuint programID;
+ //GLuint Texture;
+ //GLuint TextureID;
+ //const char* texturepath;
public:
+ // lazik(float x, float y, float z, const char* modelpath, const char* texturepath);
lazik(float x, float y, float z, const char* modelpath);
+ //void passProgramID(GLuint programID);
void loadModel();
void draw();
+ void unload();
void moveX(float x);
void moveY(float y);
void moveZ(float z);
diff --git a/main.cpp b/main.cpp
index 306b8c1..3519a2a 100644
--- a/main.cpp
+++ b/main.cpp
@@ -31,6 +31,9 @@
#include "GL/glfw3.h"
#include
#include "timeh.hpp"
+#include "texture.hpp"
+#include "shader.hpp"
+
using namespace glm;
@@ -44,7 +47,7 @@ using namespace glm;
HPALETTE hPalette = NULL;
-// Application name and instance storeage
+// Application name and instance storage
static LPCTSTR lpszAppName = "grafikaKBT";
static HINSTANCE hInstance;
GLFWwindow* window;
@@ -61,7 +64,7 @@ static GLsizei lastWidth;
// Opis tekstury
BITMAPINFOHEADER bitmapInfoHeader; // nagłówek obrazu
unsigned char* bitmapData; // dane tekstury
-unsigned int texture[2]; // obiekt tekstury
+unsigned int texture[4]; // obiekt tekstury
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
@@ -77,7 +80,7 @@ std::time_t monitormodehelper;
//Zmienne do ruchu ##############################################
-float Foward = 0.0f; // Pozycja łazika w przód/tył
+float Foward = 0.0f; // Pozycja łazika w przód/tył
float Sides = 0.0f; // Pozycja łazika w lewo/prawo
float Rotation = 0.0f; // Rotacja łazika (w stopniach)
@@ -159,15 +162,13 @@ unsigned char* LoadBitmapFile(char* filename, BITMAPINFOHEADER* bitmapInfoHeader
// otwiera plik w trybie "read binary"
filePtr = fopen(filename, "rb");
- if (filePtr == NULL)
- return NULL;
+ if (filePtr == NULL) return NULL;
// wczytuje nagłówek pliku
fread(&bitmapFileHeader, sizeof(BITMAPFILEHEADER), 1, filePtr);
// sprawdza, czy jest to plik formatu BMP
- if (bitmapFileHeader.bfType != BITMAP_ID)
- {
+ if (bitmapFileHeader.bfType != BITMAP_ID) {
fclose(filePtr);
return NULL;
}
@@ -237,49 +238,401 @@ void SetDCPixelFormat(HDC hDC) {
SetPixelFormat(hDC, nPixelFormat, &pfd);
}
-lazik user(10.0f, 0.0f, 0.0f, "res/models/lazik4.obj");
-plane mapa(0.0f, 0.0f, 0.0f, "res/models/mapka2.obj");
+void skrzynka(GLfloat k) {
+ glColor3d(0.8, 0.7, 0.3);
+
+
+ glEnable(GL_TEXTURE_2D); // Włącz teksturowanie
+
+ glBindTexture(GL_TEXTURE_2D, texture[0]);
+ glBegin(GL_QUADS);
+ glNormal3d(0, 0, 1);
+ glTexCoord2d(1.0, 1.0); glVertex3d( k, k, k);
+ glTexCoord2d(0.0, 1.0); glVertex3d(-k, k, k);
+ glTexCoord2d(0.0, 0.0); glVertex3d(-k, -k, k);
+ glTexCoord2d(1.0, 0.0); glVertex3d( k, -k, k);
+ glEnd();
+ glBindTexture(GL_TEXTURE_2D, texture[1]);
+ glBegin(GL_QUADS);
+ glNormal3d(1, 0, 0);
+ glTexCoord2d(1.0, 1.0); glVertex3d(k, k, k);
+ glTexCoord2d(0.0, 1.0); glVertex3d(k, -k, k);
+ glTexCoord2d(0.0, 0.0); glVertex3d(k, -k, -k);
+ glTexCoord2d(1.0, 0.0); glVertex3d(k, k, -k);
+ glEnd();
+
+ glDisable(GL_TEXTURE_2D); // Wyłącz teksturowanie
+
+
+ glBegin(GL_QUADS);
+ glNormal3d(0, 0, -1);
+ glVertex3d( k, k, -k);
+ glVertex3d( k, -k, -k);
+ glVertex3d(-k, -k, -k);
+ glVertex3d(-k, k, -k);
+
+ glNormal3d(-1, 0, 0);
+ glVertex3d(-k, k, -k);
+ glVertex3d(-k, -k, -k);
+ glVertex3d(-k, -k, k);
+ glVertex3d(-k, k, k);
+
+ glNormal3d(0, 1, 0);
+ glVertex3d( k, k, k);
+ glVertex3d( k, k, -k);
+ glVertex3d(-k, k, -k);
+ glVertex3d(-k, k, k);
+
+ glNormal3d(0, -1, 0);
+ glVertex3d( k, -k, k);
+ glVertex3d(-k, -k, k);
+ glVertex3d(-k, -k, -k);
+ glVertex3d( k, -k, -k);
+ glEnd();
+}
+
+void platforma(GLfloat xc, GLfloat yc, GLfloat zc, GLfloat xlen, GLfloat zlen) {
+
+ glColor3d(0.729, 0.91, 0.51); // jasnozielony, dla grass02.bmp (https://rgbcolorpicker.com/0-1)
+ glEnable(GL_TEXTURE_2D);
+
+ glBindTexture(GL_TEXTURE_2D, texture[1]);
+ glBegin(GL_QUADS);
+ glTexCoord2d(1.0, 1.0); glVertex3d(xc - xlen, yc, zc - zlen);
+ glTexCoord2d(1.0, 0.0); glVertex3d(xc + xlen, yc, zc - zlen);
+ glTexCoord2d(0.0, 0.0); glVertex3d(xc + xlen, yc, zc + zlen);
+ glTexCoord2d(0.0, 1.0); glVertex3d(xc - xlen, yc, zc + zlen);
+ glEnd();
+
+ glDisable(GL_TEXTURE_2D);
+
+}
+
+void stodola(GLfloat xc, GLfloat yc, GLfloat zc, GLfloat krawedz) {
+
+ glEnable(GL_TEXTURE_2D);
+
+ // ściany stodoły z bruku (brickwall)
+ glColor3d(0.612f, 0.573f, 0.478f); // ciemny szary popadający w brąz (https://rgbcolorpicker.com/0-1)
+ glBindTexture(GL_TEXTURE_2D, texture[3]);
+ glBegin(GL_QUADS);
+
+ glTexCoord2d(1.0, 1.0); glVertex3d(xc - krawedz/2, yc, zc - krawedz/2);
+ glTexCoord2d(1.0, 0.0); glVertex3d(xc - krawedz/2, yc + krawedz, zc - krawedz/2);
+ glTexCoord2d(0.0, 0.0); glVertex3d(xc + krawedz/2, yc + krawedz, zc - krawedz/2);
+ glTexCoord2d(0.0, 1.0); glVertex3d(xc + krawedz/2, yc, zc - krawedz/2);
+
+ glTexCoord2d(1.0, 1.0); glVertex3d(xc - krawedz/2, yc, zc - krawedz/2);
+ glTexCoord2d(1.0, 0.0); glVertex3d(xc - krawedz/2, yc + krawedz, zc - krawedz/2);
+ glTexCoord2d(0.0, 0.0); glVertex3d(xc - krawedz/2, yc + krawedz, zc + krawedz/2);
+ glTexCoord2d(0.0, 1.0); glVertex3d(xc - krawedz/2, yc, zc + krawedz/2);
+
+ glTexCoord2d(1.0, 1.0); glVertex3d(xc - krawedz/2, yc, zc + krawedz/2);
+ glTexCoord2d(1.0, 0.0); glVertex3d(xc - krawedz/2, yc + krawedz, zc + krawedz/2);
+ glTexCoord2d(0.0, 0.0); glVertex3d(xc + krawedz/2, yc + krawedz, zc + krawedz/2);
+ glTexCoord2d(0.0, 1.0); glVertex3d(xc + krawedz/2, yc, zc + krawedz/2);
+
+ glEnd();
+
+ // przód i tył dachu
+ glColor3d(0.612f, 0.573f, 0.478f);
+ glBindTexture(GL_TEXTURE_2D, texture[3]);
+ glBegin(GL_TRIANGLES);
+
+ glTexCoord2f(1.0, 1.0); glVertex3f(xc - krawedz/2, yc + krawedz, zc - krawedz/2);
+ glTexCoord2f(1.0, 0.0); glVertex3f(xc - krawedz/2, yc + 1.5 * krawedz, zc);
+ glTexCoord2f(0.0, 0.0); glVertex3f(xc - krawedz/2, yc + krawedz, zc + krawedz/2);
+
+ glTexCoord2f(1.0, 1.0); glVertex3f(xc + krawedz/2, yc + krawedz, zc - krawedz/2);
+ glTexCoord2f(1.0, 0.0); glVertex3f(xc + krawedz/2, yc + 1.5 * krawedz, zc);
+ glTexCoord2f(0.0, 0.0); glVertex3f(xc + krawedz/2, yc + krawedz, zc + krawedz/2);
+
+ glEnd();
+
+
+ // dach stodoły (barnroof)
+ glColor3d(0.639, 0.553, 0.322); // wyblakły brązowy
+ glBindTexture(GL_TEXTURE_2D, texture[2]);
+ glBegin(GL_QUADS);
+
+ glTexCoord2d(1.0, 1.0); glVertex3d(xc - krawedz/2, yc + krawedz, zc + krawedz/2);
+ glTexCoord2d(1.0, 0.0); glVertex3d(xc - krawedz/2, yc + 1.5 * krawedz, zc);
+ glTexCoord2d(0.0, 0.0); glVertex3d(xc + krawedz/2, yc + 1.5 * krawedz, zc);
+ glTexCoord2d(0.0, 1.0); glVertex3d(xc + krawedz/2, yc + krawedz, zc + krawedz/2);
+
+ glTexCoord2d(1.0, 1.0); glVertex3d(xc - krawedz/2, yc + krawedz, zc - krawedz/2);
+ glTexCoord2d(1.0, 0.0); glVertex3d(xc - krawedz/2, yc + 1.5 * krawedz, zc);
+ glTexCoord2d(0.0, 0.0); glVertex3d(xc + krawedz/2, yc + 1.5 * krawedz, zc);
+ glTexCoord2d(0.0, 1.0); glVertex3d(xc + krawedz/2, yc + krawedz, zc - krawedz/2);
+
+ glEnd();
+
+ glDisable(GL_TEXTURE_2D);
+
+}
+
+void plot(GLfloat xc, GLfloat yc, GLfloat zc, GLfloat length, GLfloat gruboscY, bool mod_x) {
+
+ GLfloat grubosc = 1.0f;
+
+ // timestampedCout("main.cpp (plot): otrzymano xc=" << xc << " yc=" << yc << " zc=" << zc << " length=" << length << " mod_x=" << mod_x);
+
+ GLfloat gruboscX = grubosc + mod_x * length;
+ GLfloat gruboscZ = grubosc + !mod_x * length;
+
+ // timestampedCout("main.cpp (plot): gruboscX=" << gruboscX << " gruboscY=" << gruboscY << " gruboscZ=" << gruboscZ);
+
+ // d-----------c Y
+ // / /| ^
+ // a-----------b | \
+ // | h | g C->X
+ // | |/ |
+ // e-----------f v
+ // Z (płaszczyzna XZ, Y to trzeci wymiar)
+
+ GLfloat a1_x = xc - gruboscX / 2, a1_y = yc + 1 + gruboscY, a1_z = zc + gruboscZ / 2; // 3
+ GLfloat b1_x = xc + gruboscX / 2, b1_y = yc + 1 + gruboscY, b1_z = zc + gruboscZ / 2;
+ GLfloat c1_x = xc + gruboscX / 2, c1_y = yc + 1 + gruboscY, c1_z = zc - gruboscZ / 2;
+ GLfloat d1_x = xc - gruboscX / 2, d1_y = yc + 1 + gruboscY, d1_z = zc - gruboscZ / 2;
+ GLfloat e1_x = xc - gruboscX / 2, e1_y = yc + 1 , e1_z = zc + gruboscZ / 2; // 1
+ GLfloat f1_x = xc + gruboscX / 2, f1_y = yc + 1 , f1_z = zc + gruboscZ / 2;
+ GLfloat g1_x = xc + gruboscX / 2, g1_y = yc + 1 , g1_z = zc - gruboscZ / 2;
+ GLfloat h1_x = xc - gruboscX / 2, h1_y = yc + 1 , h1_z = zc - gruboscZ / 2;
+
+ GLfloat a2_x = a1_x, a2_y = a1_y - 1 - gruboscY, a2_z = a1_z; //zc - 1; // -4
+ GLfloat b2_x = b1_x, b2_y = b1_y - 1 - gruboscY, b2_z = b1_z; //zc - 1;
+ GLfloat c2_x = c1_x, c2_y = c1_y - 1 - gruboscY, c2_z = c1_z; //zc - 1;
+ GLfloat d2_x = d1_x, d2_y = d1_y - 1 - gruboscY, d2_z = d1_z; //zc - 1;
+ GLfloat e2_x = e1_x, e2_y = e1_y - 1 - gruboscY, e2_z = e1_z; //zc - 2;
+ GLfloat f2_x = f1_x, f2_y = f1_y - 1 - gruboscY, f2_z = f1_z; //zc - 2;
+ GLfloat g2_x = g1_x, g2_y = g1_y - 1 - gruboscY, g2_z = g1_z; //zc - 2;
+ GLfloat h2_x = h1_x, h2_y = h1_y - 1 - gruboscY, h2_z = h1_z; //zc - 2;
+
+ glColor3d(0.71, 0.522, 0.067);
+
+ glEnable(GL_TEXTURE_2D);
+ glBindTexture(GL_TEXTURE_2D, texture[0]);
+ glBegin(GL_QUADS);
+
+ // Góra (1_x, 1_y, 1_z):
+ // ABCD
+ glTexCoord2d(1.0, 1.0); glVertex3d(a1_x, a1_y, a1_z);
+ glTexCoord2d(1.0, 0.0); glVertex3d(b1_x, b1_y, b1_z);
+ glTexCoord2d(0.0, 0.0); glVertex3d(c1_x, c1_y, c1_z);
+ glTexCoord2d(0.0, 1.0); glVertex3d(d1_x, d1_y, d1_z);
+
+ // EFGH
+ glTexCoord2d(1.0, 1.0); glVertex3d(e1_x, e1_y, e1_z);
+ glTexCoord2d(1.0, 0.0); glVertex3d(f1_x, f1_y, f1_z);
+ glTexCoord2d(0.0, 0.0); glVertex3d(g1_x, g1_y, g1_z);
+ glTexCoord2d(0.0, 1.0); glVertex3d(h1_x, h1_y, h1_z);
+
+ // BCGF
+ glTexCoord2d(1.0, 1.0); glVertex3d(b1_x, b1_y, b1_z);
+ glTexCoord2d(1.0, 0.0); glVertex3d(c1_x, c1_y, c1_z);
+ glTexCoord2d(0.0, 0.0); glVertex3d(g1_x, g1_y, g1_z);
+ glTexCoord2d(0.0, 1.0); glVertex3d(f1_x, f1_y, f1_z);
+
+ // ADHE
+ glTexCoord2d(1.0, 1.0); glVertex3d(a1_x, a1_y, a1_z);
+ glTexCoord2d(1.0, 0.0); glVertex3d(b1_x, b1_y, b1_z);
+ glTexCoord2d(0.0, 0.0); glVertex3d(c1_x, c1_y, c1_z);
+ glTexCoord2d(0.0, 1.0); glVertex3d(d1_x, d1_y, d1_z);
+
+ // ABFE
+ glTexCoord2d(1.0, 1.0); glVertex3d(a1_x, a1_y, a1_z);
+ glTexCoord2d(1.0, 0.0); glVertex3d(b1_x, b1_y, b1_z);
+ glTexCoord2d(0.0, 0.0); glVertex3d(f1_x, f1_y, f1_z);
+ glTexCoord2d(0.0, 1.0); glVertex3d(e1_x, e1_y, e1_z);
+
+ // DCGH
+ glTexCoord2d(1.0, 1.0); glVertex3d(d1_x, d1_y, d1_z);
+ glTexCoord2d(1.0, 0.0); glVertex3d(c1_x, c1_y, c1_z);
+ glTexCoord2d(0.0, 0.0); glVertex3d(g1_x, g1_y, g1_z);
+ glTexCoord2d(0.0, 1.0); glVertex3d(h1_x, h1_y, h1_z);
+
+ // Dół (2_x, 2_y, 2_z):
+ // ABCD
+ glTexCoord2d(1.0, 1.0); glVertex3d(a2_x, a2_y, a2_z);
+ glTexCoord2d(1.0, 0.0); glVertex3d(b2_x, b2_y, b2_z);
+ glTexCoord2d(0.0, 0.0); glVertex3d(c2_x, c2_y, c2_z);
+ glTexCoord2d(0.0, 1.0); glVertex3d(d2_x, d2_y, d2_z);
+
+ // EFGH
+ glTexCoord2d(1.0, 1.0); glVertex3d(e2_x, e2_y, e2_z);
+ glTexCoord2d(1.0, 0.0); glVertex3d(f2_x, f2_y, f2_z);
+ glTexCoord2d(0.0, 0.0); glVertex3d(g2_x, g2_y, g2_z);
+ glTexCoord2d(0.0, 1.0); glVertex3d(h2_x, h2_y, h2_z);
+
+ // BCGF
+ glTexCoord2d(1.0, 1.0); glVertex3d(b2_x, b2_y, b2_z);
+ glTexCoord2d(1.0, 0.0); glVertex3d(c2_x, c2_y, c2_z);
+ glTexCoord2d(0.0, 0.0); glVertex3d(g2_x, g2_y, g2_z);
+ glTexCoord2d(0.0, 1.0); glVertex3d(f2_x, f2_y, f2_z);
+
+ // ADHE
+ glTexCoord2d(1.0, 1.0); glVertex3d(a2_x, a2_y, a2_z);
+ glTexCoord2d(1.0, 0.0); glVertex3d(b2_x, b2_y, b2_z);
+ glTexCoord2d(0.0, 0.0); glVertex3d(c2_x, c2_y, c2_z);
+ glTexCoord2d(0.0, 1.0); glVertex3d(d2_x, d2_y, d2_z);
+
+ // ABFE
+ glTexCoord2d(1.0, 1.0); glVertex3d(a2_x, a2_y, a2_z);
+ glTexCoord2d(1.0, 0.0); glVertex3d(b2_x, b2_y, b2_z);
+ glTexCoord2d(0.0, 0.0); glVertex3d(f2_x, f2_y, f2_z);
+ glTexCoord2d(0.0, 1.0); glVertex3d(e2_x, e2_y, e2_z);
+
+ // DCGH
+ glTexCoord2d(1.0, 1.0); glVertex3d(d2_x, d2_y, d2_z);
+ glTexCoord2d(1.0, 0.0); glVertex3d(c2_x, c2_y, c2_z);
+ glTexCoord2d(0.0, 0.0); glVertex3d(g2_x, g2_y, g2_z);
+ glTexCoord2d(0.0, 1.0); glVertex3d(h2_x, h2_y, h2_z);
+
+ // Pachołki
+
+ // d-----------c Y
+ // / /| ^
+ // a-----------b | \
+ // | h | g C->X
+ // | |/ |
+ // e-----------f v
+ // Z (płaszczyzna XZ, Y to trzeci wymiar)
+
+
+ GLfloat p_a_x, p_a_y, p_a_z;
+ GLfloat p_b_x, p_b_y, p_b_z;
+ GLfloat p_c_x, p_c_y, p_c_z;
+ GLfloat p_d_x, p_d_y, p_d_z;
+ GLfloat p_e_x, p_e_y, p_e_z;
+ GLfloat p_f_x, p_f_y, p_f_z;
+ GLfloat p_g_x, p_g_y, p_g_z;
+ GLfloat p_h_x, p_h_y, p_h_z;
+
+ if (!mod_x) {
+
+ p_a_x = xc + gruboscX / 2, p_a_y = yc + 1.5f * gruboscY, p_a_z = zc; // +3 dla y
+ p_b_x = xc - gruboscX / 2, p_b_y = yc + 1.5f * gruboscY, p_b_z = zc; // +3 dla y
+ p_c_x = xc + gruboscX / 2, p_c_y = yc + 1.5f * gruboscY, p_c_z = zc; // +3 dla y
+ p_d_x = xc - gruboscX / 2, p_d_y = yc + 1.5f * gruboscY, p_d_z = zc; // +3 dla y
+ p_e_x = xc + gruboscX / 2, p_e_y = yc - 6 , p_e_z = zc;
+ p_f_x = xc - gruboscX / 2, p_f_y = yc - 6 , p_f_z = zc;
+ p_g_x = xc + gruboscX / 2, p_g_y = yc - 6 , p_g_z = zc;
+ p_h_x = xc - gruboscX / 2, p_h_y = yc - 6 , p_h_z = zc;
+
+ } else {
+
+ p_a_x = xc, p_a_y = yc + 1.5f * gruboscY, p_a_z = zc - gruboscZ / 2; // +3 dla y
+ p_b_x = xc, p_b_y = yc + 1.5f * gruboscY, p_b_z = zc - gruboscZ / 2; // +3 dla y
+ p_c_x = xc, p_c_y = yc + 1.5f * gruboscY, p_c_z = zc + gruboscZ / 2; // +3 dla y
+ p_d_x = xc, p_d_y = yc + 1.5f * gruboscY, p_d_z = zc + gruboscZ / 2; // +3 dla y
+ p_e_x = xc, p_e_y = yc - 6 , p_e_z = zc - gruboscZ / 2;
+ p_f_x = xc, p_f_y = yc - 6 , p_f_z = zc - gruboscZ / 2;
+ p_g_x = xc, p_g_y = yc - 6 , p_g_z = zc + gruboscZ / 2;
+ p_h_x = xc, p_h_y = yc - 6 , p_h_z = zc + gruboscZ / 2;
+
+ }
+
+ for (int i = 0; i < 2; i++) {
+
+ // d-----------c Y
+ // / /| ^
+ // a-----------b | \
+ // | h | g C->X
+ // | |/ |
+ // e-----------f v
+ // Z (płaszczyzna XZ, Y to trzeci wymiar)
+
+ // timestampedCout("main.cpp (plot): p_a_x=" << p_a_x << " p_b_x=" << p_b_x << " p_c_x=" << p_c_x << " p_d_x=" << p_d_x);
+
+ // ABCD
+ glTexCoord2d(1.0, 1.0); glVertex3d(p_a_x + (2*i-1) * (gruboscX/2 - 8) * mod_x, p_a_y, p_a_z + (2*i-1) * (gruboscZ/2 - 5) * !mod_x);
+ glTexCoord2d(1.0, 0.0); glVertex3d(p_b_x + (2*i-1) * (gruboscX/2 - 5) * mod_x, p_b_y, p_b_z + (2*i-1) * (gruboscZ/2 - 5) * !mod_x);
+ glTexCoord2d(0.0, 0.0); glVertex3d(p_c_x + (2*i-1) * (gruboscX/2 - 5) * mod_x, p_c_y, p_c_z + (2*i-1) * (gruboscZ/2 - 8) * !mod_x);
+ glTexCoord2d(0.0, 1.0); glVertex3d(p_d_x + (2*i-1) * (gruboscX/2 - 8) * mod_x, p_d_y, p_d_z + (2*i-1) * (gruboscZ/2 - 8) * !mod_x);
+
+ // EFGH
+ glTexCoord2d(1.0, 1.0); glVertex3d(p_e_x + (2*i-1) * (gruboscX/2 - 8) * mod_x, p_e_y, p_e_z + (2*i-1) * (gruboscZ/2 - 5) * !mod_x);
+ glTexCoord2d(1.0, 0.0); glVertex3d(p_f_x + (2*i-1) * (gruboscX/2 - 5) * mod_x, p_f_y, p_f_z + (2*i-1) * (gruboscZ/2 - 5) * !mod_x);
+ glTexCoord2d(0.0, 0.0); glVertex3d(p_g_x + (2*i-1) * (gruboscX/2 - 5) * mod_x, p_g_y, p_g_z + (2*i-1) * (gruboscZ/2 - 8) * !mod_x);
+ glTexCoord2d(0.0, 1.0); glVertex3d(p_h_x + (2*i-1) * (gruboscX/2 - 8) * mod_x, p_h_y, p_h_z + (2*i-1) * (gruboscZ/2 - 8) * !mod_x);
+
+ // BCGF
+ glTexCoord2d(1.0, 1.0); glVertex3d(p_b_x + (2*i-1) * (gruboscX/2 - 5) * mod_x, p_b_y, p_b_z + (2*i-1) * (gruboscZ/2 - 5) * !mod_x);
+ glTexCoord2d(1.0, 0.0); glVertex3d(p_c_x + (2*i-1) * (gruboscX/2 - 5) * mod_x, p_c_y, p_c_z + (2*i-1) * (gruboscZ/2 - 8) * !mod_x);
+ glTexCoord2d(0.0, 0.0); glVertex3d(p_g_x + (2*i-1) * (gruboscX/2 - 5) * mod_x, p_g_y, p_g_z + (2*i-1) * (gruboscZ/2 - 8) * !mod_x);
+ glTexCoord2d(0.0, 1.0); glVertex3d(p_f_x + (2*i-1) * (gruboscX/2 - 5) * mod_x, p_f_y, p_f_z + (2*i-1) * (gruboscZ/2 - 5) * !mod_x);
+
+ // ADHE
+ glTexCoord2d(1.0, 1.0); glVertex3d(p_a_x + (2*i-1) * (gruboscX/2 - 8) * mod_x, p_a_y, p_a_z + (2*i-1) * (gruboscZ/2 - 5) * !mod_x);
+ glTexCoord2d(1.0, 0.0); glVertex3d(p_d_x + (2*i-1) * (gruboscX/2 - 8) * mod_x, p_d_y, p_d_z + (2*i-1) * (gruboscZ/2 - 8) * !mod_x);
+ glTexCoord2d(0.0, 0.0); glVertex3d(p_h_x + (2*i-1) * (gruboscX/2 - 8) * mod_x, p_h_y, p_h_z + (2*i-1) * (gruboscZ/2 - 8) * !mod_x);
+ glTexCoord2d(0.0, 1.0); glVertex3d(p_e_x + (2*i-1) * (gruboscX/2 - 8) * mod_x, p_e_y, p_e_z + (2*i-1) * (gruboscZ/2 - 5) * !mod_x);
+
+ // ABFE
+ glTexCoord2d(1.0, 1.0); glVertex3d(p_a_x + (2*i-1) * (gruboscX/2 - 8) * mod_x, p_a_y, p_a_z + (2*i-1) * (gruboscZ/2 - 5) * !mod_x);
+ glTexCoord2d(1.0, 0.0); glVertex3d(p_b_x + (2*i-1) * (gruboscX/2 - 5) * mod_x, p_b_y, p_b_z + (2*i-1) * (gruboscZ/2 - 5) * !mod_x);
+ glTexCoord2d(0.0, 0.0); glVertex3d(p_f_x + (2*i-1) * (gruboscX/2 - 5) * mod_x, p_f_y, p_f_z + (2*i-1) * (gruboscZ/2 - 5) * !mod_x);
+ glTexCoord2d(0.0, 1.0); glVertex3d(p_e_x + (2*i-1) * (gruboscX/2 - 8) * mod_x, p_e_y, p_e_z + (2*i-1) * (gruboscZ/2 - 5) * !mod_x);
+
+ // DCGH
+ glTexCoord2d(1.0, 1.0); glVertex3d(p_d_x + (2*i-1) * (gruboscX/2 - 8) * mod_x, p_d_y, p_d_z + (2*i-1) * (gruboscZ/2 - 8) * !mod_x);
+ glTexCoord2d(1.0, 0.0); glVertex3d(p_c_x + (2*i-1) * (gruboscX/2 - 5) * mod_x, p_c_y, p_c_z + (2*i-1) * (gruboscZ/2 - 8) * !mod_x);
+ glTexCoord2d(0.0, 0.0); glVertex3d(p_g_x + (2*i-1) * (gruboscX/2 - 5) * mod_x, p_g_y, p_g_z + (2*i-1) * (gruboscZ/2 - 8) * !mod_x);
+ glTexCoord2d(0.0, 1.0); glVertex3d(p_h_x + (2*i-1) * (gruboscX/2 - 8) * mod_x, p_h_y, p_h_z + (2*i-1) * (gruboscZ/2 - 8) * !mod_x);
+
+ }
+
+
+ glEnd();
+
+ glDisable(GL_TEXTURE_2D);
+
+}
+
+//GLuint programID, VertexArrayID, MatrixID;
+lazik user(10.0f, 0.0f, 0.0f, "res/models/lazik4.obj"); // obiekty eksportujemy z Forward Axis Z, Up Axis Y.
+plane mapa( 0.0f, 0.0f, 0.0f, "res/models/mapka3_nofence_noplatform.obj");
void SetupRC() {
// Light values and coordinates
- //GLfloat ambientLight[] = { 0.3f, 0.3f, 0.3f, 1.0f };
- //GLfloat diffuseLight[] = { 0.7f, 0.7f, 0.7f, 1.0f };
- //GLfloat specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };
- //GLfloat lightPos[] = { 0.0f, 150.0f, 150.0f, 1.0f };
- //GLfloat specref[] = { 1.0f, 1.0f, 1.0f, 1.0f };
+ GLfloat ambientLight[] = { 0.3f, 0.3f, 0.3f, 1.0f};
+ GLfloat diffuseLight[] = { 0.7f, 0.7f, 0.7f, 1.0f};
+ GLfloat specular[] = { 1.0f, 1.0f, 1.0f, 1.0f};
+ GLfloat lightPos[] = {50.0f, -100.0f, 50.0f, 1.0f};
+ GLfloat specref[] = { 1.0f, 1.0f, 1.0f, 1.0f};
glEnable(GL_DEPTH_TEST); // Hidden surface removal
glFrontFace(GL_CCW); // Counter clock-wise polygons face out
- glEnable(GL_CULL_FACE); // Do not calculate inside of jet // !!! znacząco poprawia wydajność
+ //glEnable(GL_CULL_FACE); // Do not calculate inside of jet // !!! znacząco poprawia wydajność
+ glDepthFunc(GL_LESS);
// Enable lighting
- //glEnable(GL_LIGHTING);
+ glEnable(GL_LIGHTING);
// Setup and enable light 0
- //glLightfv(GL_LIGHT0, GL_AMBIENT, ambientLight);
- //glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuseLight);
- //glLightfv(GL_LIGHT0, GL_SPECULAR, specular);
- //glLightfv(GL_LIGHT0, GL_POSITION, lightPos);
- //glEnable(GL_LIGHT0);
+ glLightfv(GL_LIGHT0, GL_AMBIENT, ambientLight);
+ glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuseLight);
+ glLightfv(GL_LIGHT0, GL_SPECULAR, specular);
+ glLightfv(GL_LIGHT0, GL_POSITION, lightPos);
+ glEnable(GL_LIGHT0);
// Enable color tracking
- //glEnable(GL_COLOR_MATERIAL);
+ glEnable(GL_COLOR_MATERIAL);
// Set Material properties to follow glColor values
- //glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE);
+ glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE);
// All materials hereafter have full specular reflectivity
// with a high shine
- //glMaterialfv(GL_FRONT, GL_SPECULAR, specref);
- //glMateriali(GL_FRONT, GL_SHININESS, 128);
+ glMaterialfv(GL_FRONT, GL_SPECULAR, specref);
+ glMateriali(GL_FRONT, GL_SHININESS, 128);
// White background
glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
// Black brush
-
- glColor3f(0.0, 0.0, 0.0);
+ //glColor3f(0.0, 0.0, 0.0);
// Initialize GLEW
timestampedCout("Inicjalizowanie GLEW...");
@@ -300,6 +653,15 @@ void SetupRC() {
}
timestampedCout("Zainicjalizowano GLFW3.");
+ // glGenVertexArrays(1, &VertexArrayID);
+ // glBindVertexArray(VertexArrayID);
+
+ // Załaduj shadery
+
+ // programID = LoadShaders("res/shaders/TransformVertexShader.vertexshader", "res/shaders/TextureFragmentShader.fragmentshader");
+ // MatrixID = glGetUniformLocation(programID, "MVP");
+ // user.passProgramID(programID);
+
// Załaduj model z pliku .obj
timestampedCout("Ladowanie modelu lazika...");
@@ -310,7 +672,6 @@ void SetupRC() {
glfwSwapInterval(1);
//glClearColor(0.0f, 0.0f, 0.4f, 0.0f);
-
}
void RenderScene(void) {
@@ -323,8 +684,6 @@ void RenderScene(void) {
glRotatef(yRot, 0.0f, 1.0f, 0.0f);
glRotatef(zRot, 0.0f, 0.0f, 1.0f);
-
-
// gluLookAt(
// 0, 0, 0, // the position of your camera, in world space
// 0, 0, 0, // where you want to look at, in world space
@@ -342,7 +701,7 @@ void RenderScene(void) {
// prymitywny licznik FPS
if (monitormode) {
std::time_t now_t = std::time(nullptr);
- yRot -= 1; // showcase demo
+ //yRot -= 1; // showcase demo
if (now_t > monitormodehelper) {
std::cout << (int)(monitormodecounter / (now_t - monitormodehelper)) << " fps\n";
monitormodehelper = now_t;
@@ -357,6 +716,7 @@ void RenderScene(void) {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// Use our shader
+ //timestampedCout("programID wynosi " << programID);
//glUseProgram(programID);
// // Bind our texture in Texture Unit 0
@@ -371,29 +731,42 @@ void RenderScene(void) {
//############################################################################################
gluLookAt(
Foward - 50.0f * sin((Rotation + 180.0f) * GL_PI / 180.0f), // Pozycja kamery wokół łazika (w poziomie)
- CameraHeight, // Wysokość kamery
+ CameraHeight, // Wysokość kamery
Sides - 50.0f * cos((Rotation + 180.0f) * GL_PI / 180.0f), // Kamera wzdłuż osi X i Z
- Foward, 0.0f, Sides, // Punkt, na który patrzy kamera (łazik)
- 0.0f, 1.0f, 0.0f // Wektor "góry"
+ Foward, 0.0f, Sides, // Punkt, na który patrzy kamera (łazik)
+ 0.0f, 1.0f, 0.0f // Wektor "góry"
);
// Rysowanie mapy (nie porusza się)
glPushMatrix();
- glColor3f(0.0, 1.0, 0.0); // Zielony kolor dla mapy
- mapa.draw();
+ glColor3f(0.0, 1.0, 0.0); // Zielony kolor dla mapy
+ platforma(50.0f, 0.0f, 45.0f, 60.0f, 65.0f);
+ //mapa.draw();
glPopMatrix();
// Rysowanie łazika (porusza się i obraca)
glPushMatrix();
- glTranslatef(Foward, 0.0f, Sides); // Translacja łazika na jego pozycję
+ glTranslatef(Foward, 0.0f, Sides); // Translacja łazika na jego pozycję
glRotatef(Rotation, 0.0f, 1.0f, 0.0f); // Obrót łazika wokół własnej osi
- glColor3f(1.0, 0.0, 0.0); // Czerwony kolor dla łazika
+ glColor3f(1.0, 0.0, 0.0); // Czerwony kolor dla łazika
user.draw();
glPopMatrix();
+ //skrzynka(50);
+ plot(-10.0f, 3.0f, 45.0f, 130.0f, 4.0f, 0); // 0 - pionowo
+ plot( 50.0f, 3.0f, -20.0f, 120.0f, 4.0f, 1); // 1 - poziomo
+ plot(110.0f, 3.0f, 45.0f, 130.0f, 4.0f, 0);
+ plot( 50.0f, 3.0f, 110.0f, 120.0f, 4.0f, 1);
+
+ // stodola(2.0f, 0.0f, -7.5f, 20.0f);
+ stodola(10.0f, 0.0f, 2.0f, 40.0f);
// Zamiana buforów (double buffering)
-
+ //glColor3f(1.0, 0.0, 0.0);
+ //user.draw();
+ //glColor3f(0.0, 1.0, 0.0);
+ //mapa.draw();
+ //glColor3f(0.0, 0.0, 0.0);
// Swap buffers
//glfwSwapBuffers(window);
@@ -406,7 +779,7 @@ void RenderScene(void) {
glMatrixMode(GL_MODELVIEW); // zmniejsza zużycie GPU
// Flush drawing commands
- // glFlush();
+ //glFlush();
}
// If necessary, creates a 3-3-2 palette for the device context listed.
@@ -565,50 +938,89 @@ float radRotation = Rotation * GL_PI / 180.0f;
wglMakeCurrent(hDC, hRC);
SetupRC();
- /*
- glGenTextures(2, &texture[0]); // tworzy obiekt tekstury
+
+ glGenTextures(3, &texture[0]); // tworzy obiekt tekstury
- // ładuje pierwszy obraz tekstury:
- bitmapData = LoadBitmapFile((char*)"Bitmapy\\checker.bmp", &bitmapInfoHeader);
+ // ładuje pierwszy obraz tekstury (płotki):
+ bitmapData = LoadBitmapFile((char*)"res/img/woodenTextureHighExposure.bmp", &bitmapInfoHeader);
- glBindTexture(GL_TEXTURE_2D, texture[0]); // aktywuje obiekt tekstury
+ glBindTexture(GL_TEXTURE_2D, texture[0]); // aktywuje obiekt tekstury
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
+ // glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
+ // glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_MIRRORED_REPEAT);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_MIRRORED_REPEAT);
- // tworzy obraz tekstury
- glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, bitmapInfoHeader.biWidth,
- bitmapInfoHeader.biHeight, 0, GL_RGB, GL_UNSIGNED_BYTE, bitmapData);
+ // tworzy obraz tekstury
+ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, bitmapInfoHeader.biWidth,
+ bitmapInfoHeader.biHeight, 0, GL_RGB, GL_UNSIGNED_BYTE, bitmapData);
- if (bitmapData) free(bitmapData);
+ if (bitmapData) free(bitmapData);
- // ładuje drugi obraz tekstury:
- bitmapData = LoadBitmapFile((char*)"Bitmapy\\crate.bmp", &bitmapInfoHeader);
- glBindTexture(GL_TEXTURE_2D, texture[1]); // aktywuje obiekt tekstury
+ // ładuje drugi obraz tekstury (ziemia):
+ bitmapData = LoadBitmapFile((char*)"res/img/grass02.bmp", &bitmapInfoHeader);
+ glBindTexture(GL_TEXTURE_2D, texture[1]); // aktywuje obiekt tekstury
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_MIRRORED_REPEAT);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_MIRRORED_REPEAT);
- // tworzy obraz tekstury
- glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, bitmapInfoHeader.biWidth,
- bitmapInfoHeader.biHeight, 0, GL_RGB, GL_UNSIGNED_BYTE, bitmapData);
+ // tworzy obraz tekstury
+ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, bitmapInfoHeader.biWidth,
+ bitmapInfoHeader.biHeight, 0, GL_RGB, GL_UNSIGNED_BYTE, bitmapData);
- if (bitmapData) free(bitmapData);
+ if (bitmapData) free(bitmapData);
- // ustalenie sposobu mieszania tekstury z tłem
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+ // ładuje trzeci obraz tekstury (dach stodoły):
+ bitmapData = LoadBitmapFile((char*)"res/img/barnroof.bmp", &bitmapInfoHeader);
+ glBindTexture(GL_TEXTURE_2D, texture[2]); // aktywuje obiekt tekstury
- */
- break;
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
+
+ // tworzy obraz tekstury
+ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, bitmapInfoHeader.biWidth,
+ bitmapInfoHeader.biHeight, 0, GL_RGB, GL_UNSIGNED_BYTE, bitmapData);
+
+ if (bitmapData) free(bitmapData);
+
+ // ładuje czwarty obraz tekstury (kamienista ściana):
+ bitmapData = LoadBitmapFile((char*)"res/img/brickwall.bmp", &bitmapInfoHeader);
+ glBindTexture(GL_TEXTURE_2D, texture[3]); // aktywuje obiekt tekstury
+
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
+
+ // tworzy obraz tekstury
+ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, bitmapInfoHeader.biWidth,
+ bitmapInfoHeader.biHeight, 0, GL_RGB, GL_UNSIGNED_BYTE, bitmapData);
+
+ if (bitmapData) free(bitmapData);
+
+ // ustalenie sposobu mieszania tekstury z tłem
+ glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+
+
+ break;
// Window is being destroyed, cleanup
case WM_DESTROY:
+ user.unload();
+
+ //glDeleteProgram(programID);
+ //glDeleteVertexArrays(1, &VertexArrayID);
+
// Deselect the current rendering context and delete it
wglMakeCurrent(hDC, NULL);
wglDeleteContext(hRC);
diff --git a/plane.hpp b/plane.hpp
index 8262d91..90951c9 100644
--- a/plane.hpp
+++ b/plane.hpp
@@ -8,6 +8,7 @@
#include "timeh.hpp"
#include "GL/glm/glm.hpp"
#include "loadOBJ.h"
+#include "texture.hpp"
class plane {
private:
diff --git a/res/img/barnroof.bmp b/res/img/barnroof.bmp
new file mode 100644
index 0000000..b336372
Binary files /dev/null and b/res/img/barnroof.bmp differ
diff --git a/res/img/brickwall.bmp b/res/img/brickwall.bmp
new file mode 100644
index 0000000..921c6c4
Binary files /dev/null and b/res/img/brickwall.bmp differ
diff --git a/res/img/grass01.bmp b/res/img/grass01.bmp
new file mode 100644
index 0000000..3541563
Binary files /dev/null and b/res/img/grass01.bmp differ
diff --git a/res/img/grass02.bmp b/res/img/grass02.bmp
new file mode 100644
index 0000000..95ca136
Binary files /dev/null and b/res/img/grass02.bmp differ
diff --git a/res/img/t01.bmp b/res/img/t01.bmp
new file mode 100644
index 0000000..74bc23e
Binary files /dev/null and b/res/img/t01.bmp differ
diff --git a/res/img/t02.bmp b/res/img/t02.bmp
new file mode 100644
index 0000000..647855f
Binary files /dev/null and b/res/img/t02.bmp differ
diff --git a/res/img/woodenTexture.bmp b/res/img/woodenTexture.bmp
new file mode 100644
index 0000000..5a78b89
Binary files /dev/null and b/res/img/woodenTexture.bmp differ
diff --git a/res/img/woodenTextureHighExposure.bmp b/res/img/woodenTextureHighExposure.bmp
new file mode 100644
index 0000000..24c4163
Binary files /dev/null and b/res/img/woodenTextureHighExposure.bmp differ
diff --git a/res/models/cube.obj b/res/models/cube.obj
index d51668e..7b0df71 100644
--- a/res/models/cube.obj
+++ b/res/models/cube.obj
@@ -1,44 +1,47 @@
-# Blender 4.2.1 LTS
-# www.blender.org
-o Cube
-v 1.000000 1.000000 -1.000000
+# Blender3D v249 OBJ File: untitled.blend
+# www.blender3d.org
+mtllib cube.mtl
v 1.000000 -1.000000 -1.000000
-v 1.000000 1.000000 1.000000
v 1.000000 -1.000000 1.000000
-v -1.000000 1.000000 -1.000000
-v -1.000000 -1.000000 -1.000000
-v -1.000000 1.000000 1.000000
v -1.000000 -1.000000 1.000000
-vn -0.0000 1.0000 -0.0000
-vn -0.0000 -0.0000 1.0000
-vn -1.0000 -0.0000 -0.0000
-vn -0.0000 -1.0000 -0.0000
-vn 1.0000 -0.0000 -0.0000
-vn -0.0000 -0.0000 -1.0000
-vt 0.875000 0.500000
-vt 0.625000 0.750000
-vt 0.625000 0.500000
-vt 0.375000 1.000000
-vt 0.375000 0.750000
-vt 0.625000 0.000000
-vt 0.375000 0.250000
-vt 0.375000 0.000000
-vt 0.375000 0.500000
-vt 0.125000 0.750000
-vt 0.125000 0.500000
-vt 0.625000 0.250000
-vt 0.875000 0.750000
-vt 0.625000 1.000000
-s 0
-f 5/1/1 3/2/1 1/3/1
-f 3/2/2 8/4/2 4/5/2
-f 7/6/3 6/7/3 8/8/3
-f 2/9/4 8/10/4 6/11/4
-f 1/3/5 4/5/5 2/9/5
-f 5/12/6 2/9/6 6/7/6
-f 5/1/1 7/13/1 3/2/1
-f 3/2/2 7/14/2 8/4/2
-f 7/6/3 5/12/3 6/7/3
-f 2/9/4 4/5/4 8/10/4
-f 1/3/5 3/2/5 4/5/5
-f 5/12/6 1/3/6 2/9/6
+v -1.000000 -1.000000 -1.000000
+v 1.000000 1.000000 -1.000000
+v 0.999999 1.000000 1.000001
+v -1.000000 1.000000 1.000000
+v -1.000000 1.000000 -1.000000
+vt 0.748573 0.750412
+vt 0.749279 0.501284
+vt 0.999110 0.501077
+vt 0.999455 0.750380
+vt 0.250471 0.500702
+vt 0.249682 0.749677
+vt 0.001085 0.750380
+vt 0.001517 0.499994
+vt 0.499422 0.500239
+vt 0.500149 0.750166
+vt 0.748355 0.998230
+vt 0.500193 0.998728
+vt 0.498993 0.250415
+vt 0.748953 0.250920
+vn 0.000000 0.000000 -1.000000
+vn -1.000000 -0.000000 -0.000000
+vn -0.000000 -0.000000 1.000000
+vn -0.000001 0.000000 1.000000
+vn 1.000000 -0.000000 0.000000
+vn 1.000000 0.000000 0.000001
+vn 0.000000 1.000000 -0.000000
+vn -0.000000 -1.000000 0.000000
+usemtl Material_ray.png
+s off
+f 5/1/1 1/2/1 4/3/1
+f 5/1/1 4/3/1 8/4/1
+f 3/5/2 7/6/2 8/7/2
+f 3/5/2 8/7/2 4/8/2
+f 2/9/3 6/10/3 3/5/3
+f 6/10/4 7/6/4 3/5/4
+f 1/2/5 5/1/5 2/9/5
+f 5/1/6 6/10/6 2/9/6
+f 5/1/7 8/11/7 6/10/7
+f 8/11/7 7/12/7 6/10/7
+f 1/2/8 2/9/8 3/13/8
+f 1/2/8 3/13/8 4/14/8
diff --git a/res/models/kostka.obj b/res/models/kostka.obj
new file mode 100644
index 0000000..d51668e
--- /dev/null
+++ b/res/models/kostka.obj
@@ -0,0 +1,44 @@
+# Blender 4.2.1 LTS
+# www.blender.org
+o Cube
+v 1.000000 1.000000 -1.000000
+v 1.000000 -1.000000 -1.000000
+v 1.000000 1.000000 1.000000
+v 1.000000 -1.000000 1.000000
+v -1.000000 1.000000 -1.000000
+v -1.000000 -1.000000 -1.000000
+v -1.000000 1.000000 1.000000
+v -1.000000 -1.000000 1.000000
+vn -0.0000 1.0000 -0.0000
+vn -0.0000 -0.0000 1.0000
+vn -1.0000 -0.0000 -0.0000
+vn -0.0000 -1.0000 -0.0000
+vn 1.0000 -0.0000 -0.0000
+vn -0.0000 -0.0000 -1.0000
+vt 0.875000 0.500000
+vt 0.625000 0.750000
+vt 0.625000 0.500000
+vt 0.375000 1.000000
+vt 0.375000 0.750000
+vt 0.625000 0.000000
+vt 0.375000 0.250000
+vt 0.375000 0.000000
+vt 0.375000 0.500000
+vt 0.125000 0.750000
+vt 0.125000 0.500000
+vt 0.625000 0.250000
+vt 0.875000 0.750000
+vt 0.625000 1.000000
+s 0
+f 5/1/1 3/2/1 1/3/1
+f 3/2/2 8/4/2 4/5/2
+f 7/6/3 6/7/3 8/8/3
+f 2/9/4 8/10/4 6/11/4
+f 1/3/5 4/5/5 2/9/5
+f 5/12/6 2/9/6 6/7/6
+f 5/1/1 7/13/1 3/2/1
+f 3/2/2 7/14/2 8/4/2
+f 7/6/3 5/12/3 6/7/3
+f 2/9/4 4/5/4 8/10/4
+f 1/3/5 3/2/5 4/5/5
+f 5/12/6 1/3/6 2/9/6
diff --git a/res/models/kostkawieksza.obj b/res/models/kostkawieksza.obj
new file mode 100644
index 0000000..5e7aaae
--- /dev/null
+++ b/res/models/kostkawieksza.obj
@@ -0,0 +1,44 @@
+# Blender 4.2.1 LTS
+# www.blender.org
+o Cube
+v 10.000000 10.000000 -10.000000
+v 10.000000 -10.000000 -10.000000
+v 10.000000 10.000000 10.000000
+v 10.000000 -10.000000 10.000000
+v -10.000000 10.000000 -10.000000
+v -10.000000 -10.000000 -10.000000
+v -10.000000 10.000000 10.000000
+v -10.000000 -10.000000 10.000000
+vn -0.0000 1.0000 -0.0000
+vn -0.0000 -0.0000 1.0000
+vn -1.0000 -0.0000 -0.0000
+vn -0.0000 -1.0000 -0.0000
+vn 1.0000 -0.0000 -0.0000
+vn -0.0000 -0.0000 -1.0000
+vt 0.500000 0.250000
+vt 0.750000 0.500000
+vt 0.500000 0.500000
+vt 1.000000 0.750000
+vt 0.750000 0.750000
+vt 0.000000 0.500000
+vt 0.250000 0.750000
+vt 0.000000 0.750000
+vt 0.500000 0.750000
+vt 0.750000 1.000000
+vt 0.500000 1.000000
+vt 0.250000 0.500000
+vt 0.750000 0.250000
+vt 1.000000 0.500000
+s 0
+f 5/1/1 3/2/1 1/3/1
+f 3/2/2 8/4/2 4/5/2
+f 7/6/3 6/7/3 8/8/3
+f 2/9/4 8/10/4 6/11/4
+f 1/3/5 4/5/5 2/9/5
+f 5/12/6 2/9/6 6/7/6
+f 5/1/1 7/13/1 3/2/1
+f 3/2/2 7/14/2 8/4/2
+f 7/6/3 5/12/3 6/7/3
+f 2/9/4 4/5/4 8/10/4
+f 1/3/5 3/2/5 4/5/5
+f 5/12/6 1/3/6 2/9/6
diff --git a/res/models/mapka2.obj b/res/models/mapka2.obj
index 16ef465..c89400d 100644
--- a/res/models/mapka2.obj
+++ b/res/models/mapka2.obj
@@ -1,20 +1,20 @@
# Blender 4.2.1 LTS
# www.blender.org
o platforma
-v 220.000000 0.000000 20.000000
-v 220.000000 -4.000000 20.000000
-v -40.000000 0.000000 20.000000
-v -40.000000 -4.000000 20.000000
-v 220.000000 0.000000 -220.000000
-v 220.000000 -4.000000 -220.000000
-v -40.000000 0.000000 -220.000000
-v -40.000000 -4.000000 -220.000000
+v -10.000000 0.000000 110.000000
+v -10.000000 -2.000000 110.000000
+v -10.000000 0.000000 -20.000000
+v -10.000000 -2.000000 -20.000000
+v 110.000000 0.000000 110.000000
+v 110.000000 -2.000000 110.000000
+v 110.000000 0.000000 -20.000000
+v 110.000000 -2.000000 -20.000000
vn -0.0000 1.0000 -0.0000
-vn -1.0000 -0.0000 -0.0000
vn -0.0000 -0.0000 -1.0000
-vn -0.0000 -1.0000 -0.0000
-vn -0.0000 -0.0000 1.0000
vn 1.0000 -0.0000 -0.0000
+vn -0.0000 -1.0000 -0.0000
+vn -1.0000 -0.0000 -0.0000
+vn -0.0000 -0.0000 1.0000
vt 0.875000 0.500000
vt 0.625000 0.750000
vt 0.625000 0.500000
@@ -43,70 +43,70 @@ f 2/9/4 4/5/4 8/10/4
f 1/3/5 3/2/5 4/5/5
f 5/12/6 1/3/6 2/9/6
o szopa
-v -38.000000 0.000000 -20.000000
-v -38.000000 42.000000 -20.000000
-v -2.000000 0.000000 -20.000000
-v -2.000000 42.000000 -20.000000
-v -38.000000 0.000000 18.000000
-v -38.000000 42.000000 18.000000
-v -2.000000 0.000000 18.000000
-v -2.000000 42.000000 18.000000
-v -6.000000 0.000000 -20.000000
-v -34.000000 0.000000 -20.000000
-v -38.000000 4.666666 -20.000000
-v -38.000000 9.333333 -20.000000
-v -38.000000 14.000000 -20.000000
-v -38.000000 18.666668 -20.000000
-v -38.000000 23.333334 -20.000000
-v -38.000000 28.000000 -20.000000
-v -38.000000 32.666668 -20.000000
-v -38.000000 37.333336 -20.000000
-v -34.000000 42.000000 -20.000000
-v -30.000000 42.000000 -20.000000
-v -26.000000 42.000000 -20.000000
-v -22.000000 42.000000 -20.000000
-v -18.000000 42.000000 -20.000000
-v -14.000000 42.000000 -20.000000
-v -10.000000 42.000000 -20.000000
-v -6.000000 42.000000 -20.000000
-v -2.000000 37.333336 -20.000000
-v -2.000000 32.666668 -20.000000
-v -2.000000 28.000000 -20.000000
-v -2.000000 23.333332 -20.000000
-v -2.000000 18.666666 -20.000000
-v -2.000000 14.000000 -20.000000
-v -2.000000 9.333333 -20.000000
-v -2.000000 4.666666 -20.000000
-v -34.000000 4.666666 -20.000000
-v -6.000000 4.666666 -20.000000
-v -34.000000 9.333333 -20.000000
-v -6.000000 9.333333 -20.000000
-v -34.000000 14.000000 -20.000000
-v -6.000000 14.000000 -20.000000
-v -34.000000 18.666668 -20.000000
-v -30.000000 18.666668 -20.000000
-v -10.000000 18.666666 -20.000000
-v -6.000000 18.666666 -20.000000
-v -34.000000 23.333334 -20.000000
-v -30.000000 23.333334 -20.000000
-v -26.000000 23.333334 -20.000000
-v -22.000000 23.333334 -20.000000
-v -18.000000 23.333334 -20.000000
-v -14.000000 23.333334 -20.000000
-v -10.000000 23.333334 -20.000000
-v -6.000000 23.333332 -20.000000
-v -38.000000 42.000000 -20.000000
-v -2.000000 42.000000 -20.000000
-v -38.000000 42.000000 18.000000
-v -2.000000 42.000000 18.000000
-v -20.000000 64.000000 -20.000000
-v -20.000000 64.000000 18.000000
-vn 1.0000 -0.0000 -0.0000
+v 10.000000 0.000000 -19.000000
+v 10.000000 21.000000 -19.000000
+v 10.000000 0.000000 -1.000000
+v 10.000000 21.000000 -1.000000
+v -9.000000 0.000000 -19.000000
+v -9.000000 21.000000 -19.000000
+v -9.000000 0.000000 -1.000000
+v -9.000000 21.000000 -1.000000
+v 10.000000 0.000000 -3.000000
+v 10.000000 0.000000 -17.000000
+v 10.000000 2.333333 -19.000000
+v 10.000000 4.666667 -19.000000
+v 10.000000 7.000000 -19.000000
+v 10.000000 9.333334 -19.000000
+v 10.000000 11.666667 -19.000000
+v 10.000000 14.000000 -19.000000
+v 10.000000 16.333334 -19.000000
+v 10.000000 18.666668 -19.000000
+v 10.000000 21.000000 -17.000000
+v 10.000000 21.000000 -15.000000
+v 10.000000 21.000000 -13.000000
+v 10.000000 21.000000 -11.000000
+v 10.000000 21.000000 -9.000000
+v 10.000000 21.000000 -7.000000
+v 10.000000 21.000000 -5.000000
+v 10.000000 21.000000 -3.000000
+v 10.000000 18.666668 -1.000000
+v 10.000000 16.333334 -1.000000
+v 10.000000 14.000000 -1.000000
+v 10.000000 11.666666 -1.000000
+v 10.000000 9.333333 -1.000000
+v 10.000000 7.000000 -1.000000
+v 10.000000 4.666667 -1.000000
+v 10.000000 2.333333 -1.000000
+v 10.000000 2.333333 -17.000000
+v 10.000000 2.333333 -3.000000
+v 10.000000 4.666667 -17.000000
+v 10.000000 4.666667 -3.000000
+v 10.000000 7.000000 -17.000000
+v 10.000000 7.000000 -3.000000
+v 10.000000 9.333334 -17.000000
+v 10.000000 9.333334 -15.000000
+v 10.000000 9.333333 -5.000000
+v 10.000000 9.333333 -3.000000
+v 10.000000 11.666667 -17.000000
+v 10.000000 11.666667 -15.000000
+v 10.000000 11.666667 -13.000000
+v 10.000000 11.666667 -11.000000
+v 10.000000 11.666667 -9.000000
+v 10.000000 11.666667 -7.000000
+v 10.000000 11.666667 -5.000000
+v 10.000000 11.666666 -3.000000
+v 10.000000 21.000000 -19.000000
+v 10.000000 21.000000 -1.000000
+v -9.000000 21.000000 -19.000000
+v -9.000000 21.000000 -1.000000
+v 10.000000 32.000000 -10.000000
+v -9.000000 32.000000 -10.000000
vn -0.0000 -0.0000 1.0000
vn -1.0000 -0.0000 -0.0000
vn -0.0000 -0.0000 -1.0000
-vn -0.7740 0.6332 -0.0000
-vn 0.7740 0.6332 -0.0000
+vn 1.0000 -0.0000 -0.0000
+vn -0.0000 0.6332 -0.7740
+vn -0.0000 0.6332 0.7740
vt 0.513889 0.250000
vt 0.541667 0.250000
vt 0.375000 0.500000
@@ -266,26 +266,26 @@ f 24/36/10 25/89/10 27/37/10
f 66/44/11 65/90/11 61/45/11
f 62/47/12 65/91/12 66/48/12
o plot_baza1
-v -46.000000 2.000000 19.000000
-v -46.000000 8.000000 19.000000
-v 226.000000 2.000000 19.000000
-v 226.000000 8.000000 19.000000
-v -46.000000 2.000000 21.000000
-v -46.000000 8.000000 21.000000
-v 226.000000 2.000000 21.000000
-v 226.000000 8.000000 21.000000
-v -46.000000 10.000000 19.000000
-v -46.000000 16.000000 19.000000
-v 226.000000 10.000000 19.000000
-v 226.000000 16.000000 19.000000
-v -46.000000 10.000000 21.000000
-v -46.000000 16.000000 21.000000
-v 226.000000 10.000000 21.000000
-v 226.000000 16.000000 21.000000
-vn -0.0000 -0.0000 -1.0000
+v -9.500000 1.000000 -23.000000
+v -9.500000 4.000000 -23.000000
+v -9.500000 1.000000 113.000000
+v -9.500000 4.000000 113.000000
+v -10.500000 1.000000 -23.000000
+v -10.500000 4.000000 -23.000000
+v -10.500000 1.000000 113.000000
+v -10.500000 4.000000 113.000000
+v -9.500000 5.000000 -23.000000
+v -9.500000 8.000000 -23.000000
+v -9.500000 5.000000 113.000000
+v -9.500000 8.000000 113.000000
+v -10.500000 5.000000 -23.000000
+v -10.500000 8.000000 -23.000000
+v -10.500000 5.000000 113.000000
+v -10.500000 8.000000 113.000000
vn 1.0000 -0.0000 -0.0000
vn -0.0000 -0.0000 1.0000
vn -1.0000 -0.0000 -0.0000
+vn -0.0000 -0.0000 -1.0000
vn -0.0000 -1.0000 -0.0000
vn -0.0000 1.0000 -0.0000
vt 0.625000 0.000000
@@ -328,26 +328,26 @@ f 80/99/16 76/104/16 75/100/16
f 81/96/17 79/98/17 75/101/17
f 78/103/18 76/105/18 80/99/18
o plot_baza2
-v -46.000000 2.000000 -223.000000
-v -46.000000 8.000000 -223.000000
-v 226.000000 2.000000 -223.000000
-v 226.000000 8.000000 -223.000000
-v -46.000000 2.000000 -221.000000
-v -46.000000 8.000000 -221.000000
-v 226.000000 2.000000 -221.000000
-v 226.000000 8.000000 -221.000000
-v -46.000000 10.000000 -223.000000
-v -46.000000 16.000000 -223.000000
-v 226.000000 10.000000 -223.000000
-v 226.000000 16.000000 -223.000000
-v -46.000000 10.000000 -221.000000
-v -46.000000 16.000000 -221.000000
-v 226.000000 10.000000 -221.000000
-v 226.000000 16.000000 -221.000000
-vn -0.0000 -0.0000 -1.0000
+v 111.500000 1.000000 -23.000000
+v 111.500000 4.000000 -23.000000
+v 111.500000 1.000000 113.000000
+v 111.500000 4.000000 113.000000
+v 110.500000 1.000000 -23.000000
+v 110.500000 4.000000 -23.000000
+v 110.500000 1.000000 113.000000
+v 110.500000 4.000000 113.000000
+v 111.500000 5.000000 -23.000000
+v 111.500000 8.000000 -23.000000
+v 111.500000 5.000000 113.000000
+v 111.500000 8.000000 113.000000
+v 110.500000 5.000000 -23.000000
+v 110.500000 8.000000 -23.000000
+v 110.500000 5.000000 113.000000
+v 110.500000 8.000000 113.000000
vn 1.0000 -0.0000 -0.0000
vn -0.0000 -0.0000 1.0000
vn -1.0000 -0.0000 -0.0000
+vn -0.0000 -0.0000 -1.0000
vn -0.0000 -1.0000 -0.0000
vn -0.0000 1.0000 -0.0000
vt 0.625000 0.000000
@@ -390,26 +390,26 @@ f 96/113/22 92/118/22 91/114/22
f 97/110/23 95/112/23 91/115/23
f 94/117/24 92/119/24 96/113/24
o plot_baza3
-v -42.999992 2.000000 24.000000
-v -42.999992 8.000000 24.000000
-v -43.000008 2.000000 -226.000000
-v -43.000008 8.000000 -226.000000
-v -40.999992 2.000000 24.000000
-v -40.999992 8.000000 24.000000
-v -41.000008 2.000000 -226.000000
-v -41.000008 8.000000 -226.000000
-v -42.999992 10.000000 24.000000
-v -42.999992 16.000000 24.000000
-v -43.000008 10.000000 -226.000000
-v -43.000008 16.000000 -226.000000
-v -40.999992 10.000000 24.000000
-v -40.999992 16.000000 24.000000
-v -41.000008 10.000000 -226.000000
-v -41.000008 16.000000 -226.000000
-vn -1.0000 -0.0000 -0.0000
+v -12.000000 1.000000 -21.499996
+v -12.000000 4.000000 -21.499996
+v 113.000000 1.000000 -21.500004
+v 113.000000 4.000000 -21.500004
+v -12.000000 1.000000 -20.499996
+v -12.000000 4.000000 -20.499996
+v 113.000000 1.000000 -20.500004
+v 113.000000 4.000000 -20.500004
+v -12.000000 5.000000 -21.499996
+v -12.000000 8.000000 -21.499996
+v 113.000000 5.000000 -21.500004
+v 113.000000 8.000000 -21.500004
+v -12.000000 5.000000 -20.499996
+v -12.000000 8.000000 -20.499996
+v 113.000000 5.000000 -20.500004
+v 113.000000 8.000000 -20.500004
vn -0.0000 -0.0000 -1.0000
vn 1.0000 -0.0000 -0.0000
vn -0.0000 -0.0000 1.0000
+vn -1.0000 -0.0000 -0.0000
vn -0.0000 -1.0000 -0.0000
vn -0.0000 1.0000 -0.0000
vt 0.625000 0.000000
@@ -452,26 +452,26 @@ f 112/127/28 108/132/28 107/128/28
f 113/124/29 111/126/29 107/129/29
f 110/131/30 108/133/30 112/127/30
o plot_baza4
-v 221.000000 2.000000 24.000000
-v 221.000000 8.000000 24.000000
-v 221.000000 2.000000 -226.000000
-v 221.000000 8.000000 -226.000000
-v 223.000000 2.000000 24.000000
-v 223.000000 8.000000 24.000000
-v 223.000000 2.000000 -226.000000
-v 223.000000 8.000000 -226.000000
-v 221.000000 10.000000 24.000000
-v 221.000000 16.000000 24.000000
-v 221.000000 10.000000 -226.000000
-v 221.000000 16.000000 -226.000000
-v 223.000000 10.000000 24.000000
-v 223.000000 16.000000 24.000000
-v 223.000000 10.000000 -226.000000
-v 223.000000 16.000000 -226.000000
-vn -1.0000 -0.0000 -0.0000
+v -12.000000 1.000000 110.500000
+v -12.000000 4.000000 110.500000
+v 113.000000 1.000000 110.500000
+v 113.000000 4.000000 110.500000
+v -12.000000 1.000000 111.500000
+v -12.000000 4.000000 111.500000
+v 113.000000 1.000000 111.500000
+v 113.000000 4.000000 111.500000
+v -12.000000 5.000000 110.500000
+v -12.000000 8.000000 110.500000
+v 113.000000 5.000000 110.500000
+v 113.000000 8.000000 110.500000
+v -12.000000 5.000000 111.500000
+v -12.000000 8.000000 111.500000
+v 113.000000 5.000000 111.500000
+v 113.000000 8.000000 111.500000
vn -0.0000 -0.0000 -1.0000
vn 1.0000 -0.0000 -0.0000
vn -0.0000 -0.0000 1.0000
+vn -1.0000 -0.0000 -0.0000
vn -0.0000 -1.0000 -0.0000
vn -0.0000 1.0000 -0.0000
vt 0.625000 0.000000
@@ -514,58 +514,58 @@ f 128/141/34 124/146/34 123/142/34
f 129/138/35 127/140/35 123/143/35
f 126/145/36 124/147/36 128/141/36
o plot_trzon1
-v -1.000000 -1.000000 21.000000
-v -1.000000 17.000000 21.000000
-v 3.000000 -1.000000 21.000000
-v 3.000000 17.000000 21.000000
-v -1.000000 -1.000000 23.000000
-v -1.000000 17.000000 23.000000
-v 3.000000 -1.000000 23.000000
-v 3.000000 17.000000 23.000000
-v 39.000000 -1.000000 21.000000
-v 39.000000 17.000000 21.000000
-v 43.000000 -1.000000 21.000000
-v 43.000000 17.000000 21.000000
-v 39.000000 -1.000000 23.000000
-v 39.000000 17.000000 23.000000
-v 43.000000 -1.000000 23.000000
-v 43.000000 17.000000 23.000000
-v 79.000000 -1.000000 21.000000
-v 79.000000 17.000000 21.000000
-v 83.000000 -1.000000 21.000000
-v 83.000000 17.000000 21.000000
-v 79.000000 -1.000000 23.000000
-v 79.000000 17.000000 23.000000
-v 83.000000 -1.000000 23.000000
-v 83.000000 17.000000 23.000000
-v 119.000000 -1.000000 21.000000
-v 119.000000 17.000000 21.000000
-v 123.000000 -1.000000 21.000000
-v 123.000000 17.000000 21.000000
-v 119.000000 -1.000000 23.000000
-v 119.000000 17.000000 23.000000
-v 123.000000 -1.000000 23.000000
-v 123.000000 17.000000 23.000000
-v 159.000000 -1.000000 21.000000
-v 159.000000 17.000000 21.000000
-v 163.000000 -1.000000 21.000000
-v 163.000000 17.000000 21.000000
-v 159.000000 -1.000000 23.000000
-v 159.000000 17.000000 23.000000
-v 163.000000 -1.000000 23.000000
-v 163.000000 17.000000 23.000000
-v 199.000000 -1.000000 21.000000
-v 199.000000 17.000000 21.000000
-v 203.000000 -1.000000 21.000000
-v 203.000000 17.000000 21.000000
-v 199.000000 -1.000000 23.000000
-v 199.000000 17.000000 23.000000
-v 203.000000 -1.000000 23.000000
-v 203.000000 17.000000 23.000000
-vn -0.0000 -0.0000 -1.0000
+v -10.500000 -0.500000 -0.500000
+v -10.500000 8.500000 -0.500000
+v -10.500000 -0.500000 1.500000
+v -10.500000 8.500000 1.500000
+v -11.500000 -0.500000 -0.500000
+v -11.500000 8.500000 -0.500000
+v -11.500000 -0.500000 1.500000
+v -11.500000 8.500000 1.500000
+v -10.500000 -0.500000 19.500000
+v -10.500000 8.500000 19.500000
+v -10.500000 -0.500000 21.500000
+v -10.500000 8.500000 21.500000
+v -11.500000 -0.500000 19.500000
+v -11.500000 8.500000 19.500000
+v -11.500000 -0.500000 21.500000
+v -11.500000 8.500000 21.500000
+v -10.500000 -0.500000 39.500000
+v -10.500000 8.500000 39.500000
+v -10.500000 -0.500000 41.500000
+v -10.500000 8.500000 41.500000
+v -11.500000 -0.500000 39.500000
+v -11.500000 8.500000 39.500000
+v -11.500000 -0.500000 41.500000
+v -11.500000 8.500000 41.500000
+v -10.500000 -0.500000 59.500000
+v -10.500000 8.500000 59.500000
+v -10.500000 -0.500000 61.500000
+v -10.500000 8.500000 61.500000
+v -11.500000 -0.500000 59.500000
+v -11.500000 8.500000 59.500000
+v -11.500000 -0.500000 61.500000
+v -11.500000 8.500000 61.500000
+v -10.500000 -0.500000 79.500000
+v -10.500000 8.500000 79.500000
+v -10.500000 -0.500000 81.500000
+v -10.500000 8.500000 81.500000
+v -11.500000 -0.500000 79.500000
+v -11.500000 8.500000 79.500000
+v -11.500000 -0.500000 81.500000
+v -11.500000 8.500000 81.500000
+v -10.500000 -0.500000 99.500000
+v -10.500000 8.500000 99.500000
+v -10.500000 -0.500000 101.500000
+v -10.500000 8.500000 101.500000
+v -11.500000 -0.500000 99.500000
+v -11.500000 8.500000 99.500000
+v -11.500000 -0.500000 101.500000
+v -11.500000 8.500000 101.500000
vn 1.0000 -0.0000 -0.0000
vn -0.0000 -0.0000 1.0000
vn -1.0000 -0.0000 -0.0000
+vn -0.0000 -0.0000 -1.0000
vn -0.0000 -1.0000 -0.0000
vn -0.0000 1.0000 -0.0000
vt 0.625000 0.000000
@@ -656,58 +656,58 @@ f 176/155/40 172/160/40 171/156/40
f 177/152/41 175/154/41 171/157/41
f 174/159/42 172/161/42 176/155/42
o plot_trzon4
-v 224.000000 -1.000000 -2.000000
-v 224.000000 17.000000 -2.000000
-v 224.000000 -1.000000 -6.000000
-v 224.000000 17.000000 -6.000000
-v 226.000000 -1.000000 -2.000000
-v 226.000000 17.000000 -2.000000
-v 226.000000 -1.000000 -6.000000
-v 226.000000 17.000000 -6.000000
-v 224.000000 -1.000000 -42.000000
-v 224.000000 17.000000 -42.000000
-v 224.000000 -1.000000 -46.000000
-v 224.000000 17.000000 -46.000000
-v 226.000000 -1.000000 -42.000000
-v 226.000000 17.000000 -42.000000
-v 226.000000 -1.000000 -46.000000
-v 226.000000 17.000000 -46.000000
-v 224.000000 -1.000000 -82.000000
-v 224.000000 17.000000 -82.000000
-v 224.000000 -1.000000 -86.000000
-v 224.000000 17.000000 -86.000000
-v 226.000000 -1.000000 -82.000000
-v 226.000000 17.000000 -82.000000
-v 226.000000 -1.000000 -86.000000
-v 226.000000 17.000000 -86.000000
-v 224.000000 -1.000000 -122.000000
-v 224.000000 17.000000 -122.000000
-v 224.000000 -1.000000 -126.000000
-v 224.000000 17.000000 -126.000000
-v 226.000000 -1.000000 -122.000000
-v 226.000000 17.000000 -122.000000
-v 226.000000 -1.000000 -126.000000
-v 226.000000 17.000000 -126.000000
-v 224.000000 -1.000000 -162.000000
-v 224.000000 17.000000 -162.000000
-v 224.000000 -1.000000 -166.000000
-v 224.000000 17.000000 -166.000000
-v 226.000000 -1.000000 -162.000000
-v 226.000000 17.000000 -162.000000
-v 226.000000 -1.000000 -166.000000
-v 226.000000 17.000000 -166.000000
-v 224.000000 -1.000000 -202.000000
-v 224.000000 17.000000 -202.000000
-v 224.000000 -1.000000 -206.000000
-v 224.000000 17.000000 -206.000000
-v 226.000000 -1.000000 -202.000000
-v 226.000000 17.000000 -202.000000
-v 226.000000 -1.000000 -206.000000
-v 226.000000 17.000000 -206.000000
-vn -1.0000 -0.0000 -0.0000
+v 1.000000 -0.500000 112.000000
+v 1.000000 8.500000 112.000000
+v 3.000000 -0.500000 112.000000
+v 3.000000 8.500000 112.000000
+v 1.000000 -0.500000 113.000000
+v 1.000000 8.500000 113.000000
+v 3.000000 -0.500000 113.000000
+v 3.000000 8.500000 113.000000
+v 21.000000 -0.500000 112.000000
+v 21.000000 8.500000 112.000000
+v 23.000000 -0.500000 112.000000
+v 23.000000 8.500000 112.000000
+v 21.000000 -0.500000 113.000000
+v 21.000000 8.500000 113.000000
+v 23.000000 -0.500000 113.000000
+v 23.000000 8.500000 113.000000
+v 41.000000 -0.500000 112.000000
+v 41.000000 8.500000 112.000000
+v 43.000000 -0.500000 112.000000
+v 43.000000 8.500000 112.000000
+v 41.000000 -0.500000 113.000000
+v 41.000000 8.500000 113.000000
+v 43.000000 -0.500000 113.000000
+v 43.000000 8.500000 113.000000
+v 61.000000 -0.500000 112.000000
+v 61.000000 8.500000 112.000000
+v 63.000000 -0.500000 112.000000
+v 63.000000 8.500000 112.000000
+v 61.000000 -0.500000 113.000000
+v 61.000000 8.500000 113.000000
+v 63.000000 -0.500000 113.000000
+v 63.000000 8.500000 113.000000
+v 81.000000 -0.500000 112.000000
+v 81.000000 8.500000 112.000000
+v 83.000000 -0.500000 112.000000
+v 83.000000 8.500000 112.000000
+v 81.000000 -0.500000 113.000000
+v 81.000000 8.500000 113.000000
+v 83.000000 -0.500000 113.000000
+v 83.000000 8.500000 113.000000
+v 101.000000 -0.500000 112.000000
+v 101.000000 8.500000 112.000000
+v 103.000000 -0.500000 112.000000
+v 103.000000 8.500000 112.000000
+v 101.000000 -0.500000 113.000000
+v 101.000000 8.500000 113.000000
+v 103.000000 -0.500000 113.000000
+v 103.000000 8.500000 113.000000
vn -0.0000 -0.0000 -1.0000
vn 1.0000 -0.0000 -0.0000
vn -0.0000 -0.0000 1.0000
+vn -1.0000 -0.0000 -0.0000
vn -0.0000 -1.0000 -0.0000
vn -0.0000 1.0000 -0.0000
vt 0.625000 0.000000
@@ -798,66 +798,66 @@ f 224/169/46 220/174/46 219/170/46
f 225/166/47 223/168/47 219/171/47
f 222/173/48 220/175/48 224/169/48
o plot_trzon2
-v 7.000000 -1.000000 -225.000000
-v 7.000000 17.000000 -225.000000
-v 11.000000 -1.000000 -225.000000
-v 11.000000 17.000000 -225.000000
-v 7.000000 -1.000000 -223.000000
-v 7.000000 17.000000 -223.000000
-v 11.000000 -1.000000 -223.000000
-v 11.000000 17.000000 -223.000000
-v 47.000000 -1.000000 -225.000000
-v 47.000000 17.000000 -225.000000
-v 51.000000 -1.000000 -225.000000
-v 51.000000 17.000000 -225.000000
-v 47.000000 -1.000000 -223.000000
-v 47.000000 17.000000 -223.000000
-v 51.000000 -1.000000 -223.000000
-v 51.000000 17.000000 -223.000000
-v 87.000000 -1.000000 -225.000000
-v 87.000000 17.000000 -225.000000
-v 91.000000 -1.000000 -225.000000
-v 91.000000 17.000000 -225.000000
-v 87.000000 -1.000000 -223.000000
-v 87.000000 17.000000 -223.000000
-v 91.000000 -1.000000 -223.000000
-v 91.000000 17.000000 -223.000000
-v 127.000000 -1.000000 -225.000000
-v 127.000000 17.000000 -225.000000
-v 131.000000 -1.000000 -225.000000
-v 131.000000 17.000000 -225.000000
-v 127.000000 -1.000000 -223.000000
-v 127.000000 17.000000 -223.000000
-v 131.000000 -1.000000 -223.000000
-v 131.000000 17.000000 -223.000000
-v 167.000000 -1.000000 -225.000000
-v 167.000000 17.000000 -225.000000
-v 171.000000 -1.000000 -225.000000
-v 171.000000 17.000000 -225.000000
-v 167.000000 -1.000000 -223.000000
-v 167.000000 17.000000 -223.000000
-v 171.000000 -1.000000 -223.000000
-v 171.000000 17.000000 -223.000000
-v 207.000000 -1.000000 -225.000000
-v 207.000000 17.000000 -225.000000
-v 211.000000 -1.000000 -225.000000
-v 211.000000 17.000000 -225.000000
-v 207.000000 -1.000000 -223.000000
-v 207.000000 17.000000 -223.000000
-v 211.000000 -1.000000 -223.000000
-v 211.000000 17.000000 -223.000000
-v -33.000000 -1.000000 -225.000000
-v -33.000000 17.000000 -225.000000
-v -29.000000 -1.000000 -225.000000
-v -29.000000 17.000000 -225.000000
-v -33.000000 -1.000000 -223.000000
-v -33.000000 17.000000 -223.000000
-v -29.000000 -1.000000 -223.000000
-v -29.000000 17.000000 -223.000000
-vn -0.0000 -0.0000 -1.0000
+v 112.500000 -0.500000 3.500000
+v 112.500000 8.500000 3.500000
+v 112.500000 -0.500000 5.500000
+v 112.500000 8.500000 5.500000
+v 111.500000 -0.500000 3.500000
+v 111.500000 8.500000 3.500000
+v 111.500000 -0.500000 5.500000
+v 111.500000 8.500000 5.500000
+v 112.500000 -0.500000 23.500000
+v 112.500000 8.500000 23.500000
+v 112.500000 -0.500000 25.500000
+v 112.500000 8.500000 25.500000
+v 111.500000 -0.500000 23.500000
+v 111.500000 8.500000 23.500000
+v 111.500000 -0.500000 25.500000
+v 111.500000 8.500000 25.500000
+v 112.500000 -0.500000 43.500000
+v 112.500000 8.500000 43.500000
+v 112.500000 -0.500000 45.500000
+v 112.500000 8.500000 45.500000
+v 111.500000 -0.500000 43.500000
+v 111.500000 8.500000 43.500000
+v 111.500000 -0.500000 45.500000
+v 111.500000 8.500000 45.500000
+v 112.500000 -0.500000 63.500000
+v 112.500000 8.500000 63.500000
+v 112.500000 -0.500000 65.500000
+v 112.500000 8.500000 65.500000
+v 111.500000 -0.500000 63.500000
+v 111.500000 8.500000 63.500000
+v 111.500000 -0.500000 65.500000
+v 111.500000 8.500000 65.500000
+v 112.500000 -0.500000 83.500000
+v 112.500000 8.500000 83.500000
+v 112.500000 -0.500000 85.500000
+v 112.500000 8.500000 85.500000
+v 111.500000 -0.500000 83.500000
+v 111.500000 8.500000 83.500000
+v 111.500000 -0.500000 85.500000
+v 111.500000 8.500000 85.500000
+v 112.500000 -0.500000 103.500000
+v 112.500000 8.500000 103.500000
+v 112.500000 -0.500000 105.500000
+v 112.500000 8.500000 105.500000
+v 111.500000 -0.500000 103.500000
+v 111.500000 8.500000 103.500000
+v 111.500000 -0.500000 105.500000
+v 111.500000 8.500000 105.500000
+v 112.500000 -0.500000 -16.500000
+v 112.500000 8.500000 -16.500000
+v 112.500000 -0.500000 -14.500000
+v 112.500000 8.500000 -14.500000
+v 111.500000 -0.500000 -16.500000
+v 111.500000 8.500000 -16.500000
+v 111.500000 -0.500000 -14.500000
+v 111.500000 8.500000 -14.500000
vn 1.0000 -0.0000 -0.0000
vn -0.0000 -0.0000 1.0000
vn -1.0000 -0.0000 -0.0000
+vn -0.0000 -0.0000 -1.0000
vn -0.0000 -1.0000 -0.0000
vn -0.0000 1.0000 -0.0000
vt 0.625000 0.000000
@@ -958,58 +958,58 @@ f 280/183/52 276/188/52 275/184/52
f 281/180/53 279/182/53 275/185/53
f 278/187/54 276/189/54 280/183/54
o plot_trzon3
-v -43.999996 -1.000000 -2.000000
-v -43.999996 17.000000 -2.000000
-v -43.999996 -1.000000 -6.000000
-v -43.999996 17.000000 -6.000000
-v -41.999996 -1.000000 -2.000000
-v -41.999996 17.000000 -2.000000
-v -41.999996 -1.000000 -6.000000
-v -41.999996 17.000000 -6.000000
-v -43.999996 -1.000000 -42.000000
-v -43.999996 17.000000 -42.000000
-v -43.999996 -1.000000 -46.000000
-v -43.999996 17.000000 -46.000000
-v -41.999996 -1.000000 -42.000000
-v -41.999996 17.000000 -42.000000
-v -41.999996 -1.000000 -46.000000
-v -41.999996 17.000000 -46.000000
-v -44.000000 -1.000000 -82.000000
-v -44.000000 17.000000 -82.000000
-v -44.000000 -1.000000 -86.000000
-v -44.000000 17.000000 -86.000000
-v -42.000000 -1.000000 -82.000000
-v -42.000000 17.000000 -82.000000
-v -42.000000 -1.000000 -86.000000
-v -42.000000 17.000000 -86.000000
-v -44.000000 -1.000000 -122.000000
-v -44.000000 17.000000 -122.000000
-v -44.000000 -1.000000 -126.000000
-v -44.000000 17.000000 -126.000000
-v -42.000000 -1.000000 -122.000000
-v -42.000000 17.000000 -122.000000
-v -42.000000 -1.000000 -126.000000
-v -42.000000 17.000000 -126.000000
-v -44.000004 -1.000000 -162.000000
-v -44.000004 17.000000 -162.000000
-v -44.000004 -1.000000 -166.000000
-v -44.000004 17.000000 -166.000000
-v -42.000004 -1.000000 -162.000000
-v -42.000004 17.000000 -162.000000
-v -42.000004 -1.000000 -166.000000
-v -42.000004 17.000000 -166.000000
-v -44.000004 -1.000000 -202.000000
-v -44.000004 17.000000 -202.000000
-v -44.000004 -1.000000 -206.000000
-v -44.000004 17.000000 -206.000000
-v -42.000004 -1.000000 -202.000000
-v -42.000004 17.000000 -202.000000
-v -42.000004 -1.000000 -206.000000
-v -42.000004 17.000000 -206.000000
-vn -1.0000 -0.0000 -0.0000
+v 1.000000 -0.500000 -21.999998
+v 1.000000 8.500000 -21.999998
+v 3.000000 -0.500000 -21.999998
+v 3.000000 8.500000 -21.999998
+v 1.000000 -0.500000 -20.999998
+v 1.000000 8.500000 -20.999998
+v 3.000000 -0.500000 -20.999998
+v 3.000000 8.500000 -20.999998
+v 21.000000 -0.500000 -21.999998
+v 21.000000 8.500000 -21.999998
+v 23.000000 -0.500000 -21.999998
+v 23.000000 8.500000 -21.999998
+v 21.000000 -0.500000 -20.999998
+v 21.000000 8.500000 -20.999998
+v 23.000000 -0.500000 -20.999998
+v 23.000000 8.500000 -20.999998
+v 41.000000 -0.500000 -22.000000
+v 41.000000 8.500000 -22.000000
+v 43.000000 -0.500000 -22.000000
+v 43.000000 8.500000 -22.000000
+v 41.000000 -0.500000 -21.000000
+v 41.000000 8.500000 -21.000000
+v 43.000000 -0.500000 -21.000000
+v 43.000000 8.500000 -21.000000
+v 61.000000 -0.500000 -22.000000
+v 61.000000 8.500000 -22.000000
+v 63.000000 -0.500000 -22.000000
+v 63.000000 8.500000 -22.000000
+v 61.000000 -0.500000 -21.000000
+v 61.000000 8.500000 -21.000000
+v 63.000000 -0.500000 -21.000000
+v 63.000000 8.500000 -21.000000
+v 81.000000 -0.500000 -22.000002
+v 81.000000 8.500000 -22.000002
+v 83.000000 -0.500000 -22.000002
+v 83.000000 8.500000 -22.000002
+v 81.000000 -0.500000 -21.000002
+v 81.000000 8.500000 -21.000002
+v 83.000000 -0.500000 -21.000002
+v 83.000000 8.500000 -21.000002
+v 101.000000 -0.500000 -22.000002
+v 101.000000 8.500000 -22.000002
+v 103.000000 -0.500000 -22.000002
+v 103.000000 8.500000 -22.000002
+v 101.000000 -0.500000 -21.000002
+v 101.000000 8.500000 -21.000002
+v 103.000000 -0.500000 -21.000002
+v 103.000000 8.500000 -21.000002
vn -0.0000 -0.0000 -1.0000
vn 1.0000 -0.0000 -0.0000
vn -0.0000 -0.0000 1.0000
+vn -1.0000 -0.0000 -0.0000
vn -0.0000 -1.0000 -0.0000
vn -0.0000 1.0000 -0.0000
vt 0.625000 0.000000
diff --git a/res/models/mapka3_nofence.obj b/res/models/mapka3_nofence.obj
new file mode 100644
index 0000000..0cd62ef
--- /dev/null
+++ b/res/models/mapka3_nofence.obj
@@ -0,0 +1,267 @@
+# Blender 4.2.1 LTS
+# www.blender.org
+o platforma
+v -10.000000 0.000000 110.000000
+v -10.000000 -2.000000 110.000000
+v -10.000000 0.000000 -20.000000
+v -10.000000 -2.000000 -20.000000
+v 110.000000 0.000000 110.000000
+v 110.000000 -2.000000 110.000000
+v 110.000000 0.000000 -20.000000
+v 110.000000 -2.000000 -20.000000
+vn -0.0000 1.0000 -0.0000
+vn -0.0000 -0.0000 -1.0000
+vn 1.0000 -0.0000 -0.0000
+vn -0.0000 -1.0000 -0.0000
+vn -1.0000 -0.0000 -0.0000
+vn -0.0000 -0.0000 1.0000
+vt 0.875000 0.500000
+vt 0.625000 0.750000
+vt 0.625000 0.500000
+vt 0.375000 1.000000
+vt 0.375000 0.750000
+vt 0.625000 0.000000
+vt 0.375000 0.250000
+vt 0.375000 0.000000
+vt 0.375000 0.500000
+vt 0.125000 0.750000
+vt 0.125000 0.500000
+vt 0.625000 0.250000
+vt 0.875000 0.750000
+vt 0.625000 1.000000
+s 0
+f 5/1/1 3/2/1 1/3/1
+f 3/2/2 8/4/2 4/5/2
+f 7/6/3 6/7/3 8/8/3
+f 2/9/4 8/10/4 6/11/4
+f 1/3/5 4/5/5 2/9/5
+f 5/12/6 2/9/6 6/7/6
+f 5/1/1 7/13/1 3/2/1
+f 3/2/2 7/14/2 8/4/2
+f 7/6/3 5/12/3 6/7/3
+f 2/9/4 4/5/4 8/10/4
+f 1/3/5 3/2/5 4/5/5
+f 5/12/6 1/3/6 2/9/6
+o szopa
+v 10.000000 0.000000 -19.000000
+v 10.000000 21.000000 -19.000000
+v 10.000000 0.000000 -1.000000
+v 10.000000 21.000000 -1.000000
+v -9.000000 0.000000 -19.000000
+v -9.000000 21.000000 -19.000000
+v -9.000000 0.000000 -1.000000
+v -9.000000 21.000000 -1.000000
+v 10.000000 0.000000 -3.000000
+v 10.000000 0.000000 -17.000000
+v 10.000000 2.333333 -19.000000
+v 10.000000 4.666667 -19.000000
+v 10.000000 7.000000 -19.000000
+v 10.000000 9.333334 -19.000000
+v 10.000000 11.666667 -19.000000
+v 10.000000 14.000000 -19.000000
+v 10.000000 16.333334 -19.000000
+v 10.000000 18.666668 -19.000000
+v 10.000000 21.000000 -17.000000
+v 10.000000 21.000000 -15.000000
+v 10.000000 21.000000 -13.000000
+v 10.000000 21.000000 -11.000000
+v 10.000000 21.000000 -9.000000
+v 10.000000 21.000000 -7.000000
+v 10.000000 21.000000 -5.000000
+v 10.000000 21.000000 -3.000000
+v 10.000000 18.666668 -1.000000
+v 10.000000 16.333334 -1.000000
+v 10.000000 14.000000 -1.000000
+v 10.000000 11.666666 -1.000000
+v 10.000000 9.333333 -1.000000
+v 10.000000 7.000000 -1.000000
+v 10.000000 4.666667 -1.000000
+v 10.000000 2.333333 -1.000000
+v 10.000000 2.333333 -17.000000
+v 10.000000 2.333333 -3.000000
+v 10.000000 4.666667 -17.000000
+v 10.000000 4.666667 -3.000000
+v 10.000000 7.000000 -17.000000
+v 10.000000 7.000000 -3.000000
+v 10.000000 9.333334 -17.000000
+v 10.000000 9.333334 -15.000000
+v 10.000000 9.333333 -5.000000
+v 10.000000 9.333333 -3.000000
+v 10.000000 11.666667 -17.000000
+v 10.000000 11.666667 -15.000000
+v 10.000000 11.666667 -13.000000
+v 10.000000 11.666667 -11.000000
+v 10.000000 11.666667 -9.000000
+v 10.000000 11.666667 -7.000000
+v 10.000000 11.666667 -5.000000
+v 10.000000 11.666666 -3.000000
+v 10.000000 21.000000 -19.000000
+v 10.000000 21.000000 -1.000000
+v -9.000000 21.000000 -19.000000
+v -9.000000 21.000000 -1.000000
+v 10.000000 32.000000 -10.000000
+v -9.000000 32.000000 -10.000000
+vn -0.0000 -0.0000 1.0000
+vn -1.0000 -0.0000 -0.0000
+vn -0.0000 -0.0000 -1.0000
+vn 1.0000 -0.0000 -0.0000
+vn -0.0000 0.6332 -0.7740
+vn -0.0000 0.6332 0.7740
+vt 0.513889 0.250000
+vt 0.541667 0.250000
+vt 0.375000 0.500000
+vt 0.625000 0.500000
+vt 0.375000 0.750000
+vt 0.625000 0.750000
+vt 0.486111 1.000000
+vt 0.458333 1.000000
+vt 0.486111 0.000000
+vt 0.486111 0.027778
+vt 0.458333 0.027778
+vt 0.486111 0.222222
+vt 0.458333 0.222222
+vt 0.486111 0.194444
+vt 0.513889 0.027778
+vt 0.486111 0.055556
+vt 0.513889 0.194444
+vt 0.486111 0.250000
+vt 0.458333 0.250000
+vt 0.000000 0.000000
+vt 0.513889 0.055556
+vt 0.541667 0.000000
+vt 0.625000 0.027778
+vt 0.001001 0.997998
+vt 0.001001 0.501001
+vt 0.497998 0.501001
+vt 0.498999 0.502002
+vt 0.498999 0.998999
+vt 0.002002 0.998999
+vt 0.501001 0.001001
+vt 0.998999 0.498999
+vt 0.998999 0.001001
+vt 0.001001 0.001001
+vt 0.498999 0.498999
+vt 0.498999 0.001001
+vt 0.375000 0.250000
+vt 0.402778 0.250000
+vt 0.430556 0.250000
+vt 0.625000 0.250000
+vt 0.597222 0.250000
+vt 0.569444 0.250000
+vt 0.375000 1.000000
+vt 0.625000 1.000000
+vt 0.597222 1.000000
+vt 0.569444 1.000000
+vt 0.402778 1.000000
+vt 0.430556 1.000000
+vt 0.541667 1.000000
+vt 0.513889 1.000000
+vt 0.375000 0.027778
+vt 0.375000 0.000000
+vt 0.402778 0.000000
+vt 0.430556 0.000000
+vt 0.402778 0.027778
+vt 0.458333 0.000000
+vt 0.430556 0.027778
+vt 0.513889 0.000000
+vt 0.513889 0.222222
+vt 0.375000 0.222222
+vt 0.402778 0.222222
+vt 0.430556 0.222222
+vt 0.625000 0.222222
+vt 0.625000 0.194444
+vt 0.625000 0.166667
+vt 0.513889 0.166667
+vt 0.625000 0.138889
+vt 0.625000 0.111111
+vt 0.513889 0.138889
+vt 0.513889 0.111111
+vt 0.625000 0.083333
+vt 0.625000 0.055556
+vt 0.513889 0.083333
+vt 0.597222 0.000000
+vt 0.625000 0.000000
+vt 0.569444 0.000000
+vt 0.501001 0.498999
+vt 0.001001 0.498999
+s 0
+f 38/15/7 37/16/7 15/17/7
+f 16/18/8 13/19/8 15/17/8
+f 14/20/9 22/21/9 21/22/9
+f 22/23/10 49/24/10 47/25/10
+f 52/26/10 48/27/10 51/28/10
+f 53/29/10 50/30/10 49/24/10
+f 59/31/10 52/26/10 51/28/10
+f 52/26/10 39/32/10 40/33/10
+f 50/30/10 47/25/10 49/24/10
+f 56/34/10 50/30/10 54/35/10
+f 51/28/10 57/34/10 59/31/10
+f 53/29/10 24/36/10 27/37/10
+f 61/38/10 65/39/10 62/40/10
+f 64/41/8 66/42/8 63/43/8
+f 66/44/11 61/45/11 63/46/11
+f 62/47/12 66/48/12 64/49/12
+f 15/17/7 11/50/7 42/51/7
+f 15/17/7 42/51/7 41/52/7
+f 12/53/7 16/18/7 15/17/7
+f 35/54/7 12/53/7 15/17/7
+f 15/17/7 41/52/7 40/33/7
+f 15/17/7 40/33/7 39/32/7
+f 36/55/7 35/54/7 15/17/7
+f 37/16/7 36/55/7 15/17/7
+f 15/17/7 39/32/7 38/15/7
+f 16/18/8 14/20/8 13/19/8
+f 9/56/9 13/19/9 14/20/9
+f 14/20/9 10/57/9 26/58/9
+f 14/20/9 26/58/9 25/59/9
+f 19/60/9 9/56/9 14/20/9
+f 20/61/9 19/60/9 14/20/9
+f 14/20/9 25/59/9 24/62/9
+f 14/20/9 24/62/9 23/63/9
+f 21/22/9 20/61/9 14/20/9
+f 14/20/9 23/63/9 22/21/9
+f 18/64/10 9/65/10 19/66/10
+f 18/64/10 19/66/10 20/67/10
+f 43/68/10 18/64/10 20/67/10
+f 43/68/10 20/67/10 21/69/10
+f 45/70/10 43/68/10 21/69/10
+f 22/23/10 23/71/10 53/29/10
+f 45/70/10 21/69/10 22/23/10
+f 47/25/10 45/70/10 22/23/10
+f 22/23/10 53/29/10 49/24/10
+f 53/29/10 54/35/10 50/30/10
+f 59/31/10 60/72/10 52/26/10
+f 11/50/10 17/73/10 44/74/10
+f 11/50/10 44/74/10 46/75/10
+f 42/51/10 11/50/10 46/75/10
+f 42/51/10 46/75/10 48/27/10
+f 41/52/10 42/51/10 48/27/10
+f 52/26/10 60/72/10 38/15/10
+f 41/52/10 48/27/10 52/26/10
+f 40/33/10 41/52/10 52/26/10
+f 52/26/10 38/15/10 39/32/10
+f 34/76/10 12/53/10 35/54/10
+f 34/76/10 35/54/10 36/55/10
+f 33/77/10 34/76/10 36/55/10
+f 37/16/10 38/15/10 60/72/10
+f 33/77/10 36/55/10 37/16/10
+f 32/78/10 33/77/10 37/16/10
+f 37/16/10 60/72/10 59/31/10
+f 37/16/10 59/31/10 58/79/10
+f 31/80/10 32/78/10 37/16/10
+f 30/81/10 31/80/10 37/16/10
+f 37/16/10 58/79/10 57/82/10
+f 37/16/10 57/82/10 56/83/10
+f 29/84/10 30/81/10 37/16/10
+f 28/85/10 29/84/10 37/16/10
+f 37/16/10 56/83/10 55/86/10
+f 37/16/10 55/86/10 54/35/10
+f 27/37/10 28/85/10 37/16/10
+f 26/87/10 10/88/10 27/37/10
+f 25/89/10 26/87/10 27/37/10
+f 27/37/10 37/16/10 54/35/10
+f 53/29/10 23/71/10 24/36/10
+f 27/37/10 54/35/10 53/29/10
+f 24/36/10 25/89/10 27/37/10
+f 66/44/11 65/90/11 61/45/11
+f 62/47/12 65/91/12 66/48/12
diff --git a/res/models/mapka3_nofence_noplatform.obj b/res/models/mapka3_nofence_noplatform.obj
new file mode 100644
index 0000000..dcf029f
--- /dev/null
+++ b/res/models/mapka3_nofence_noplatform.obj
@@ -0,0 +1,225 @@
+# Blender 4.2.1 LTS
+# www.blender.org
+o szopa
+v 10.000000 0.000000 -19.000000
+v 10.000000 21.000000 -19.000000
+v 10.000000 0.000000 -1.000000
+v 10.000000 21.000000 -1.000000
+v -9.000000 0.000000 -19.000000
+v -9.000000 21.000000 -19.000000
+v -9.000000 0.000000 -1.000000
+v -9.000000 21.000000 -1.000000
+v 10.000000 0.000000 -3.000000
+v 10.000000 0.000000 -17.000000
+v 10.000000 2.333333 -19.000000
+v 10.000000 4.666667 -19.000000
+v 10.000000 7.000000 -19.000000
+v 10.000000 9.333334 -19.000000
+v 10.000000 11.666667 -19.000000
+v 10.000000 14.000000 -19.000000
+v 10.000000 16.333334 -19.000000
+v 10.000000 18.666668 -19.000000
+v 10.000000 21.000000 -17.000000
+v 10.000000 21.000000 -15.000000
+v 10.000000 21.000000 -13.000000
+v 10.000000 21.000000 -11.000000
+v 10.000000 21.000000 -9.000000
+v 10.000000 21.000000 -7.000000
+v 10.000000 21.000000 -5.000000
+v 10.000000 21.000000 -3.000000
+v 10.000000 18.666668 -1.000000
+v 10.000000 16.333334 -1.000000
+v 10.000000 14.000000 -1.000000
+v 10.000000 11.666666 -1.000000
+v 10.000000 9.333333 -1.000000
+v 10.000000 7.000000 -1.000000
+v 10.000000 4.666667 -1.000000
+v 10.000000 2.333333 -1.000000
+v 10.000000 2.333333 -17.000000
+v 10.000000 2.333333 -3.000000
+v 10.000000 4.666667 -17.000000
+v 10.000000 4.666667 -3.000000
+v 10.000000 7.000000 -17.000000
+v 10.000000 7.000000 -3.000000
+v 10.000000 9.333334 -17.000000
+v 10.000000 9.333334 -15.000000
+v 10.000000 9.333333 -5.000000
+v 10.000000 9.333333 -3.000000
+v 10.000000 11.666667 -17.000000
+v 10.000000 11.666667 -15.000000
+v 10.000000 11.666667 -13.000000
+v 10.000000 11.666667 -11.000000
+v 10.000000 11.666667 -9.000000
+v 10.000000 11.666667 -7.000000
+v 10.000000 11.666667 -5.000000
+v 10.000000 11.666666 -3.000000
+v 10.000000 21.000000 -19.000000
+v 10.000000 21.000000 -1.000000
+v -9.000000 21.000000 -19.000000
+v -9.000000 21.000000 -1.000000
+v 10.000000 32.000000 -10.000000
+v -9.000000 32.000000 -10.000000
+vn -0.0000 -0.0000 1.0000
+vn -1.0000 -0.0000 -0.0000
+vn -0.0000 -0.0000 -1.0000
+vn 1.0000 -0.0000 -0.0000
+vn -0.0000 0.6332 -0.7740
+vn -0.0000 0.6332 0.7740
+vt 0.513889 0.250000
+vt 0.541667 0.250000
+vt 0.375000 0.500000
+vt 0.625000 0.500000
+vt 0.375000 0.750000
+vt 0.625000 0.750000
+vt 0.486111 1.000000
+vt 0.458333 1.000000
+vt 0.486111 0.000000
+vt 0.486111 0.027778
+vt 0.458333 0.027778
+vt 0.486111 0.222222
+vt 0.458333 0.222222
+vt 0.486111 0.194444
+vt 0.513889 0.027778
+vt 0.486111 0.055556
+vt 0.513889 0.194444
+vt 0.486111 0.250000
+vt 0.458333 0.250000
+vt 0.000000 0.000000
+vt 0.513889 0.055556
+vt 0.541667 0.000000
+vt 0.625000 0.027778
+vt 0.001001 0.997998
+vt 0.001001 0.501001
+vt 0.497998 0.501001
+vt 0.498999 0.502002
+vt 0.498999 0.998999
+vt 0.002002 0.998999
+vt 0.501001 0.001001
+vt 0.998999 0.498999
+vt 0.998999 0.001001
+vt 0.001001 0.001001
+vt 0.498999 0.498999
+vt 0.498999 0.001001
+vt 0.375000 0.250000
+vt 0.402778 0.250000
+vt 0.430556 0.250000
+vt 0.625000 0.250000
+vt 0.597222 0.250000
+vt 0.569444 0.250000
+vt 0.375000 1.000000
+vt 0.625000 1.000000
+vt 0.597222 1.000000
+vt 0.569444 1.000000
+vt 0.402778 1.000000
+vt 0.430556 1.000000
+vt 0.541667 1.000000
+vt 0.513889 1.000000
+vt 0.375000 0.027778
+vt 0.375000 0.000000
+vt 0.402778 0.000000
+vt 0.430556 0.000000
+vt 0.402778 0.027778
+vt 0.458333 0.000000
+vt 0.430556 0.027778
+vt 0.513889 0.000000
+vt 0.513889 0.222222
+vt 0.375000 0.222222
+vt 0.402778 0.222222
+vt 0.430556 0.222222
+vt 0.625000 0.222222
+vt 0.625000 0.194444
+vt 0.625000 0.166667
+vt 0.513889 0.166667
+vt 0.625000 0.138889
+vt 0.625000 0.111111
+vt 0.513889 0.138889
+vt 0.513889 0.111111
+vt 0.625000 0.083333
+vt 0.625000 0.055556
+vt 0.513889 0.083333
+vt 0.597222 0.000000
+vt 0.625000 0.000000
+vt 0.569444 0.000000
+vt 0.501001 0.498999
+vt 0.001001 0.498999
+s 0
+f 30/1/1 29/2/1 7/3/1
+f 8/4/2 5/5/2 7/3/2
+f 6/6/3 14/7/3 13/8/3
+f 14/9/4 41/10/4 39/11/4
+f 44/12/4 40/13/4 43/14/4
+f 45/15/4 42/16/4 41/10/4
+f 51/17/4 44/12/4 43/14/4
+f 44/12/4 31/18/4 32/19/4
+f 42/16/4 39/11/4 41/10/4
+f 48/20/4 42/16/4 46/21/4
+f 43/14/4 49/20/4 51/17/4
+f 45/15/4 16/22/4 19/23/4
+f 53/24/4 57/25/4 54/26/4
+f 56/27/2 58/28/2 55/29/2
+f 58/30/5 53/31/5 55/32/5
+f 54/33/6 58/34/6 56/35/6
+f 7/3/1 3/36/1 34/37/1
+f 7/3/1 34/37/1 33/38/1
+f 4/39/1 8/4/1 7/3/1
+f 27/40/1 4/39/1 7/3/1
+f 7/3/1 33/38/1 32/19/1
+f 7/3/1 32/19/1 31/18/1
+f 28/41/1 27/40/1 7/3/1
+f 29/2/1 28/41/1 7/3/1
+f 7/3/1 31/18/1 30/1/1
+f 8/4/2 6/6/2 5/5/2
+f 1/42/3 5/5/3 6/6/3
+f 6/6/3 2/43/3 18/44/3
+f 6/6/3 18/44/3 17/45/3
+f 11/46/3 1/42/3 6/6/3
+f 12/47/3 11/46/3 6/6/3
+f 6/6/3 17/45/3 16/48/3
+f 6/6/3 16/48/3 15/49/3
+f 13/8/3 12/47/3 6/6/3
+f 6/6/3 15/49/3 14/7/3
+f 10/50/4 1/51/4 11/52/4
+f 10/50/4 11/52/4 12/53/4
+f 35/54/4 10/50/4 12/53/4
+f 35/54/4 12/53/4 13/55/4
+f 37/56/4 35/54/4 13/55/4
+f 14/9/4 15/57/4 45/15/4
+f 37/56/4 13/55/4 14/9/4
+f 39/11/4 37/56/4 14/9/4
+f 14/9/4 45/15/4 41/10/4
+f 45/15/4 46/21/4 42/16/4
+f 51/17/4 52/58/4 44/12/4
+f 3/36/4 9/59/4 36/60/4
+f 3/36/4 36/60/4 38/61/4
+f 34/37/4 3/36/4 38/61/4
+f 34/37/4 38/61/4 40/13/4
+f 33/38/4 34/37/4 40/13/4
+f 44/12/4 52/58/4 30/1/4
+f 33/38/4 40/13/4 44/12/4
+f 32/19/4 33/38/4 44/12/4
+f 44/12/4 30/1/4 31/18/4
+f 26/62/4 4/39/4 27/40/4
+f 26/62/4 27/40/4 28/41/4
+f 25/63/4 26/62/4 28/41/4
+f 29/2/4 30/1/4 52/58/4
+f 25/63/4 28/41/4 29/2/4
+f 24/64/4 25/63/4 29/2/4
+f 29/2/4 52/58/4 51/17/4
+f 29/2/4 51/17/4 50/65/4
+f 23/66/4 24/64/4 29/2/4
+f 22/67/4 23/66/4 29/2/4
+f 29/2/4 50/65/4 49/68/4
+f 29/2/4 49/68/4 48/69/4
+f 21/70/4 22/67/4 29/2/4
+f 20/71/4 21/70/4 29/2/4
+f 29/2/4 48/69/4 47/72/4
+f 29/2/4 47/72/4 46/21/4
+f 19/23/4 20/71/4 29/2/4
+f 18/73/4 2/74/4 19/23/4
+f 17/75/4 18/73/4 19/23/4
+f 19/23/4 29/2/4 46/21/4
+f 45/15/4 15/57/4 16/22/4
+f 19/23/4 46/21/4 45/15/4
+f 16/22/4 17/75/4 19/23/4
+f 58/30/5 57/76/5 53/31/5
+f 54/33/6 57/77/6 58/34/6
diff --git a/res/models/uvmap.DDS b/res/models/uvmap.DDS
new file mode 100644
index 0000000..90ed4c7
Binary files /dev/null and b/res/models/uvmap.DDS differ
diff --git a/res/shaders/TextureFragmentShader.fragmentshader b/res/shaders/TextureFragmentShader.fragmentshader
new file mode 100644
index 0000000..c7f325e
--- /dev/null
+++ b/res/shaders/TextureFragmentShader.fragmentshader
@@ -0,0 +1,17 @@
+#version 330 core
+
+// Interpolated values from the vertex shaders
+in vec2 UV;
+
+// Output data
+out vec3 color;
+
+// Values that stay constant for the whole mesh.
+uniform sampler2D myTextureSampler;
+
+void main() {
+
+ // Output color = color of the texture at the specified UV
+ color = texture(myTextureSampler, UV).rgb;
+
+}
\ No newline at end of file
diff --git a/res/shaders/TransformVertexShader.vertexshader b/res/shaders/TransformVertexShader.vertexshader
new file mode 100644
index 0000000..3fb7b83
--- /dev/null
+++ b/res/shaders/TransformVertexShader.vertexshader
@@ -0,0 +1,20 @@
+#version 330 core
+
+// Input vertex data, different for all executions of this shader.
+layout(location = 0) in vec3 vertexPosition_modelspace;
+layout(location = 1) in vec2 vertexUV;
+
+// Output data; will be interpolated for each fragment.
+out vec2 UV;
+
+// Values that stay constant for the whole mesh.
+uniform mat4 MVP;
+
+void main() {
+
+ // Output position of the vertex, in clip space: MVP * position
+ gl_Position = MVP * vec4(vertexPosition_modelspace, 1);
+
+ // UV of the vertex. No special space for this one.
+ UV = vertexUV;
+}
\ No newline at end of file
diff --git a/shader.cpp b/shader.cpp
new file mode 100644
index 0000000..9de92f7
--- /dev/null
+++ b/shader.cpp
@@ -0,0 +1,94 @@
+#include "shader.hpp"
+
+GLuint LoadShaders(const char * vertex_file_path, const char * fragment_file_path) {
+
+ // Create the shaders
+ GLuint VertexShaderID = glCreateShader(GL_VERTEX_SHADER);
+ GLuint FragmentShaderID = glCreateShader(GL_FRAGMENT_SHADER);
+
+ // Read the Vertex Shader code from the file
+ std::string VertexShaderCode;
+ std::ifstream VertexShaderStream(vertex_file_path, std::ios::in);
+ if (VertexShaderStream.is_open()) {
+ std::stringstream sstr;
+ sstr << VertexShaderStream.rdbuf();
+ VertexShaderCode = sstr.str();
+ VertexShaderStream.close();
+ } else {
+ timestampedCout("shader.cpp: Impossible to open " << vertex_file_path << ". Are you in the right directory?");
+ return 0;
+ }
+
+ // Read the Fragment Shader code from the file
+ std::string FragmentShaderCode;
+ std::ifstream FragmentShaderStream(fragment_file_path, std::ios::in);
+ if(FragmentShaderStream.is_open()){
+ std::stringstream sstr;
+ sstr << FragmentShaderStream.rdbuf();
+ FragmentShaderCode = sstr.str();
+ FragmentShaderStream.close();
+ }
+
+ GLint Result = GL_FALSE;
+ int InfoLogLength;
+
+
+ // Compile Vertex Shader
+ timestampedCout("shader.cpp: Compiling shader: " << vertex_file_path << "...");
+ char const * VertexSourcePointer = VertexShaderCode.c_str();
+ glShaderSource(VertexShaderID, 1, &VertexSourcePointer , NULL);
+ glCompileShader(VertexShaderID);
+
+ // Check Vertex Shader
+ glGetShaderiv(VertexShaderID, GL_COMPILE_STATUS, &Result);
+ glGetShaderiv(VertexShaderID, GL_INFO_LOG_LENGTH, &InfoLogLength);
+ if (InfoLogLength > 0) {
+ std::vector VertexShaderErrorMessage(InfoLogLength + 1);
+ glGetShaderInfoLog(VertexShaderID, InfoLogLength, NULL, &VertexShaderErrorMessage[0]);
+ timestampedCout("shader.cpp: VertexErrorMessage " << &VertexShaderErrorMessage[0]);
+ }
+
+
+
+ // Compile Fragment Shader
+ timestampedCout("shader.cpp: Compiling shader: " << fragment_file_path << "...");
+ char const * FragmentSourcePointer = FragmentShaderCode.c_str();
+ glShaderSource(FragmentShaderID, 1, &FragmentSourcePointer , NULL);
+ glCompileShader(FragmentShaderID);
+
+ // Check Fragment Shader
+ glGetShaderiv(FragmentShaderID, GL_COMPILE_STATUS, &Result);
+ glGetShaderiv(FragmentShaderID, GL_INFO_LOG_LENGTH, &InfoLogLength);
+ if (InfoLogLength > 0) {
+ std::vector FragmentShaderErrorMessage(InfoLogLength + 1);
+ glGetShaderInfoLog(FragmentShaderID, InfoLogLength, NULL, &FragmentShaderErrorMessage[0]);
+ timestampedCout("shader.cpp: FragmentShaderErrorMessage " << &FragmentShaderErrorMessage[0]);
+ }
+
+
+
+ // Link the program
+ timestampedCout("shader.cpp: Linking program...");
+ GLuint ProgramID = glCreateProgram();
+ glAttachShader(ProgramID, VertexShaderID);
+ glAttachShader(ProgramID, FragmentShaderID);
+ glLinkProgram(ProgramID);
+
+ // Check the program
+ glGetProgramiv(ProgramID, GL_LINK_STATUS, &Result);
+ glGetProgramiv(ProgramID, GL_INFO_LOG_LENGTH, &InfoLogLength);
+ if (InfoLogLength > 0){
+ std::vector ProgramErrorMessage(InfoLogLength + 1);
+ glGetProgramInfoLog(ProgramID, InfoLogLength, NULL, &ProgramErrorMessage[0]);
+ timestampedCout("shader.cpp: ProgramErrorMessage " << &ProgramErrorMessage[0]);
+ }
+
+
+ glDetachShader(ProgramID, VertexShaderID);
+ glDetachShader(ProgramID, FragmentShaderID);
+
+ glDeleteShader(VertexShaderID);
+ glDeleteShader(FragmentShaderID);
+
+ return ProgramID;
+}
\ No newline at end of file
diff --git a/shader.hpp b/shader.hpp
new file mode 100644
index 0000000..7ee7d3d
--- /dev/null
+++ b/shader.hpp
@@ -0,0 +1,16 @@
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+using namespace std;
+
+#include
+#include
+#include "timeh.hpp"
+
+#include "GL/glew.h"
+
+GLuint LoadShaders(const char * vertex_file_path, const char * fragment_file_path);
\ No newline at end of file
diff --git a/texture.cpp b/texture.cpp
new file mode 100644
index 0000000..7c71a3a
--- /dev/null
+++ b/texture.cpp
@@ -0,0 +1,188 @@
+#include "texture.hpp"
+
+GLuint loadBMP_custom(const char * imagepath){
+
+ return 0;
+
+ timestampedCout("texture.cpp: Reading image " << imagepath << "...");
+
+ // Data read from the header of the BMP file
+ unsigned char header[54];
+ unsigned int dataPos;
+ unsigned int imageSize;
+ unsigned int width, height;
+ // Actual RGB data
+ unsigned char * data;
+
+ // Open the file
+ FILE * file = fopen(imagepath, "rb");
+ if (!file) {
+ timestampedCout("texture.cpp: " << imagepath << " could not be opened. Are you in the right directory?");
+ return 0;
+ }
+
+ // Read the header, i.e. the 54 first bytes
+
+ // If less than 54 bytes are read, problem
+ if (fread(header, 1, 54, file) != 54) {
+ timestampedCout("texture.cpp: Not a correct BMP file.");
+ fclose(file);
+ return 0;
+ }
+ // A BMP files always begins with "BM"
+ if (header[0] != 'B' || header[1] != 'M') {
+ timestampedCout("texture.cpp: Not a correct BMP file.");
+ fclose(file);
+ return 0;
+ }
+ // Make sure this is a 24bpp file
+ if (*(int*)&(header[0x1E]) != 0) { timestampedCout("texture.cpp: Not a correct BMP file."); fclose(file); return 0;}
+ if (*(int*)&(header[0x1C]) != 24) { timestampedCout("texture.cpp: Not a correct BMP file."); fclose(file); return 0;}
+
+ // Read the information about the image
+ dataPos = *(int*)&(header[0x0A]);
+ imageSize = *(int*)&(header[0x22]);
+ width = *(int*)&(header[0x12]);
+ height = *(int*)&(header[0x16]);
+
+ // Some BMP files are misformatted, guess missing information
+ if (imageSize == 0) imageSize = width * height * 3; // 3 : one byte for each Red, Green and Blue component
+ if (dataPos == 0) dataPos = 54; // The BMP header is done that way
+
+ // Create a buffer
+ data = new unsigned char [imageSize];
+
+ // Read the actual data from the file into the buffer
+ fread(data, 1, imageSize, file);
+
+ // Everything is in memory now, the file can be closed.
+ fclose(file);
+
+ // Create one OpenGL texture
+ GLuint textureID;
+ glGenTextures(1, &textureID);
+
+ // "Bind" the newly created texture : all future texture functions will modify this texture
+ glBindTexture(GL_TEXTURE_2D, textureID);
+
+ // Give the image to OpenGL
+ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_BGR, GL_UNSIGNED_BYTE, data);
+
+ // OpenGL has now copied the data. Free our own version
+ delete [] data;
+
+ // Poor filtering, or ...
+ //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+ //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+
+ // ... nice trilinear filtering ...
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
+ // ... which requires mipmaps. Generate them automatically.
+ glGenerateMipmap(GL_TEXTURE_2D);
+
+ // Return the ID of the texture we just created
+ return textureID;
+}
+
+#define FOURCC_DXT1 0x31545844 // Equivalent to "DXT1" in ASCII
+#define FOURCC_DXT3 0x33545844 // Equivalent to "DXT3" in ASCII
+#define FOURCC_DXT5 0x35545844 // Equivalent to "DXT5" in ASCII
+
+GLuint loadDDS(const char * imagepath){
+
+ return 0;
+
+ unsigned char header[124];
+
+ FILE *fp;
+
+ // timestampedCout("texture.cpp: Hello!");
+
+ /* try to open the file */
+ fp = fopen(imagepath, "rb");
+ if (fp == NULL){
+ timestampedCout("texture.cpp: " << imagepath << " could not be opened. Are you in the right directory?");
+ return 0;
+ }
+
+ /* verify the type of file */
+ char filecode[4];
+ fread(filecode, 1, 4, fp);
+ if (strncmp(filecode, "DDS ", 4) != 0) {
+ fclose(fp);
+ return 0;
+ }
+
+ /* get the surface desc */
+ fread(&header, 124, 1, fp);
+
+ unsigned int height = *(unsigned int*)&(header[8 ]);
+ unsigned int width = *(unsigned int*)&(header[12]);
+ unsigned int linearSize = *(unsigned int*)&(header[16]);
+ unsigned int mipMapCount = *(unsigned int*)&(header[24]);
+ unsigned int fourCC = *(unsigned int*)&(header[80]);
+
+
+ unsigned char * buffer;
+ unsigned int bufsize;
+ /* how big is it going to be including all mipmaps? */
+ bufsize = mipMapCount > 1 ? linearSize * 2 : linearSize;
+ buffer = (unsigned char*)malloc(bufsize * sizeof(unsigned char));
+ fread(buffer, 1, bufsize, fp);
+ /* close the file pointer */
+ fclose(fp);
+
+ unsigned int components = (fourCC == FOURCC_DXT1) ? 3 : 4;
+ unsigned int format;
+ switch(fourCC) {
+
+ case FOURCC_DXT1:
+ format = GL_COMPRESSED_RGBA_S3TC_DXT1_EXT;
+ break;
+ case FOURCC_DXT3:
+ format = GL_COMPRESSED_RGBA_S3TC_DXT3_EXT;
+ break;
+ case FOURCC_DXT5:
+ format = GL_COMPRESSED_RGBA_S3TC_DXT5_EXT;
+ break;
+ default:
+ free(buffer);
+ return 0;
+
+ }
+
+ // Create one OpenGL texture
+ GLuint textureID;
+ glGenTextures(1, &textureID);
+
+ // "Bind" the newly created texture : all future texture functions will modify this texture
+ glBindTexture(GL_TEXTURE_2D, textureID);
+ glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
+
+ unsigned int blockSize = (format == GL_COMPRESSED_RGBA_S3TC_DXT1_EXT) ? 8 : 16;
+ unsigned int offset = 0;
+
+ /* load the mipmaps */
+ for (unsigned int level = 0; level < mipMapCount && (width || height); ++level) {
+
+ unsigned int size = ((width + 3) / 4) * ((height + 3) / 4) * blockSize;
+ glCompressedTexImage2D(GL_TEXTURE_2D, level, format, width, height,
+ 0, size, buffer + offset);
+
+ offset += size;
+ width /= 2;
+ height /= 2;
+
+ // Deal with Non-Power-Of-Two textures. This code is not included in the webpage to reduce clutter.
+ if (width < 1) width = 1;
+ if (height < 1) height = 1;
+
+ }
+
+ free(buffer);
+ return textureID;
+
+}
\ No newline at end of file
diff --git a/texture.hpp b/texture.hpp
new file mode 100644
index 0000000..40ccb06
--- /dev/null
+++ b/texture.hpp
@@ -0,0 +1,11 @@
+#include
+//#include
+#include "timeh.hpp"
+#include
+#include "GL/glew.h"
+
+// Load a .BMP file using our custom loader
+GLuint loadBMP_custom(const char * imagepath);
+
+// Load a .DDS file using GLFW's own loader
+GLuint loadDDS(const char * imagepath);
\ No newline at end of file
diff --git a/timeh.hpp b/timeh.hpp
index 0d939c0..10a0653 100644
--- a/timeh.hpp
+++ b/timeh.hpp
@@ -1,5 +1,4 @@
#pragma once
#include
-#include
std::time_t getTime();
#define timestampedCout(msg) {std::time_t currentTime = getTime(); std::cout << "( " << currentTime << ") " << msg << "\n";}
\ No newline at end of file