• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

jak przejść do 2d

Object Storage Arubacloud
0 głosów
240 wizyt
pytanie zadane 23 lipca 2016 w C i C++ przez Avernis Nałogowiec (27,400 p.)

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;
}

 

komentarz 23 lipca 2016 przez Patrycjerz Mędrzec (192,320 p.)
Chodzi ci o rysowanie np. dwuwymiarowego interfejsu na ekranie? A nie możesz wykorzystać tutaj bitmap?
komentarz 23 lipca 2016 przez Avernis Nałogowiec (27,400 p.)
W tutorialu koleś użył takiego samego shadera tylko że właśnie na podstawie bitmap, a ja bym wolał zrobić to bez nich

1 odpowiedź

0 głosów
odpowiedź 23 lipca 2016 przez MetRiko Nałogowiec (37,110 p.)
Jeżeli to są shadery w GLSL to możesz przecież ustawić w nim wewnętrzne parametry.
W tym wypadku była by to pozycja kamery. Więcej nie napiszę bo nie znam się zbytnio na OpenGl'u.. To po prostu takie rozwiązanie, które przyszło mi do głowy. Wiem, że w SFML'u parametry ustawia się za pomocą sf::Shader::SetParameter(nazwa_parametru, wartość_parametru).
komentarz 23 lipca 2016 przez Avernis Nałogowiec (27,400 p.)
pozycja kamery w 3d nie wystarczy

Podobne pytania

0 głosów
0 odpowiedzi 236 wizyt
pytanie zadane 23 maja 2016 w C i C++ przez Avernis Nałogowiec (27,400 p.)
0 głosów
0 odpowiedzi 109 wizyt
pytanie zadane 14 marca 2016 w C i C++ przez Avernis Nałogowiec (27,400 p.)
0 głosów
0 odpowiedzi 131 wizyt
pytanie zadane 31 października 2016 w C i C++ przez Avernis Nałogowiec (27,400 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...