Передо мной задача, необходимо реализовать в OpenGL объект в 3D Пространстве, в виде Bitmapa, полученого с иконки. Проблема в следующем: 1. Весь Bitmap должен работать как объект, т.е. чтобы его можно было выделять, он расположен в 3D пространстве, стандартными средствами выделяется только точка к которой прикреплен растр. Нужно чтобы он выделялся в любой точке Bitmap'a. 2. Иконка также должна быть с прозрачной маской, т.е. нажав на прозрачное место объект не должен выделятся. 3. Использовать простую затекстурированый прямоугольник можно, но придется обойти преобразования, т.е. чтобы он выглядел как 2D в 3D Пространстве. 4. Все это должно проходить тест глубины, т.е. прямое рисование на экране не подойдет . P.S. Зарание прошу прощение за тупость Но я даже незнаю с чего начать.
в смысле тебе нужен прямоугольник, положение (и размеры?) которого зависит от положения камеры? ну так и делай. вытаскиваешь матрицы MODELVIEW и PROJECTION, и считаешь по ним размеры и координаты прямоугольника.
Может есть какие-то спрайты или что-то похожее? ---------------------------- Ну если делать как ты говоришь тогда шаги следующие: 1. Берем пространственную точку Xо,Yо,Zо в которой должен быть прямоугольник. 2. Проэктируем (Xо,Yо,Zо) на экран (знаю только способ через gluProject если есть проще сообщите) получаем экранные Xэ,Yэ,Zэ. 3. Проэктируем экранные (Xэ+w/2,Yэ+h/2,Zэ) => (X1,Y1,Z1) (Xэ+w/2,Yэ-h/2,Zэ) => (X2,Y2,Z2) (Xэ-w/2,Yэ-h/2,Zэ) => (X3,Y3,Z3) (Xэ-w/2,Yэ+h/2,Zэ) => (X4,Y4,Z4) где w - ширина иконки в пикселях, h - высота иконки в пикселях 4. строим прямоугольник по точкам (X1,Y1,Z1), (X2,Y2,Z2), (X3,Y3,Z3), (X4,Y4,Z4) . Итак для постройки одной иконки нужно вызвать gluProject и 4 раза gluUnProject. При таком методе вроде бы проблем с выделением не будет, и с отображением вроде тоже... Буду тестить. Есть идея производить просчет, только во время выделения, в других случиях выводить как 2D. Вывожу с помощью glDrawPixels(16,16,$80E1,GL_UNSIGNED_BYTE,BbitPoint) и выводится вроде нормально, но с точки glRasterPos3f, а нужно чтобы все было по центру, придется использовать проэктировку. Может есть обходной путь?
Существует ли способ чтобы текст выведенный с помощью glCallLists загрузился в glLoadName(Index) целиком, а не только точкой к которой он прикреплен? Как сделать текст активным для выделения? Я понимаю конечно что когда я произвожу выделения я меняю размер экрана (gluPickMatrix()) и для оброботчика просто не отображается текст, т.к. он находится за окном обзора, но как сделать чтобы выделение "текста" происходило без проблем?