Delphi Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
델파이 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
FreePascal/Lazarus
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
델마당
볼랜드포럼 광고 모집

델파이 Q&A
Delphi Programming Q&A
[13569] glTranslate();에 관한 간단한 질문입니다. 코드추가해요
김근홍 [ju74545] 1747 읽음    2011-01-25 10:16
glTranslate();함수가 어떤 물체를 이동시켜주잖습니까???

그런데 이동시킬때 특정 물체만을 이동시키는건가요 아님
좌표계가 통째로 이동하는건가요??

물체를 회전시켜야 하는데 회전의 중심점이 잘 잡히지가않네요...ㅠㅠ

표현되는부분의 코드입니다
procedure Display;
var
  i,j,k : integer;
  xmax,ymax,zmax,vmax,xmin,ymin,zmin,vmin : double;
  centerx,centery,centerz,centerv : double;
begin

   xmax:=nodex[1]; ymax:=nodey[1]; zmax:=nodez[1]; vmax:=nodev[1];
   xmin:=nodex[1]; ymin:=nodey[1]; zmin:=nodez[1]; vmin:=nodev[1];
  for i := 1 to nodenum do begin
    if nodex[i] >= xmax then  xmax := nodex[i]
    else if nodex[i] <= xmin then  xmin := nodex[i] ;
    if nodey[i] >= ymax then  ymax := nodey[i]
    else if nodey[i] <= ymin then  ymin := nodey[i] ;
    if nodez[i] >= zmax then  zmax := nodez[i]
    else if nodez[i] <= zmin then  zmin := nodez[i] ;
    if nodev[i] >= vmax then  vmax := nodev[i]
    else if nodev[i] <= vmin then  vmin := nodev[i] ;
  end;

  centerx := (xmax+xmin)/2;
  centery := (ymax+ymin)/2;
  centerz := (zmax+zmin)/2;
  centerv := (vmax+vmin)/2;                                       
//=-------------------------------여기까지 최대값최소값으로 중심점을 찾은 모습.
//=-------------------------------어떤 한쪽으로 치우친 데이터를 넣어도 원점으로 모아 보이게 하려함.

  glclear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
//  glPushMatrix;
  glMatrixMode(GL_MODELVIEW);
  glLoadIdentity();
  glScalef(0.3,0.3,0.3);

  glTranslate(0,0,0);

  glRotatef(anglex, 1, 0, 0);
  glRotatef(angley, 0, 1, 0);
  glColor4fv(@diffuseMaterial);
//--------------------------------------------------------------------------------
  for j := 1 To elenum do begin
    i1:=ele1node[j]; i2:=ele2node[j]; i3:=ele3node[j];

    x1:=nodex[i1]; y1:=nodey[i1]; z1:=nodez[i1];
    x2:=nodex[i2]; y2:=nodey[i2]; z2:=nodez[i2];
    x3:=nodex[i3]; y3:=nodey[i3]; z3:=nodez[i3];

    BAx := x2-x1;     BAy := y2-y1;     BAz := z2-z1;
    CAx := x3-x1;     CAy := y3-y1;     CAz := z3-z1;


   nx:= (BAy*CAz)-(BAz*CAy);
   ny:= (BAz*CAx)-(BAx*CAz);
   nz:= (BAx*CAy)-(BAy*CAx);
//----------------------------------------------------------------각 요소들의 법선벡터 잡은 부분
  glbegin(GL_TRIANGLES);
    glnormal3f( nx , ny , nz );
    glVertex3f(x1-centerx,  y1-centery,  z1-centerz);
    glVertex3f(x2-centerx,  y2-centery,  z2-centerz);
    glVertex3f(x3-centerx,  y3-centery,  z3-centerz);               질문은 이부분입니다!!!!!!!!!!!!!!!!
  glend();
  end;
//--------------------------------------------------표현
   glFlush();


여기서말입니다. glVertex3f 에서 -centerx 을 하게되면 모델의 중심이 원점으로 이동하는것 같더라구요.
회전을 시켰을때도 전체모형의 가운데를 중심으로 회전합니다.
그런데 glVertex3f에서 0,0,0으로 하고 대신 gltranslate 에서 (-centerx ,-centery ,-centerz) 를 하게되면
모델이 중앙이 원점으로 이동하지 않아서 회전을시킬경우 원점을 중심으로 회전하니 이상하게 회전이 됩니다..


단순하게 제가 궁금해하는부분은
glTranslate();함수가 모델만을 이동시키는지 아니면 원점까지 이동시키는지를 확실히 알고싶습니다.

+ -

관련 글 리스트
13569 glTranslate();에 관한 간단한 질문입니다. 코드추가해요 김근홍 1747 2011/01/25
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.