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.
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.
Tak.
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");
}
}
I w ogóle jeśli cokolwiek zmieniam nie widzę żadnych zmian oprócz translacji i lookAt.
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.