Java libGDX

Darth Bane
  • Rejestracja:ponad 9 lat
  • Ostatnio:8 dni
  • Postów:29
0

Jak ustawić w bibliotece libGDX własną macierz projekcji i widoku?
Bo nie mogę znaleźć w przykładach ani w dokumentacji.
Robię tak:

Kopiuj
camera.view.set(widok);
camera.projection.set(projekcja);

ale nic się nie zmienia.


(...) siła przetrwania musi pochodzić z wnętrza. Inni zawsze zawiodą. Przyjaciele, rodzina, towarzysze broni... w ostatecznym rozrachunku każdy zostaje sam. W potrzebie zawsze szukaj pomocy w sobie. Głosić moralność jest łatwo, uzasadnić trudno.
Kandif
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 4 lata
  • Postów:231
0

Nie wiem o co dokładnie ci chodzi, korzystasz z OrthographiCamera ? To gra 3D czy 2D ?


"-._,-'"-.,-'"-._,-'"-.,-'"-._,-'"-.,-'"-._,-'"-.,-'"-._,-'"-.,-'"-._,-'"-.,-'"-._,-'"-.,-'"-._,-'"-.,-'
edytowany 1x, ostatnio: Kandif
Darth Bane
  • Rejestracja:ponad 9 lat
  • Ostatnio:8 dni
  • Postów:29
0

PerspectiveCamera, gra 3D. Chodzi mi o to że wyliczam sobie macierz projekcji i widoku i chce te macierze wyliczone ustawić w kamerze. I gdy ustawiam tak jak pokazałem wcześniej, nic się nie zmienia.


(...) siła przetrwania musi pochodzić z wnętrza. Inni zawsze zawiodą. Przyjaciele, rodzina, towarzysze broni... w ostatecznym rozrachunku każdy zostaje sam. W potrzebie zawsze szukaj pomocy w sobie. Głosić moralność jest łatwo, uzasadnić trudno.
Kandif
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 4 lata
  • Postów:231
0

A użyłeś funkcji "update?" Jest ona obowiązkowa po każdej zmianie parametrów kamery.

Kopiuj
camera.update();

"-._,-'"-.,-'"-._,-'"-.,-'"-._,-'"-.,-'"-._,-'"-.,-'"-._,-'"-.,-'"-._,-'"-.,-'"-._,-'"-.,-'"-._,-'"-.,-'
edytowany 1x, ostatnio: Kandif
Darth Bane
  • Rejestracja:ponad 9 lat
  • Ostatnio:8 dni
  • Postów:29
0

Tak.


(...) siła przetrwania musi pochodzić z wnętrza. Inni zawsze zawiodą. Przyjaciele, rodzina, towarzysze broni... w ostatecznym rozrachunku każdy zostaje sam. W potrzebie zawsze szukaj pomocy w sobie. Głosić moralność jest łatwo, uzasadnić trudno.
Kandif
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 4 lata
  • Postów:231
0

Dziwne, ja zawsze korzystałem tylko z funkcji transform() to ustalenia pozycji i z lokkat() do ustawienia kierunku kamery. Nie mógłbyś rzucić więcej kodu,ciężko zweryfikować co jest źle jeśli nie widać większości kodu.


"-._,-'"-.,-'"-._,-'"-.,-'"-._,-'"-.,-'"-._,-'"-.,-'"-._,-'"-.,-'"-._,-'"-.,-'"-._,-'"-.,-'"-._,-'"-.,-'
Darth Bane
  • Rejestracja:ponad 9 lat
  • Ostatnio:8 dni
  • Postów:29
0

To ma być gra z rzeczywistością rozszerzoną, więc wyliczam potrzebne macierze i muszę je ustawić.

Kopiuj

public void render() {
		camController.update();
		cam.update();
		Gdx.gl.glViewport(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
		Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT);
		spriteBatch.begin();			
		spriteBatch.draw(mainTexture, 0, 0);
		spriteBatch.end();
		modelBatch.begin(cam);
		modelBatch.render(instances, environment);
		modelBatch.end();

	}

public void create() {
		
		ui = new UI();
		mRot = new Mat();
		mTra = new Mat();
		spriteBatch = new SpriteBatch();
		modelBatch = new ModelBatch();
		environment = new Environment();
		environment.set(new ColorAttribute(ColorAttribute.AmbientLight, 0.4f, 0.4f, 0.4f, 1f));
		environment.add(new DirectionalLight().set(0.8f, 0.8f, 0.8f, -1f, -0.8f, -0.2f));

		cam = new PerspectiveCamera(60, Gdx.graphics.getWidth(), Gdx.graphics.getHeight());

		cam.position.set(0, 0, 0);
		cam.near = near;
		cam.far = far;

		ModelLoader loader = new ObjLoader();
		suzan = loader.loadModel(Gdx.files.internal("cube.obj"));
		plane = loader.loadModel(Gdx.files.internal("plane.obj"));
		suzanInstance = new ModelInstance(suzan);
		planeInstance = new ModelInstance(plane);

		instances.add(suzanInstance);
		instances.add(planeInstance);
		Gdx.input.setInputProcessor(camController);
		camController = new CameraInputController(cam);
		Gdx.input.setInputProcessor(camController);
		Gdx.gl.glActiveTexture(GL20.GL_TEXTURE0);
		mainTexture = new Texture(Gdx.files.internal("markertest.jpg"));

		ui.setFrame("***/markertest.jpg");

		cam.translate(0, 0, 0);
		cam.lookAt(0, 0, 0);

		Mat intrinsic[] = new Mat[1];
		Mat distCoeffs[] = new Mat[1];
		if (ui.isFrameSet() == true) {
			CameraCalibration cC = new CameraCalibration();
			Mat camM = null;
			cC.readCameraMatrix("***/macierz5.dat", intrinsic, distCoeffs);
			List<Mat> rvector = new ArrayList<Mat>();
			List<Mat> tvector = new ArrayList<Mat>();
			suzanInstance.transform.setTranslation(0, 0, 0);
			intr = intrinsic[0];
			showMat("intrinsic", intr);
			ui.getTransform2(intrinsic[0], distCoeffs[0], tvector, rvector);
			tvec = tvector.get(0);
			Mat rvec = rvector.get(0);
			intr = intrinsic[0];
			Calib3d.Rodrigues(rvec, mRot);
			Calib3d.Rodrigues(tvec, mTra);

			Matrix4 perspective = new Matrix4(getCameraMatri4x4(intr, near, far));
			
			Matrix4 rot = new Matrix4(matToFloatArray4x4(mRot, tvec));
			Matrix4 neg = new Matrix4(getInvertMat4x4());

			neg.mul(rot); // for modelview matrix
			
			cam.view.set(neg);
			cam.projection.set(neg.mul(perspective));
			cam.update();


		} else {
			System.out.println("ramka nie ustawiona");
		}

	}

(...) siła przetrwania musi pochodzić z wnętrza. Inni zawsze zawiodą. Przyjaciele, rodzina, towarzysze broni... w ostatecznym rozrachunku każdy zostaje sam. W potrzebie zawsze szukaj pomocy w sobie. Głosić moralność jest łatwo, uzasadnić trudno.
Darth Bane
  • Rejestracja:ponad 9 lat
  • Ostatnio:8 dni
  • Postów:29
0

I w ogóle jeśli cokolwiek zmieniam nie widzę żadnych zmian oprócz translacji i lookAt.


(...) siła przetrwania musi pochodzić z wnętrza. Inni zawsze zawiodą. Przyjaciele, rodzina, towarzysze broni... w ostatecznym rozrachunku każdy zostaje sam. W potrzebie zawsze szukaj pomocy w sobie. Głosić moralność jest łatwo, uzasadnić trudno.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.