Java libGDX

0

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

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

ale nic się nie zmienia.

0

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

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.

0

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

camera.update();
0

Tak.

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.

0

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


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

	}
0

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1