0
基元以世界空間爲中心。我想通過滑塊來旋轉它們,如下圖所示。基本元素通過滑塊圍繞世界空間中的x,y,z軸旋轉
到目前爲止,我正在使用此代碼:
這是腐對象定義:
struct rotation
{
float x = 180;
float y = 180;
float z = 180;
}
當用戶改變滑塊的位置執行這東西
void MyFrame::OnSliderChanged(wxScrollEvent &event)
{
//cur_sel is currently selected primitive and scene
switch(event.GetId())
{
case ID_SLIDER0: //slider X
GLCanvas->rot[GLCanvas->cur_sel].x = event.GetPosition();
break;
case ID_SLIDER1: //slider Y
GLCanvas->rot[GLCanvas->cur_sel].y = event.GetPosition();
break;
case ID_SLIDER2: //slider Z
GLCanvas->rot[GLCanvas->cur_sel].z = event.GetPosition();
break;
}
}
這個東西是所有的時間執行(在幀改變) :
glRotatef(rot[cur_sel].x,rot[cur_sel].x, 0.0f, 0.0f);
glRotatef(rot[cur_sel].y,0.0f, rot[cur_sel].y, 0.0f);
glRotatef(rot[cur_sel].z,0.0f, 0.0f, rot[cur_sel].z);
我知道這是不好的方法,因爲有時(當我混合x,y,z位置)旋轉不正確執行。例如,當我圍繞x軸旋轉時,它看起來像繞y軸轉動。
我正在尋找適當的方法。