2013-02-20 2 views
0

누구나 2 객체 (예 : 큐브와 구)를 원점 (0, 0, 0)으로 그리는 법을 가르쳐 줄 수 있습니다. 큐브를 움직이면 구가 원점에 그대로 남아 있습니다. . 구체를 움직이는 것과 마찬가지로 큐브는 .. keyboardfunc를 사용합니다.opengl 객체 이동/switch 문

if (!LightSwitch) 
{ 
glEnable(GL_LIGHTING); 
glEnable(GL_LIGHT0); 
glPushMatrix(); 
glTranslatef(CubeX, CubeY, CubeZ); 
glColor3f(1.0, 0.0, 0.0); 
glPushAttrib(GL_LIGHTING_BIT | GL_CURRENT_BIT); 
glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, Green); 
glutSolidCube(2.0); 
glPopAttrib(); 
glPopMatrix(); 
glEnd(); 
} 

if (!LightSwitch1) 
{ 
glEnable(GL_LIGHTING); 
glEnable(GL_LIGHT1); 
glPushMatrix(); 
glTranslatef(AxisX, AxisY, AxisZ); 
glColor3f(1.0, 0.0, 0.0); 
glPushAttrib(GL_LIGHTING_BIT | GL_CURRENT_BIT); 
glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, Blue); 
glutSolidSphere(2.0, 10.0, 5.0); 
glPopAttrib(); 
glPopMatrix(); 
} 
glEnd(); 
+0

glEnd()는 불필요하지만 그렇지 않으면 드로잉 코드가 괜찮은 것 같습니다. 문제는 아마도 다른 곳에서 발생했을 것입니다. CubeXYZ 및 AxisXYZ 값을 인쇄하여 예상 한 값인지 확인하십시오. –

+0

그 값은 (0, 0, 0)으로 추측됩니다 ... 하지만 내 코드로는 둘 다 동시에 이동합니다. –

답변

0

은 난 전문가는 아니지만, 나는 구체와 큐브에 대해 별도의 glPushMatrix()/glPopMatrix가() 블록을함으로써, 당신은 각각 자신의 좌표 로컬 시스템 오브젝트주는 있다고 생각합니다. 이것이 서로 독립적으로 변형 된 이유입니다. 당신이 그들을 함께 이동하려면

먼저) /) 당신 glPushMatrix (외부 glTranslate()을 지정 glPopMatrix가을 (필요 : 당신이 원하는 경우

glTranslatef(translation....);  // Translates the whole scene 
glPushMatrix(); 
    glTranslatef(the sphere);  // Sphere & cube locations changeable via keyb. 
    glTranslatef(the cube); 
glPopMatrix(); 

, 말, 관련하여 큐브를 회전 난 당신의 코드가 생각

glPushMatrix(); 
    glTranslatef(the sphere);  
     glPushMatrix(); 
     glRotatef(the cube);  // Rotate about specific axis of the sphere 
     glPopMatrix(); 
glPopMatrix(); 
0

: 구는) 새로운 glPushMatrix을 (할 첫 번째 블록 내에 중첩/glPopMatrix가() 블록 (. 즉, 구의 중심의 좌표계 큐브의 기원을) 좌표축에서 구를 그리고 큐브에서 큐브를 그리는 데 적합합니다. 키보드 기능을 사용하고 있고, 하나만 움직이려고 할 때 키보드 기능을 함께 사용한다고 가정 해보십시오. 키보드 함수에서 두 변수 세트를 모두 업데이트한다고 생각합니다. CubeXYZ 및 AxisXYZ를 인쇄하여 올바른 것을 얻고 있는지 확인하십시오.