Текущий архив: 2005.10.02;
Скачать: CL | DM;
Вниз
OpenGL. проблемы c SelectBuffer Найти похожие ветки
← →
WondeRu © (2005-05-16 13:34) [0]Здравствуйте, уважаемые!
Появилась странная проблема с SelectBuffer:
как только я делаю область выбора большой, то информация в буфере становится левой!
вот мой код:function GetPickedItem(X, Y: Real; XSize: Real = 5; YSize: Real = 5): Integer;
var
hits, i, Depth: Integer;
SelectBuf: array [0..64] of Integer;
vp: array [0..3] of Integer;
ABasicGraphic : TABasicGraphic;
begin
try
Result := -1;
glSelectBuffer(sizeof(SelectBuf), @SelectBuf);
glRenderMode(GL_SELECT);
glInitNames();
glPushName(0);
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
Map.SetOrthoProjection;
glGetIntegerv(GL_VIEWPORT, @vp);
gluPickMatrix(X, Height — Y, XSize, YSize, @vp);
glMatrixMode(GL_MODELVIEW);
GLPaint(True); //рисование примитивов с glLoadName
glMatrixMode(GL_PROJECTION);
glPopMatrix();
glMatrixMode(GL_MODELVIEW);
glPopName();
hits := glRenderMode(GL_SELECT);
if (hits > 0) then
begin
Result := SelectBuf[3];
if (XSize > 20) or (YSize > 20) then
begin
for i := 1 to hits -1 do
begin
Depth := SelectBuf[(i * 4) + 1];
Result := SelectBuf[(i * 4) + 3];
..............добавление в список выбранного
end;
end;
end;
finally
glRenderMode(GL_RENDER);
end;
end;
когда область выбора 5х5, то все замечательно: выбирается один элемент; но когда (XSize > 20) or (YSize > 20), то в SelectBuf попадают "левые" значения и hits имеет неверное число!
Помогите, в чем трабл?
← →
grouzd[E]v © (2005-05-16 16:14) [1]20 на 20? Ну ты загнул! Если тебе нужен только один элемент, то ставь намного меньше (лично у меня - 2х2), а так он находит ВСЕ объекты в радиусе 20 пикселов. Если надо несколько значений, тебе придется проверять каждое значение из SelectBuf
← →
WondeRu © (2005-05-16 17:01) [2]grouzd[E]v © (16.05.05 16:14) [1]
вот именно! когда один элемент у меня значения 5х5 (это чтоб юзер мог маленькие элементы двигать), а вот когда я делаю прямоугольник выделения, чтоб выделить кучу объектов, тоSelectBuf
имеет странные значения (иногда туда попадают элементы из вне). Такой эффект проявляется, когда начинаю играть с функциейglOrtho
← →
grouzd[E]v © (2005-05-17 15:52) [3]А ты уверен, что в своей функции выбора ты используешь те же команды, что и при перерисовке? Допустим, если в функции у тебя будет Орто, а в рендеринге Перспектива, то то что видим мы и что "видит" OpenGL будет разным! Проверь лучше все команды и там и там (а еще лучше, напиши свою процедуру рендеринга)
← →
WondeRu © (2005-05-18 08:53) [4]grouzd[E]v © (17.05.05 15:52) [3]
процедура перерисовки и выбора - одна и та же, просто во втором случае добавляются glLoadName и не рисуются текстуры и др элементы, которые нельзя выбрать!
← →
grouzd[E]v © (2005-05-18 16:14) [5]Погоди, так тебе надо ПРЯМОУГОЛЬНИК для выделения сделать? Так как же ты его определяешь с ДВУМЯ координатами? У тебя ж получается квадрат с цетром (X,Y) и диагональю (XSize/2, YSize/2)
Кстати, ты только в примере в заголовке ф-ии написал
XSize: Real = 5; YSize: Real = 5;
или у тебя так стоит везде ( вот уж тогда ТОЧНО будут левые значения =) )
← →
AlterEgo of WondeRu © (2005-05-18 23:00) [6]grouzd[E]v © (18.05.05 16:14) [5]
когда делаю Прямоугольник, то значения XSize, YSize переопределятся, а когда нужен один элемент, то функция вызывается только с двумя параметрами. Насчет центра - знаю... так и делаю... проблема именно в использовании glOrtho
← →
grouzd[E]v © (2005-05-19 15:04) [7]Че правда не получается? Тогда Х.З... Ладно, если будет время, попробую твой вариант ф-ии, хотя до 4-го вряд ли получится - конец учебного года, а тут еще Lines. Слушай, а тебе обязательно Орто? Попробуй с другими видами и перспективой
← →
AlterEgo of WondeRu © (2005-05-23 10:42) [8]grouzd[E]v © (19.05.05 15:04) [7]
Попробуй с другими видами и перспективой
никак... видимо барабашка!
← →
WondeRu © (2005-05-31 13:10) [9]все решилось, когда глянул в хелп внимательнее...
в моем коде [0], необходимо поставить Map.SetOrthoProjection после gluPickMatrix, тогда все замечательно :)
← →
grouzd[E]v © (2005-05-31 17:28) [10]Молоток! Поздравляю! А ты упорный - я бы плюнул на это дело =)
← →
WondeRu © (2005-06-01 08:02) [11]grouzd[E]v © (31.05.05 17:28) [10]
скорее не упорный, а ленивый - другую работу искать лень ;)
Спасибо, что поддержал в трудную минуту ;)
Страницы: 1 вся ветка
Текущий архив: 2005.10.02;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.055 c