Спасибо rotoglup, ваши посты очень помогли. Последнее изменение, которое вы сделали о размере модели, было именно тем, что я в итоге реализовал. Я пришел к выводу, что речь идет о определении границ модели в каждом направлении и получении вершин, попадающих в диапазон [0-1] УФ-шнуров. Поэтому я написал метод, чтобы найти AABB или каждую модель, а затем создал правильную матрицу масштаба и перевода, чтобы при умножении вершины на матрицу значения вдоль каждой плоскости падали между 0-1. Передача матрицы вниз как униформа и текстуры отображаются. Еще раз спасибо!
ался в течение нескольких часов реализовать замену GLSL для glTexGen с GL_OBJECT_LINEAR. Для OpenGL ES 2.0. В Ogl GLSL есть gl_TextureMatrix, которая делает это проще, но недоступна в OpenGL ES 2.0 / OpenGL ES Shader Language 1.0
Несколько сайтов упомянули, что это должно быть "легко" сделать в вершинном шейдере GLSL. Но я просто не могу заставить его работать.
Я догадываюсь, что я неправильно настраиваю самолеты или что-то упускаю в моем понимании.
Я порылась в Интернете. Но большинство сайтов говорят о проектируемых текстурах, я просто хочу создать ультрафиолетовые лучи на основе плоской проекции. Модели строятся в Maya, имеют полигоны по 50 тыс., А разработчик моделей использует картографирование, но Maya не будет экспортировать UV. Я пытаюсь понять это.
Я посмотрел информацию о man-странице glTexGen:
g = p1xo + p2yo + p3zo + p4wo
Что такое г? Является ли g значением s в вызове texture2d?
Я посмотрел на сайте:
http://www.opengl.org/wiki/Mathematics_of_glTexGen
Другой размер объясняет ту же функцию:
Координата = P1 * X + P2 * Y + P3 * Z + P4 * W
Я не понимаю, как координата (UV vec2 в моем уме) равна точечному произведению (скалярное значение)? Та же проблема, что у меня была раньше с "g".
Что я должен установить самолет? В моем коде opengl c ++ 3.0 я установил его на [0, 0, 1, 0] (в основном это единица z), и glTexGen прекрасно работает.
Я все еще что-то упускаю.
Мой вершинный шейдер выглядит в основном так: WVPMatrix = World View Project Matrix. ПОЛОЖЕНИЕ - позиция вершины модели.
varying vec4 kOutBaseTCoord; void main() { gl_Position = WVPMatrix * vec4(POSITION, 1.0); vec4 sPlane = vec4(1.0, 0.0, 0.0, 0.0); vec4 tPlane = vec4(0.0, 1.0, 0.0, 0.0); vec4 rPlane = vec4(0.0, 0.0, 0.0, 0.0); vec4 qPlane = vec4(0.0, 0.0, 0.0, 0.0); kOutBaseTCoord.s = dot(vec4(POSITION, 1.0), sPlane); kOutBaseTCoord.t = dot(vec4(POSITION, 1.0), tPlane); //kOutBaseTCoord.r = dot(vec4(POSITION, 1.0), rPlane); //kOutBaseTCoord.q = dot(vec4(POSITION, 1.0), qPlane); }
Фрагмент шейдера
precision mediump float; uniform sampler2D BaseSampler; varying mediump vec4 kOutBaseTCoord; void main() { //gl_FragColor = vec4(kOutBaseTCoord.st, 0.0, 1.0); gl_FragColor = texture2D(BaseSampler, kOutBaseTCoord.st); }
Я пробовал texture2DProj во фраг шейдере
Вот некоторые другие ссылки, которые я посмотрел
http://www.gamedev.net/topic/407961-texgen-not-working-with-glsl-with-fixed-pipeline-is-ok/
Заранее спасибо.