我正在使用QT
,我将使用OPENGL设计一个点(0,0)。
问题是:不在中间点:
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 :(得分:0)
为什么不定义另外两个变量(如果你用你的点坐标添加这两个变量,你有更正的坐标) 所以
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
(如果可能的话,让它们全球化)
so(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;
}
你仍然可以使用你的坐标,它们甚至可以消极。但是当你想要渲染,绘制(无论与屏幕有什么关系)时,你应该调用这两个函数,以便更正它们的上升位置。
答案 1 :(得分:0)
试试这个:
void brm::resize(int a , int b){
glViewport(-a/2, -b/2, a, b);
}
之后,[0,0]位置应始终位于小部件的中心。