ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • OpenGL 끄적임 - 5. Screen Aspect Ratio
    Graphics/OpenGL ES 2.0 2018. 5. 31. 19:09
    반응형

    Adjusting to the screen’s aspect ratio

    가로모드일 , 우리가 그린 table 찌그러지는건 OpenGL 좌표를 바로 보내서 그렇다. 



    원하는 화면은 아래다.





    점만 찍어서 되는게 있고 matrix넘겨야되는게 있고 차이가 뭔지?


    모든 디바이스와 화면 방향을 고려할 수는 없다.

    -선형대수와 matrix, vector를 배워본다.

    -matrix로 투영을 해본다.


    screen크기가 단말마다 다른데 테이블이 screen 어떻게 투영을 결정하는지?

    정답은 우리가 그릴 물체를 정사각형 안에 들게 그리면 된다. 이를 orthographic projection (직교투영) 이라고 한다. 

    720x1280의 device에 물체를 그린다고 하자. 720의 작은 범위를 1이라고 하고, 1280의  범위를 화면 크기에 비례해서 조정하는 . 1:1.78 비율 좌표를 계산하는 방법이 있다

    세로모드일 때 -1, 1로 배치했으므로 가로모드일때는 aspect = 1280/720 -> 1*aspect 로 재계산해서 배치한다. 




    행렬 (Matrix)

    위와 같이 큐브 안에 사물이 있다고 보고 우리는 orthographic projection matrix 이용해서 큐브 사이즈를 변경해 우리 스크린에 우리 scene 차거나 차도록 변경할 있다. perspective , orthographic projection으로 vector를 표시하는 방법에서 행렬은 필수적이다.



    vector : 1차원 배열. 하나. 보통 4개다. 



    Matrix : 2차원 배열. vector perspective , orthographic projection으로 표시하는 방법에 사용. 

    rotation, translation, scaling 시 사용한다.

    행렬을 곱하고 더하고 해서 각 vector를 구한다.

     


    행렬을 먼저 곱하거나 나중에 곱했을 때 vector의 결과값은 다르므로 주의하자.

    기본적으로 vector와 행렬을 곱하는 방법은 아래와 같다.




    Identity matrix


    identity matrix

    1을 곱한 효과와 같다.

    vector를 그대로 반환받기 위해서 사용한다.


    Translation using a matrix

    사물을 특정 위치로 이동한다.

    2,2위치에서 3,3만큼 이동시키고 싶을 때는 아래와 같이 사용한다.



    w의 기본 값은 지금은 1이지만 후에 perspective projections을 배울 때 사용할 것이다. 



    행렬계산은 opengl 패키지에 orthoM 메소드를 사용할 것이다.



    3D 좌표계에서는 카티전좌표(Cartesian coodinates)라고 하는 좌표계가 있다. x,y,z가 양(오른쪽)/음(왼쪽)으로 나뉘며 OpenGL은 오른쪽이 기본이다. 



    Android system에서는 기본은 양수 z로 변환하며 normalized device coordinates에서는 음수 z를 이용한다. orthoM()로 변환해서 사용할 수 있다.




    https://stackoverflow.com/questions/4124041/is-opengl-coordinate-system-left-handed-or-right-handed

    https://docs.microsoft.com/ko-kr/windows/uwp/graphics-concepts/coordinate-systems-and-geometry

    http://gcland.tistory.com/135

    http://blog.naver.com/PostView.nhn?blogId=itrainl4&logNo=90185898740



    source - https://github.com/SeungwonLee/OpenGLExample/blob/dev/app/src/main/java/com/openglexample/airhockey/AirHockeyMatrixRenderer.kt

    https://github.com/SeungwonLee/OpenGLExample/blob/dev/app/src/main/res/raw/simple_vertex_shader_matrix.glsl



    반응형
Designed by Tistory.