簡體   English   中英

圖元通過滑塊在世界空間中繞軸x,y,z旋轉

[英]primitives rotation around the axis x, y, z in World Space by slider

基本體以世界空間為中心。 我想通過滑塊旋轉它們,如下圖所示。

程序界面

到目前為止,我正在使用以下代碼:

這是腐爛的對象定義:

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軸旋轉。

我正在尋找正確的方法。

您想將代碼發送到cpp文件中嗎,我可以幫您找一下嗎? 請注意如何使用glRotatef。 通常,您需要將角度設置為第一個參數,然后確定旋轉軸。

所以:

glRotatef(45.f,1,0,0); //x 
glRotatef(20.f,0,1,0); //y 
glRotatef(64.f,0,0,1); //z

您始終可以更改輪換順序或使其符合自己的需求。 因此,如果要將圍繞Y軸的旋轉表示為X,則需要:

glRotatef(m_y,1,0,0); //x but named y
glRotatef(m_x,0,1,0); //y but named x
glRotatef(m_z,0,0,1); //z

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM