역행렬은 언제 쓰나? (When I use matrix invertion?) [행렬,역행렬,3D,메트릭스,matrix,matrix invertion]

이미지출처 : en.wikipedia.org

역행렬(Matrix invertion)







내가 3D를 건드리게 될 줄 알았다면,



선형대수학을 공부했을 텐데….



마우스 이벤트는 2D 좌표계에서 움직인다.



2D상에서 일어난 이벤트로 3D 객체를 변형할 때, 역행렬이 아주 유용하게 사용된다.



만약 (ㅜ) - 이렇게 생긴 3D 물체를 돌리고, (ㅏ) 상태에서 이동을 시킨다면. z축으로 90도 회전되었기 때문에,



마우스를 움직이는 방향과는 다르게 지멋대로 물체가 움직이게 된다.



이럴때 4*4 행렬의 역행렬을 가져와서 이동을 시키면,



물체를 돌리기 전 상태에서 이동을 시킬 수 있다.



자바에서는 Matrix4f의 invert메소드를 사용하면, 역행렬을 구할 수 있다.




4*4 Matrix

r = Rotation

t = translation

[

{rx0,rx1,rx2,tx},

{ry0,ry1,ry2,ty},

{rz0,rz1,rz2,tz},

{0,0,0,1}

]



----

Open english content



by


Tags : , , , , ,

  • 재미있게 읽으셨나요?
    방랑자의 이야기.
    월풍도원에선 기부를 받습니다.

LWJGL 이동과 회전(LWJGL - Rotation and Picking)[LWJGL,이동,회전,Rotation and Picking,lwjgl.org,Lightweight Java Game Library]

이미지출처 : www.lwjgl.org

LWJGL 이동과 회전 그리고 픽킹(LWJGL - Rotation and Picking)

물체의 이동과 회전


Code:

GL11.glTranslatef(this.xoff, this.yoff, this.zoff-this.centerAvgXYZ);
        GL11.glRotatef(this.xrot, 1.0f, 0.0f, 0.0f);
        GL11.glRotatef(this.yrot, 0.0f, 1.0f, 0.0f);


Picking


Code:

public void SelectObjects(int x, int y) {
      int hits;
      int[] viewport = new int[4];
      int buffer[] = new int[256];
      IntBuffer selectBuff = ByteBuffer.allocateDirect(1024).order(ByteOrder.nativeOrder()).asIntBuffer();
        IntBuffer vpBuffer = ByteBuffer.allocateDirect(64).order(ByteOrder.nativeOrder()).asIntBuffer();
      GL11.glGetInteger(GL11.GL_VIEWPORT, vpBuffer);
      vpBuffer.get(viewport);
      GL11.glSelectBuffer(selectBuff);
      GL11.glMatrixMode(GL11.GL_PROJECTION);
      GL11.glPushMatrix();
      GL11.glRenderMode(GL11.GL_SELECT);
      GL11.glLoadIdentity();
      GLU.gluPickMatrix((float)x,(float)(viewport[3]-y), 5.0f, 5.0f, viewport);    
        GLU.gluPerspective(45.0f, ratio, 0.001f, 100.0f);
           //Rectangle rect = this.canvas.getClientArea();              
          // ratio = (float) rect.width / (float) rect.height;
     
      GL11.glMatrixMode(GL11.GL_MODELVIEW); // 물체를 그려줄때는 다시 모델뷰로..
      drawScatterPlot();                                  // 물체를 그려주고,
      GL11.glRotatef(this.xrot, 1.0f, 0.0f, 0.0f);  // 그 후에 회전을 해준다.
        GL11.glRotatef(this.yrot, 0.0f, 1.0f, 0.0f);
       
      hits = GL11.glRenderMode(GL11.GL_RENDER);
      System.out.println("Hits : "+hits);
      selectBuff.get(buffer);
      if(hits>0) {
        int selectedObjID = buffer[3];
      int depth = buffer[1];
                      for (int i = 1; i < hits; i++) {
                if (buffer[i * 4 + 1] < (int) depth) {
                  selectedObjID = buffer[i * 4 + 3];
                      depth = buffer[i * 4 + 1];
                }
          }
          ProcessSelect(selectedObjID);
      }
      GL11.glMatrixMode(GL11.GL_PROJECTION);            
      GL11.glPopMatrix();            
      GL11.glFlush();
      GL11.glMatrixMode(GL11.GL_MODELVIEW);              
  }



by


Tags : , , , , , , , , ,

  • 재미있게 읽으셨나요?
    방랑자의 이야기.
    월풍도원에선 기부를 받습니다.

이클립스 RCP TableViewer. Table에 Edit 기능을 붙일때[TableViewer,이클립스 RCP,eclipse RCP]

이미지출처 : www.mobilefish.com

이클립스 RCP TableViewer. Table에 Edit 기능을 붙일때..









TableViewer에

setCellEditors(CellEditor[])와

setCellModifier(ICellModifier)를 해 주어도.

셀 에디트가 되지 않을때에는,

setColumnProperties(String[] colimnNames)

를 이용하여 컬럼 프로퍼티를 정해주면 에디트가 가능하다.



by


Tags : , , , , , ,

  • 재미있게 읽으셨나요?
    방랑자의 이야기.
    월풍도원에선 기부를 받습니다.