2016-03-11 64 views
-2

我正在與QT一起工作,我將用OPENGL來設計一個點(0,0)。 問題是:點不在中間:如何更改中心的opengl的座標點

http://i.stack.imgur.com/diB33.png

我的代碼:

頭:

#ifndef BRM_H 
#define BRM_H 

#include <QGLWidget> 

#include<qwidget.h> 
class brm : public QGLWidget 
{ 
    Q_OBJECT 

public: 
    int x , y ; 
    explicit brm(QWidget *parent = 0); 

    void initializeGL(); 
    void paintGL(); 
    void resize(int a ,int b); 


}; 

#endif // BRM_H 

類:

#include<brm.h> 
#include<qgl.h> 
#include <GL/glut.h> 
#include <GL/glu.h> 
brm::brm(QWidget *parent) 
    : QGLWidget(parent) 
{ 


} 




void 
brm::initializeGL(){ 
    glClearColor(0,0,0,1); 
} 

void brm::paintGL(){ 



    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 



    glBegin(GL_POINTS); 
     glVertex2f(0.0, 0.0); 
    glEnd(); 
} 

void brm::resize(int a , int b){ 

} 

我會改變點,在這樣的中間: http://i.stack.imgur.com/WRC2e.png

回答

0

嘗試這種情況:

void brm::resize(int a , int b){ 
    glViewport(-a/2, -b/2, a, b); 
} 

在此之後,[0,0]的位置應該在窗口小部件的中心是總是如此。

+0

它仍然是同樣的問題 – StackTok

0

爲什麼不能定義2個變量(如果你添加這兩個與你的點座標,你有你的校正前座標) 所以

const int MIDLLE_X = 1280/2; //or whatever your width divided by 2 is 
const int MIDDLE_Y = 720/2; //or whatever your height divided by 2 is 

(使他們的全球如果可能的話)

所以(MIDDLE_X,MIDDLE_Y)爲座標爲中心

比可以使2功能

int centerizeX(int x) { // wants the X coordinate 
     return x + MIDDLE_X; 
} 

int centerizeY(int y) { // wants the Y coordinate 
     return y += MIDDLE_X; 
} 

與你仍然可以使用你的座標,他們甚至可以消極。但是當你想要渲染的時候,繪製(不管你和屏幕有什麼關係),你應該調用這兩個函數來修改它們的上位位置。

+0

它仍然是一樣的問題 – StackTok