openGL 2D像素旋转

时间:2015-07-24 18:25:51

标签: c opengl

我正在尝试旋转2D像素矩阵,但实际上没有发生任何事情。 我的来源是存储的bitmap[w x h x 3]。 为什么显示的图像不是旋转的? 这是显示功能:

void display() 
{
    uint32_t    i = 0,j = 0,k = 0;
    unsigned char   pixels[WINDOW_WIDTH * WINDOW_HEIGHT * 3];

    memset(pixels, 0, sizeof(pixels));
    for(j = bitmap_h -1; j > 0; j--) {
        for(i = 0; i < bitmap_w; i++) {
            pixels[k++]=bitmap[j][i].r;
            pixels[k++]=bitmap[j][i].g;
            pixels[k++]=bitmap[j][i].b;
        }
    }
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

    glRotatef(90,0,0,1);    
    glDrawPixels(g_img.descriptor.size_w, g_img.descriptor.size_h, GL_RGB,  GL_UNSIGNED_BYTE, &pixels);

    glutSwapBuffers();
} 

2 个答案:

答案 0 :(得分:4)

首先,不应使用glDrawPixels。你遇到的问题是其中一个原因。 glDrawPixels运行的复杂规则太大了,无法在这里概述,我们只是说,这是一个所谓的光栅位置&#34;在你的窗口中,glDrawPixels将放置它绘制的图像的左下角。任何转换都不会应用于图像。

然而,在设置光栅位置时,应用变换时的那个。并且,无论出于何种原因,光栅位置应位于可见窗口之外,根本不会被绘制出来。

解决方案:不要使用glDrawPixels。 不要使用glDrawPixels。 不要使用glDrawPixels。我重复 DON&#39; T使用glDrawPixels。 你最好忘记这个功能实际存在于传统的OpenGL中。

使用纹理四边形代替。这也将正确转变。

答案 1 :(得分:0)

我做了类似的事情。我正在使用OpenGL / C ++创建一个3D太空射击游戏。对于我的一个级别,我在背景中有一堆小行星/岩石,每个小行星/岩石都以随机的速度旋转和移动。

我通过获取小行星位图图像并创建纹理来做到这一点。然后我将纹理应用于正方形(/Users/MyUser/Project/OriginalDirectory/data.json)。每次绘制正方形时,我都会将每个顶点坐标(glBegin(GL_QUADS))与旋转矩阵相乘。

glVertex3f(x, y, z)

|cos0 -sin0| |sin0 cos0 | 是theta角度。我将此角度存储为0类的一部分。每次迭代我都会增加一个值,具体取决于我希望小行星旋转的速度。它很棒。

相关问题