2013-11-09 110 views
2

我想在按住鼠標左鍵的同時在openGL中移動圖像。 我不是試圖拖動一個物體,只是移動整個圖片。它是一個分形的二維圖,我被告知我可以使用gluortho2d,但我找不到任何信息或類似的嘗試如何做到這一點。 我假設像用鼠標在openGL中移動繪圖

void mouse_callback_func(int button, int state, int x, int y) 
{ 
    if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN) 
    gluOrtho2D(x-250.0, x+250.0, y-250.0,y+250.); 
glutPostRedisplay(); 
} 

爲500×500的窗口,但它不工作。我離開的那一刻,窗口一片空白。 任何想法?

+0

可能有一個溢出和圖片出去屏?雖然我不知道答案,但這應該有助於您調試問題。在mouse_callback_func()中的提示符上打印x和y的值。 一旦你得到這個值,用gluOrtho2D替換它們(x-250.0,x + 250.0,y-250.0,y + 250)。並正常渲染圖像(現在不要使用鼠標)。檢查畫面是否正確顯示在屏幕上。我認爲它不會,然後你可以嘗試減少/增加值來檢查將呈現給你的視口的x/y值的範圍。 – viktorzeid

+0

你最初的預測是什麼? – jozxyqk

+0

我嘗試過,但它沒有奏效。我甚至低至x-1,x + 1,y-1,y + 1看看會發生什麼,仍然屏幕變空白 – Deadalus

回答

1

gluOrtho2D修改當前矩陣。它的設計與glMatrixMode(GL_PROJECTION)使用,例如:

glMatrixMode(GL_PROJECTION); //start editing the projection matrix 
glLoadIdentity(); //remove current projection 
gluOrtho2D(...); //create new one 
glMatrixMode(GL_MODELVIEW); //back to editing the modelview matrix 

它可能是更簡單的設置相機的概念...

float cameraX, cameraY; 
int lastMouseX, lastMouseY; 

void mouse_callback_func(int button, int state, int x, int y) 
{ 
    int dx = x - lastMouseX; 
    int dy = y - lastMouseY; 
    const float speed = 0.1f; 
    if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN) 
    { 
     cameraX += dx * speed; //or -=, depending on which direction feels more natural to you 
     cameraY -= dy * speed; //-= as mouse origin is top left, so +y is moving down 
     glutPostRedisplay(); 
    } 
    lastMouseX = x; 
    lastMouseX = y; 
} 

void display() 
{ 
    glLoadIdentity(); //remove transforms from previous display() call 
    glTranslatef(-cameraX, -cameraY, 0.0f); //move objects negative = move camera positive 
    ... 
+0

我被告知這正是gluortho2d可以做到的。而不是實際移動我的照片,我可以改變觀看窗口(即移動相機)。我被要求與gluortho2d具體做到這一點:S – Deadalus

+0

我玩弄glMatrixMode(GL_PROJECTION)等etc等 我什麼都得不到,是不斷重繪,即使我包括postredisplay.After我拖動我的鼠標左鍵單擊,沒有任何更改,然後我必須右鍵單擊並選擇一個數字(右鍵單擊可以更改組成該圖片的隨機點的數量)。 – Deadalus

+0

您*可以*使用投影矩陣來「移動相機」,但如果引入了照明,它將不起作用。 OpenGL沒有相機概念。做出一個唯一的方法是在場景中移動所有內容。考慮上面的'glTranslatef' - 通過移動場景中的所有內容,攝像機向右移動。這就是攝像頭的實現方式。你也可以添加'glRotatef'來讓相機旋轉。 ['gluLookAt'](http://www.opengl.org/sdk/docs/man2/xhtml/gluLookAt.xml)是一個方便的函數,直到你自己完成矩陣轉換。 – jozxyqk