Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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
4-1116443316
Nik_vr
2005-05-18 23:08
2005.10.02
Как проверит, открыт ли лоток CD-ROM?


14-1126589798
Jeer
2005-09-13 09:36
2005.10.02
В Новом Орлеане врачи убивали людей


1-1126085246
YuriP
2005-09-07 13:27
2005.10.02
Экспорт в mht из html


1-1126127492
SergP
2005-09-08 01:11
2005.10.02
Форма (окно) сзади всех.. как сделать?


14-1126548972
Qween
2005-09-12 22:16
2005.10.02
Как в memo определить общее количество строк?