OpenGL текстурирование через альфа-вершины, как избежать следования диагональным линиям? - PullRequest
0 голосов
/ 19 июля 2009

http://img136.imageshack.us/img136/3508/texturefailz.png

Это моя текущая программа. Я знаю, что это ужасно уродливо, я нашел в сети две случайные текстуры («лава» и «бумага»), которые даже не кажутся мозаичными. Это не проблема на данный момент.

Я пытаюсь понять первые шаги РПГ. Это снимок сверху вниз карты высот 10x10 (в настоящее время установлен на все 0, так что это просто плоскость), и я текстурирую его, делая один проход на текстуру на каждый квад, и каждая вершина имеет альфа-значения для каждой текстуры, так что они смешать с OpenGL.

Проблема в том, что обратите внимание на то, как текстуры движутся вдоль диагоналей, и хотя я рисую с помощью GL_QUAD, это, вероятно, потому, что квады превращаются в наборы из двух треугольников, а затем значения альфа в углах имеют больший вес вдоль гипотенузы ... Но я не ожидал, что это будет иметь значение вообще. Рисуя четырехугольники, я надеялся, что хотя они и были разбиты на треугольники на каком-то низком уровне, альфа-вершины заставили бы текстуру излучаться в круговом наружном градиенте от вершин.

Как мне это исправить, чтобы он выглядел лучше? Нужно ли отказаться от этого и попробовать совершенно другой подход? Есть ли другой подход для чего-то подобного? Я бы тоже хотел услышать альтернативы.

Не стесняйтесь задавать вопросы, и я буду здесь освежаться, пока не получу действительный ответ, поэтому я буду комментировать как можно быстрее. Спасибо !!

EDIT: Вот то, чего я хотел бы достичь. Нет, я, очевидно, не один из миллиардов новичков, "пытающихся создать MMORPG", я использую это в качестве примера, потому что это очень похоже на то, что я хочу: http://img300.imageshack.us/img300/5725/runescapehowdotheytile.png Как вы думаете, это сделано? Частично это должны быть альфа-вершины, как я делаю из-за плавных градиентов ... Но, может быть, у них есть список различных конфигураций треугольника внутри плитки, и каждая плитка хранит информацию о том, какую конфигурацию она использует? Так, например, конфигурация 1 - это треугольник в верхнем левом и один в нижнем правом, 2 - верхний и нижний левый, 3 - четырехугольный сверху и четырехугольный снизу и т. Д.? Можете ли вы придумать какой-нибудь другой способ, которым я скучаю, или, если вы все выяснили, поделитесь, пожалуйста, как они это делают!

Ответы [ 3 ]

0 голосов
/ 19 июля 2009

Я никогда не делал этого сам, но я прочитал несколько руководств (которые я не могу найти прямо сейчас), и это кажется довольно простым и даже может быть оптимизировано с помощью шейдеров.

Создайте основную текстуру, чтобы контролировать смешивание 4 субтекстур. Используйте r, g, b, компоненты основной текстуры как процентное соотношение каждой субтекстуры (лавы, бумаги и т. Д.). Вы можете легко нарисовать основную текстуру, используя paint.net, photostop, gimp и просто закрасив каждый цветовой канал. Вы можете вычислить полученную текстуру заранее, используя все 5 текстур, ИЛИ вы можете вычислить результат на лету с помощью фрагментного шейдера. У меня нет хорошего примера, но я думаю, что вы можете понять это, учитывая, как далеко вы продвинулись.

Конечным результатом будет «пиксельное» смешивание дефектов (зависит от разрешения текстур и фильтрации), что позволит избежать проблем смешивания вершин.

0 голосов
/ 20 июля 2009

Диагональные артефакты вызваны тем, что все ваши четырехугольники разбиты на треугольники по одной диагонали. Вы определяете точки [0,1,2,3] для своего квадратора. Каждый четырехугольник разбит на треугольники [0,1,2] и [1,2,3]. Попробуйте рисовать с помощью GL_TRIANGLES и чередовать ваш выбор диагонали. Возможно, есть более эффективные способы сделать это, используя GL_TRIANGLE_STRIP или GL_QUAD_STRIP.

0 голосов
/ 19 июля 2009

Я думаю, что вы все делаете правильно, но вам следует значительно увеличить разрешение вашей карты высот, чтобы получить более точное тесселяцию!

например, посмотрите на этот рендерер карты высот:

mdterrain

показывает те же артефакты в низком разрешении, но становится лучше, если вы увеличиваете итерации

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