Re[2]: Вывод картинки OpenGL
От:
Аноним
Дата: 10.04.06 13:21
Оценка:
Здравствуйте, Fella, Вы писали:
F>Здравствуйте, Аноним, Вы писали:
А>>Как отрисовать в OpenGL картинку 640x480 с наименьшей потерей качетсва и скорости ?
А>>Пробовал :
А>>1. glDrawPixels — медленно
А>>2. Через quad с текстурой — качество плохое
А>>Как быть ?
F>Не понял каким образом качество вывода на текстуру могло ухудшиться?
F>Если ты конечно LINEAR филтеринг не включил.
пробовал и LINEAR и NEAREST (со вторым еще хуже).
Проясню ситуацию:
Есть окно 640x480.
делают так:
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glViewport(0, 0, inWidth, inHeight);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, inWidth, 0, inHeight, -100, 100);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
//коррекция углов
glTranslatef(0.375, 0.375, 0.0);
//переворот системы координат
glTranslated(0, inHeight, 0);
glRotated(180, 1, 0, 0);
glEnable(GL_TEXTURE_2D);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glShadeModel(GL_SMOOTH);
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
glDrawBuffer(GL_FRONT_AND_BACK);
glClearColor(0, 0, 0, 0);
glClear(GL_COLOR_BUFFER_BIT);
glFlush();
glDrawBuffer(GL_BACK);
glGenTextures(1, &name);
glBindTexture(GL_TEXTURE_2D, name);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
if (!pngLoad("abc.png", PNG_BUILDMIPMAP, PNG_ALPHA, &info))
{
.....
}
glColor4ub(255, 255, 255, 255);
glBindTexture(GL_TEXTURE_2D, name);
glBegin(GL_QUADS);
glTexCoord2f(0, 0);
glVertex2f(0, 0);
glTexCoord2f(1, 0);
glVertex2f(image->width, 0);
glTexCoord2f(1, 1);
glVertex2f(image->width, image->height);
glTexCoord2f(0, 1);
glVertex2f(0, image->height);
glEnd();
glFlush();
SwapBuffers(hdc);
если открыть эту же картинку в камом нибудь просмоторщике, то она там выглядит НАМНОГО лучше !
как отрисовать один в один ?
Пока на собственное сообщение не было ответов, его можно удалить.
Удалить