-1

我正在尝试使用 gluLookAt() 函数来控制放大和缩小。现在它根本没有改变矩阵,我不知道为什么。

以下是相关代码:

// Basic Opengl display function
void onDisplay()
{
   // Clear the initial buffer
   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    // Set up viewing transformation, looking down -Z axis
    glLoadIdentity();
    gluLookAt(0, 0, zPosition, 0, 0, -1, 0, 1, 0);


    // Draw the complete Mandelbrot set picture
    glDrawPixels(520, 520, GL_RGB, GL_FLOAT, pixels);
    //glLoadIdentity();
    glutSwapBuffers();
}

void keyPressed (unsigned char key, int x, int y)
{
    if(key == 'w')
    {
        printf("pressed %a", key);
        printf("\n");
        zPosition -= 1.0;
        glutPostRedisplay();
    }
}

它与 glLoadIdentity() 调用有关吗?我对openGL中的不同身份不太熟悉。

那么如何更改此代码以在 w 放大时进行按键操作?

4

1 回答 1

0

glDrawPixels 不受变换矩阵的影响,正如人们天真假设的那样。特别是位置集 glRasterPos 被转换为视口中的一个点,然后是从数据到帧缓冲区的常规逐像素块传输的原点。这意味着不会发生缩放等情况。

使用带纹理的四边形来获得所需的效果。并且不要使用 glDrawPixels。曾经!glDrawPixels 很慢,有很多问题并且支持很差,因此决定最好从 OpenGL-3 及更高版本中完全删除它。

于 2015-01-27T23:13:40.060 回答