用于绘制网格的OpenGL窗口大小

用于绘制网格的OpenGL窗口大小,opengl,grid,coordinates,Opengl,Grid,Coordinates,我试图在OpenGL窗口中绘制一个50x50网格。我绘制网格的代码是 void GLGrid::draw() { int y=-width; int yIncrement = width / 50; int x=-length; int xIncrement = length / 50; glColor3f(0.0f,0.0f,0.0f); for(y = -width; y < width; y+=yIncrement) { glBegin(GL_LINES);

我试图在OpenGL窗口中绘制一个50x50网格。我绘制网格的代码是

void GLGrid::draw() {

int y=-width;
int yIncrement = width / 50;
int x=-length;
int xIncrement = length / 50;


glColor3f(0.0f,0.0f,0.0f);
for(y = -width; y < width; y+=yIncrement) {
    glBegin(GL_LINES);
        glVertex3f(-width,y,0);
        glVertex3f(width,y,0);
    glEnd();
}

for(x = -length; x < length; x+=xIncrement) {
    glBegin(GL_LINES);
        glVertex3f(-length,x,0);
        glVertex3f(length,x,0);
    glEnd();
}
}

绘制垂直线时,需要更改
x
值,而不是
y
值:

glBegin(GL_LINES);
    glVertex3f(x,-length,0);
    glVertex3f(x,length,0);
glEnd();

可能还有更多的错误,但这是需要改变的一件事。

您使用什么来获取鼠标事件?你有没有做过任何
glMultMatrix
glScale
glTranslate
调用?我只是在做glutMouseFunc(mouseEvent);调用该函数。我不做任何多媒体、缩放或翻译呼叫……好的,谢谢,这有点帮助。我现在看到一个垂直的和一个水平的:),都在中间。如果你尝试在循环内打印,你确定你的
x
y
值在-300和300之间吗?是的,它们是。它们以6为增量。如果将
x
y
置于
-1
1
之间,会怎么样?(使它们浮动)嗯,问题是默认情况下,图形坐标从
-1
变为
1
。您可以使用
glOrtho
将透视图更改为更有用的透视图,方法是将其称为
glOrtho(0,300,0,300,-1,1)。您可能会注意到的一个烦恼是,鼠标位置函数只提供像素值。
static void initOpenGL() {
//set clear color to white
glClearColor(0.0f,0.0f,0.0f,1.0f);

glMatrixMode( GL_PROJECTION );
glLoadIdentity();
glMatrixMode( GL_MODELVIEW );
glLoadIdentity();
}


/*OpenGL calls*/
static void display(void)
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

if (!init)
{
    initOpenGL();
}

renderScene();

//...more code below in this function but pretty positive its irrelevant



static void renderScene() {

    drawBackground();

    drawGrid();

}


static void drawBackground() {
//draw a white rectangle for background
    glColor3f(1.0f,1.0f,1.0f);
    glBegin(GL_QUADS);
        glVertex3f(-windowMaxX, -windowMaxY, 0);
        glVertex3f(windowMaxX, -windowMaxY, 0);
        glVertex3f(windowMaxX, windowMaxY, 0);
        glVertex3f(-windowMaxX, windowMaxY, 0);
    glEnd();
}


static void drawGrid() {
    GLGrid.draw();
}
glBegin(GL_LINES);
    glVertex3f(x,-length,0);
    glVertex3f(x,length,0);
glEnd();