C 看不见工作

C 看不见工作,c,opengl,glut,glulookat,C,Opengl,Glut,Glulookat,我试图使用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

我试图使用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放大?

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


使用带纹理的四边形以获得所需的效果。不要使用GLDRAW像素。曾经glDrawPixels速度慢,存在大量问题,而且支持程度很低,因此决定最好将其从OpenGL-3及更高版本中完全删除。

您设置了投影矩阵吗?如果不是,那么它将是identity,这意味着您正在使用。这样,移动
z
不会有任何作用,因为这只会改变使用透视图时的外观。@vesan:没关系。glDrawPixels不受PMV转换的影响。@DatenWalf:啊,它有glDrawPixels。我的坏朋友,没注意到。在这种情况下,你当然是对的。