2012-05-25 2 views
0

Я рисую текстуру, привязанную к FrameBuffer. Затем я использую его на прямоугольнике, где его можно перемещать, чтобы увидеть определенные области текстуры.Текстура без ничего aroud

Когда я нахожусь за пределами нарисованной текстуры Я хочу иметь только цвет

Я пытался на GL_TEXTURE_WRAP_S/GL_TEXTURE_WRAP_L

GL_MIRRORED_REPEAT 

GL_REPEAT => Я получаю цвет вокруг моей текстуры, но неоднократная текстура слишком около

GL_CLAMP_TO_EGDE 

Но это не тот результат, который я хочу.

Любая идея мне помочь?

Thx.

ответ

1

Я не разработчик IOS, но режимы края, которые вы указали (повторить, зеркало и зажим), - это все графическое оборудование, которое я знаю о поддержке, поэтому я предполагаю, что графические процессоры iPhone/iPad будут похожи.

Если вы можете, сделайте текстуру размером 1 пиксель на каждой границе (например, используйте растровое изображение 126x126 и вставьте его в середину прозрачной текстуры 128x128) и используйте зажим как режим края. Однако это не приведет к резкому краю, поскольку билинейная интерполяция будет продолжаться.

В противном случае вам нужно будет сделать математику самостоятельно, что означает, что если ваш прямоугольник просмотра достигнет границы текстуры, вам нужно будет отрегулировать координаты рендеринга, а не только его текстурные координаты, например.

upperLeftQuad.U = viewRectangle.X/textureWidth; 
if(upperLeftQuad.U < 0) { 
    upperLeftQuad.X += -(upperLeftQuad.U * textureWidth); 
    upperLeftQuad.U = 0; 
} 

upperRightQuad.U = (viewRectangle.X + viewRectangle.Width)/textureWidth 
if(upperLeftQuad.U > 1) { 
    upperLeftQuad.X -= (upperLeftQuad.U * textureWidth); 
    upperLeftQuad.U = 1; 
} 
+0

Просто для информации: Я работаю с 1024 * 1024 текстуры (первого размера больше, чем экран IPod/iPhone (960 * 640), так как текстуры должен иметь копию экрана –

+0

И GL_CLAMP. недоступно в OpenGL-ES –

+0

Я использовал ваше первое решение. Я перерисовываю текстуру в меньшей текстуре с 1px-границей –

Смежные вопросы