Это раньше: http://img22.imageshack.us/img22/5310/beforedes.jpg ZND после: http://img189.imageshack.us/img189/8890/afterr.jpgЯ вижу артефакты, когда я пытаюсь повернуть изображение
EDIT :: Теперь, когда я смотрю на загрузку Imageshack, в артефакты уменьшаются много .. но поверьте мне, они более выражены, чем это.
Я не понимаю, почему это происходит. Imageshack загружает их в jpg, но в моей программе они находятся в папке с изображениями как .tif (причина .tif заключается в том, что я не мог получить ЛЮБОГО другого изображения для сохранения своих прозрачных частей).
Но в любом случае эти артефакты следуют оригинальной верхней части изображения, поскольку он вращается в любом месте, кроме оригинала.
Вот часть моего кода, который загружает изображение
GLuint texture;
GLenum texture_format;
GLint nofcolors;
GLfloat spin;
bool Game::loadImage()
{
SDL_Surface * surface; // this surface will tell us the details of the image
if (surface = SM.load_image("Images/tri2.tif"))
{
//get number of channels in the SDL surface
nofcolors = surface->format->BytesPerPixel;
//contains an alpha channel
if (nofcolors == 4)
{
if (surface->format->Rmask == 0x000000ff)
texture_format = GL_RGBA;
else texture_format = GL_BGRA;
}
else if (nofcolors == 3) //no alpha channel
{
if (surface->format->Rmask == 0x000000ff)
texture_format = GL_RGB;
else texture_format = GL_BGR;
}
// Have OpenGL generate a texture object handle for us
glGenTextures(1, &texture);
// Bind the texture object
glBindTexture(GL_TEXTURE_2D, texture);
// Set the texture’s stretching properties
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, nofcolors, surface->w, surface->h, 0, texture_format, GL_UNSIGNED_BYTE, surface->pixels);
glEnable(GL_TEXTURE_2D);
glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
}
else
{
SDL_Quit();
return false;
}
// Free the SDL_Surface only if it was successfully created
if (surface)
{
SDL_FreeSurface(surface);
return true;
}
else return false;
}
void Game::drawImage()
{
// Clear the screen before drawing
glClear(GL_COLOR_BUFFER_BIT);
glTranslatef(float(S_WIDTH/2), float(S_HEIGHT/2), 0.0f);
glRotatef(spin, 0.0, 0.0, 1.0);
// Bind the texture to which subsequent calls refer to
glBindTexture(GL_TEXTURE_2D, texture);
glBegin(GL_QUADS);
{
// Top-left vertex (corner)
glTexCoord2i(0, 0);
glVertex3f(-64, 0, 0);
// Top-right vertex (corner)
glTexCoord2i(1, 0);
glVertex3f(64, 0, 0);
// Bottom-right vertex (corner)
glTexCoord2i(1, 1);
glVertex3f(64, 128, 0);
// Bottom-left vertex (corner)
glTexCoord2i(0, 1);
glVertex3f(-64, 128, 0);
}
glEnd();
glLoadIdentity();
SDL_GL_SwapBuffers();
}
lol, когда я загрузил эту страницу, я думал, что ваши артефакты были пылью на моем экране, и я попытался стереть ее. – GManNickG
Попробуйте сохранить как PNG? –
Формат PNG не загрузит прозрачность в моей программе. Ничто иное, кроме TIF. Это сводит меня с ума .. – Justen