使用opengl将摄像机采集回来的图像进行实时旋转,视见区是旋转的,可是视见区里面的图像不是随着视见区的旋转而旋转,而是随着摄像头的旋转而旋转,我的程序是先更新纹理图,再计算摄像机的旋转角度,之后再根据旋转角度贴图,这是哪的问题呢?

解决方案 »

  1.   

    在主函数中我是这么写的:
    UpdateTexture();
    Draw();
    其中
    void UpdateTexture()
    { ConvertBayer2Rgb(m_pImageBuffer,m_pRawBuffer,Width,Height,ConvertType,m_pLutR,m_pLutG,m_pLutB,true,Layout);
    DrawDibDraw (hdd, hdc, 0, 0, 1024, 768, &(m_pBmpInfo->bmiHeader), m_pImageBuffer, 0, 0, Width, Height, 0);
    glBindTexture(GL_TEXTURE_2D, texture[0]);
    glTexSubImage2D (GL_TEXTURE_2D, 0, 0, 0, 1024, 768, GL_BGR_EXT, GL_UNSIGNED_BYTE, data);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
    }
    data中存放图像数据
    void Draw (void)
    { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glLoadIdentity();
            glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 1024, 768, 0, GL_RGB, GL_UNSIGNED_BYTE, data);
            glRotatef(angleZ,0.0f,0.0f,-1.0f);
            glBegin(GL_QUADS);
    glTexCoord2f(0.0f, 0.0f); glVertex3f(-512.0f, -384.0f,  -1.0f);
    glTexCoord2f(1.0f, 0.0f); glVertex3f( 512.0f, -384.0f,  -1.0f);
    glTexCoord2f(1.0f, 1.0f); glVertex3f( 512.0f,  384.0f,  -1.0f);
    glTexCoord2f(0.0f, 1.0f); glVertex3f(-512.0f,  384.0f,  -1.0f);
    glEnd(); 
            glFlush ();
    }
    调试发现视见区是旋转angleZ角度,可是里面的图像与摄像机所采集到的图像一样,并没有被纠正angleZ角度,请问这是哪的问题呢?急求高手指点
      

  2.   

    一、
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 1024, 768, 0, GL_RGB, GL_UNSIGNED_BYTE, data);
    纹理的生成你写到绘制函数里面?二、
    glRotatef(angleZ,0.0f,0.0f,-1.0f);//绕Z轴旋转就写1.0f怎么变-1了?三、
    在使用旋转、平移、缩放时,前后得压栈,用:
    glPushMatrix();
    //..做旋转等操作
    glPopMatrix();太多问题了..