我正在尝试旋转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();
}
答案 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
类的一部分。每次迭代我都会增加一个值,具体取决于我希望小行星旋转的速度。它很棒。