Edit - Dodano więcej koduKorzystanie z macierzy. Obracać w OpenGL ES 2.0
uwzględniając wiele problemów próbujących prawidłowo obracać mój quad przy użyciu OpenGL ES 2.0.
Zawsze wydaje się obracać wokół środka współrzędnych ekranu. Próbuję go obrócić wokół własnego centrum (dla 2d, więc tylko z osi Z).
Eksperymentowałem z Matrix.translate, jak pokazano poniżej. Jednak zmiana pozycji x lub y po prostu rysuje kwadraturę w innym miejscu na ekranie, ale kiedy się obraca, znowu obraca się wokół środka ekranu. Czy ktoś mógłby wyjaśnić, jak zmusić go do obracania się wokół własnej osi z (jak koło)?
Dzięki, tutaj są odpowiednie linie kodu - jeśli potrzebujesz więcej, proszę zapytaj, a ja opublikuję. (Uwaga: przyjrzałem się wielu podobnym pytaniom na temat SO i szerszego internetu, ale jak dotąd nie udało mi się znaleźć odpowiedzi).
Dzięki.
//Set rotation
Matrix.setRotateM(mRotationMatrix, 0, -angle, 0, 0, 1.0f);
//Testing translation
Matrix.translateM(mRotationMatrix, 0, -.5f, .5f, 0f);
// Combine the rotation matrix with the projection and camera view
Matrix.multiplyMM(mvpMatrix, 0, mRotationMatrix, 0, mvpMatrix, 0);
Moi Shadery (zadeklarowane na poziomie klasy)
private final String vertexShaderCode =
"uniform mat4 uMVPMatrix;" +
"attribute vec4 vPosition;" +
"void main() {" +
" gl_Position = uMVPMatrix * vPosition;" +
"}";
private final String fragmentShaderCode =
"precision mediump float;" +
"uniform vec4 vColor;" +
"void main() {" +
" gl_FragColor = vColor;" +
"}";
Od onSurfaceChanged
float ratio = (float) width/height;
Matrix.frustumM(mProjMatrix, 0, -ratio, ratio, -1, 1, 3, 7);
In My metody onDrawFrame
// Set the camera position (View matrix)
Matrix.setLookAtM(mVMatrix, 0, 0, 0, 3, 0f, 0f, 0f, 0f, 1.0f, 0.0f);
//Calculate the projection and view transformation
Matrix.multiplyMM(mMVPMatrix, 0, mProjMatrix, 0, mVMatrix, 0);
Hi @Sebby Johanns. Dzięki za komentarz, czy w tej chwili nie rotuję przed tłumaczeniem? Byłbym wdzięczny, gdybyś mógł wyjaśnić bardziej szczegółowo - dodałem jeszcze trochę kodu - czy to wystarczy? Proszę doradzić, jeśli potrzebujesz więcej (i której części potrzebujesz) - wielkie dzięki! – Zippy
Jeśli tłumaczenie ma na celu przesunięcie środka obrotu, a nie przesunięcie kwadratu, to tłumaczenie, obrót, tłumaczenie z powrotem. – mbeckish
@ Ciekawe podziękowania za komentarz, słyszałem, jak ludzie mówią "przenosić i tłumaczyć", ale jeszcze nie rozumiem tego całkowicie, myślę, że chcesz przetłumaczyć x i y, a następnie ponownie przetłumaczyć z przeciwnymi wartościami (powiedzmy 1,1, a potem -1, -1) - czy mógłbyś edytować, żeby pokazać przykład? Próbowałem tego, ale nic nie dostałem. Dzięki! – Zippy