|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Июл 9, 2004 15:34:03 У меня тут на GL_ARB_vertex_program одна задача не получается... Сама задача простейшая, на пересечение прямой и плоскости, поэтому я уверен что ошибка не в ее реализации (10 комманд которые я уже 100 раз пересмотрел). Мне кажется ошибка в подготовке. Вот мои действия (под мировыми координатами я буду подразумевать координаты соответствующие единичной матрице): До vertex program: 1. Через glProgramLocalParameter4fARB передаем входные данные, а именно 3 вектора. 2. Через glProgramLocalParameter4fARB передаем model-view матрицу, которая была сразу после glLoadIdentity+gluLookAt Внутри vertex program: 3. Умножаю vertex.position на state.matrix.modelview, тем самым переходя в мировые координаты. 4. Умножаю поочередно вектора из п.1 на матрицу из п.2, тем самым переходя в мировые координаты. 5. Все, я в единой системе. Выполняю свои расчеты, получаю новое значение вертекса. 6. На всякий случай полученному вертексу в w засылаю единицу (не смейтесь, все может быть). 7. Раз мы в мировых координатах, то state.matrix.modelview нам больше не нужна, и result.position я считаю как вертекс из п.6 умноженный на state.matrix.projection И естественно нифига не работает. Вот пара вопросов: 1. Правильно ли я передаю model-view матрицу с условием того, что умножать я буду след. образом... Умножаем так: DP4 Res.x,program.local[0],Input; DP4 Res.y,program.local[1],Input; DP4 Res.z,program.local[2],Input; DP4 Res.w,program.local[3],Input; Передаем так: float M[16]; glGetFloatv(GL_MODELVIEW_MATRIX,M); glProgramLocalParameter4fARB(GL_VERTEX_PROGRAM_ARB,3,M[0],M[4],M[8],M[12]); glProgramLocalParameter4fARB(GL_VERTEX_PROGRAM_ARB,4,M[1],M[5],M[9],M[13]); glProgramLocalParameter4fARB(GL_VERTEX_PROGRAM_ARB,5,M[2],M[6],M[10],M[14]); glProgramLocalParameter4fARB(GL_VERTEX_PROGRAM_ARB,6,M[3],M[7],M[11],M[15]); Это размышления по поводу того, где там строки, а где столбцы. У меня правильно? 2. Как на GL_ARB_vertex_program по-человечески разделить один скаляр на другой? Может это покажется идиотизмом, но я это делаю через POW, возводя в степень -1, а потом вместо деления юзаю MUL. Так вот не возникает ли в таком случае баги, если в степень возводится отрицательное число? Вообщем товарищи... помогите кто чем сможет... |
|
|
Дата: Июл 9, 2004 17:05:46 · Поправил: _DEN_ Все, заработало! Отвечаю: 1. Матрицу я передавал правильно. 2. Все остальные соображения по поводу матриц/систем координат тоже правильные. Проблемма действительно была с возведением в степень. Не умеет он похоже отрицательные числа в степень возводить. Пишлось сделать так: a*b = a * (b*pow(abs(b),-2)) Вот такой изврат :-) |
|
|
Дата: Июл 9, 2004 23:19:20 · Поправил: _DEN_ Извиняюсь, конечно же деление, а не умножение: a / b = a * (b*pow(abs(b),-2)) Так же довольно красиво (но, возможно не особо быстро) решил проблему с отсутствием бранчей, но это другая история... :-) |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.089 |