OpenGL 2D изображения сетки в Android - PullRequest
1 голос
/ 06 марта 2011

Мне нужно нарисовать изображение с сеткой, используя opengl. Я читал, что изображения, созданные с использованием сеток, позволяют создавать на изображениях различные эффекты, например, знаменитый волновой эффект или эффект ряби по этой ссылке:

http://www.soulstorm -creations.com / index.php вариант = com_content & вид = статьи & ID = 111: OpenGL решений-а-2d-сетки изображений и CatID = 18: ПРОГРАММИРОВАНИЕ статьи & Itemid = 39

Я также прошел урок Android-порт из NEHE Tutorials: http://insanitydesign.com/wp/projects/nehe-android-ports/

Я могу преобразовать его из куба в прямоугольник, но мне нужна помощь в понимании 1) почему мы используем координаты вершин в терминах 0 и 1? Почему они не использовали координаты в зависимости от ширины и высоты изображения? 2) Как мы можем разделить область текстуры на маленькие сетки, как объяснено в уроке выше? Если кто-то может руководствоваться 1), я думаю, что я могу работать над пунктом 2).

Любая помощь будет очень признательна.

1 Ответ

2 голосов
/ 06 марта 2011

Координаты вершин находятся в диапазоне от 0 до 1, так что вы можете использовать данные вершин со многими различными текстурами, не беспокоясь о размерах изображения.Тем не менее, для совершенных операций с пикселями вам часто приходится часто координаты текстуры делить на ширину пикселя изображения (скажем, 0.5f * (float) image-> width ()) и высоту, чтобы обеспечить выборку OpenGl (или d3D)с правильного места.

Что касается деления сетки, прямая простая линейная интерполяция.Если у вас есть сетка, идущая от координат пикселей от 0 до 100, и вы хотите, чтобы в вашей сетке было 10 шагов, вы начинаете с 0 и с шагом в 10 пикселей:

  vertex_xi =  (start_x + ((end_x - start_x) / 10) * i));
  vertex_yi =  (start_y + ((end_y - start_y) / 10) * i));

аналогично ,, для координат текстуры выделали то же самое, только вы обычно называете их так:

  vertex_ui =  (start_u + ((end_u - start_u) / 10) * i));
  vertex_vi =  (start_v + ((end_v - start_v) / 10) * i));

, где 'start_u' и 'start_v' равны '1.0f +/- offset, а end' end_u 'и' end_v 'are'1.0f +/- смещение '.Поместите их в свой массив вершин, и все будет хорошо.

HTH.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...