Cześć. Jak za pomocą shaderów mogę przejść do widoku 2d w programie, tak aby jakiś obiekt ciągle trzymał się kamerki? Jak próbowałem zrobić jakiś podstawowy shader i użyć go po użyciu shadera "głównego" to nic się nie rysowało. Kod tego nowego shadera wygląda tak:
#version 330
layout(location = 0) in vec3 position;
void camera()
{
gl_Position = vec4(position.x, position.y, position.z, 1.0);
}
void main()
{
camera();
}
A funkcja główna tak:
#include "Figures.h"
#include "Rendering.h"
#include "Window.h"
#include "Timer.h"
#include "MouseAndKeyboard.h"
#include "Skybox.h"
#include "Game.h"
#include "Logining.h"
#include "World.h"
#include "Auxiliary.h"
#include "Clock.h"
#include "Vertices.h"
#include "Entities.h"
#include "Skills.h"
#include "Building.h"
int main()
{
srand(time(nullptr));
Logining login;
login.generateBasicFiles();
int what = -1;
std::cout << "0. Login" << std::endl << "1. Registry" << std::endl;
while (what != 0)
{
std::cin >> what;
if (what == 0)
{
login.loadLogins(Logining::gameFiles + "Game/logins.txt");
}
else if (what == 1)
{
login.registry(Logining::gameFiles + "Game/logins.txt");
}
}
if (login.logining)
{
Rendering render;
Window window(800, 600, "", 4, true, Logining::gameFiles + "Game/Saves/" + login.loginNow + "/Save/camera/cameraPosition.txt");
Slots slots(render);
Skills skills;
Vertices vertices(Logining::gameFiles + "Game/Objects/orb.txt", Logining::gameFiles + "Game/Objects/floor/floorTexture.txt");
GLfloat points[] = {
-0.5f, -0.5f, 1.0f,
0.0f, 0.5f, 1.0f,
0.5f, -0.5f, 1.0f
};
//potem to zmienię
GLuint vbo = 0;
glGenBuffers(1, &vbo);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBufferData(GL_ARRAY_BUFFER, sizeof(points), points, GL_STATIC_DRAW);
GLuint vao = 0;
glGenVertexArrays(1, &vao);
glBindVertexArray(vao);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, NULL);
glEnableVertexAttribArray(0);
Skybox skybox(render);
MouseAndKeyboard MAK;
Game game(Logining::gameFiles + "Game/Saves/" + login.loginNow + "/Save/Player/statistics.txt", login.loginNow);
GLuint guiShader = render.loadShader(Logining::gameFiles + "/Game/Shaders/guiShader.vert", Logining::gameFiles + "/Game/Shaders/guiShader.frag");
Save save(Logining::gameFiles + "Game/Saves/" + login.loginNow + "/Save/Objects/saveObjects.txt");
save.checkhowManyOrbs(Logining::gameFiles + "Game/Saves/" + login.loginNow + "/Save/Objects/howManyOrbs.txt");
save.checkOrbs(Logining::gameFiles + "Game/Saves/" + login.loginNow + "/Save/Objects/saveOrbs.txt");
save.checkTimers(Logining::gameFiles + "Game/Saves/" + login.loginNow + "/Save/Timers/saveTimers.txt");
save.checkStatistics(Logining::gameFiles + "Game/Saves/" + login.loginNow + "/Save/Statistics/statistics.txt");
AutoGeneratingWorld autoWorld(login.loginNow, window, save);
Entities snail(vertices, save);
Timer time(save, Logining::gameFiles + "Game/Saves/" + login.loginNow + "/Save/Timers/dayCycle.txt");
std::mt19937 rand(std::time(nullptr));
game.setCamera(window);
render.deep();
while (!glfwWindowShouldClose(window.window))
{
glUseProgram(Slots::shaders);
glFrontFace(GL_CCW);
render.ClearColor(0.15f, 0.15f, 1.0f, 0.0f, window.window_width, window.window_height);
autoWorld.update(window, rand, save, game);
window.moving(game.lifeFunctions, game.moveSpeed);
MAK.closeWindow(window.window);
time.dayAndNight(save);
skybox.drawSkybox(window);
snail.updateEntity(vertices, save);
snail.aggresive(10.0f);
snail.attack(game, "phisical", 10.0f, 1.0f, 1.5f);
game.die(10, glm::vec3(0.0f, 0.0f, 0.0f));
game.setTime(window);
game.sendCamera(window, render);
//włączenie nowego shadera
glUseProgram(guiShader);
glFrontFace(GL_CW);
glBindVertexArray(vao);
glDrawArrays(GL_TRIANGLES, 0, 3);
render.ProcessWindowEvents(window.window);
}
save.savePos(Logining::gameFiles + "Game/Saves/" + login.loginNow + "/Save/Objects/saveObjects.txt");
save.saveOrbs(Logining::gameFiles + "Game/Saves/" + login.loginNow + "/Save/Objects/saveOrbs.txt");
save.saveHowManyOrbs(Logining::gameFiles + "Game/Saves/" + login.loginNow + "/Save/Objects/howManyOrbs.txt");
save.saveTimers(Logining::gameFiles + "Game/Saves/" + login.loginNow + "/Save/Timers/saveTimers.txt");
save.saveStatistics(Logining::gameFiles + "Game/Saves/" + login.loginNow + "/Save/Statistics/statistics.txt");
time.saveDayCycle(Logining::gameFiles + "Game/Saves/" + login.loginNow + "/Save/Timers/dayCycle.txt");
UnderFunctions::setWorldGenerator(Logining::gameFiles + "Game/Saves/" + login.loginNow + "/Save/Objects/generateOrbs.txt");
UnderFunctions::setWorldGenerator(Logining::gameFiles + "Game/Saves/" + login.loginNow + "/Save/Objects/generateWorld.txt");
game.saveStatistics(Logining::gameFiles + "Game/Saves/" + login.loginNow + "/Save/Player/statistics.txt");
window.saveCameraPosition(Logining::gameFiles + "Game/Saves/" + login.loginNow + "/Save/camera/cameraPosition.txt");
autoWorld.saveBiomes(Logining::gameFiles + "Game/Saves/" + login.loginNow + "/Save/Objects/biomes.txt");
autoWorld.saveChunks(Logining::gameFiles + "Game/Saves/" + login.loginNow + "/Save/Objects/chunksPosition.txt");
autoWorld.saveTrees(Logining::gameFiles + "Game/Saves/" + login.loginNow + "/Save/Objects/treesPosition.txt");
autoWorld.build.saveFlowers(Logining::gameFiles + "/Game/Saves/" + login.loginNow + "/Save/Objects/flowers.txt");
save.saveVector<Figures>(autoWorld.flyingIslands, Logining::gameFiles + "Game/Saves/" + login.loginNow +"/Save/Objects/flyingIslands.txt");
render.Terminate(window.window);
}
return 0;
}