0

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 = 0; x <lengthなどを実行する前に、行(表示される唯一の行)が画面の左端ではなく中央から開始することに注意してください。また、ウィンドウ全体に長方形を描画する場合は、0,0ではなく負の300x300から開始する必要があります。

私が見るのは、画面の中央を横切る1本の水平線だけです。問題は、ウィンドウサイズが実際に何であるかわからないことだと思います。クリックした場所で印刷するときはいつでも

static void mouseEvent(int button, int state, int x, int y) {
cout<<"\nMouse Event!";
cout<<"\n\tbutton:"<<button;
cout<<"\n\tstate:"<<state;
cout<<"\n\tx:"<<x;
cout<<"\n\ty:"<<y<<"\n";
}

左上隅が0,0、右下隅が300,300であることが出力されます。そこで、GLGridの長さと幅をそれぞれ300に設定しました。ウィンドウの長さと幅を別のものに設定する必要がありますか?もしそうなら、何ですか?私はOpenGLを初めて使用するので、無知を許してください。徹底的に、そして何か他の微妙なことが問題である可能性があるかどうかわからないので、私はより多くのコードを含めます

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();
}
4

1 に答える 1

1

垂直線を描画するときは、x値ではなく値を変更する必要がありますy

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

おそらくもっと間違っているでしょうが、これは変更すべきことの1つです。

于 2012-12-06T07:35:25.167 に答える