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);

если открыть эту же картинку в камом нибудь просмоторщике, то она там выглядит НАМНОГО лучше !
как отрисовать один в один ?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.