Действующая иконка в OpenGL

Тема в разделе "WASM.OpenGL", создана пользователем AlexBond, 21 июл 2007.

  1. AlexBond

    AlexBond Member

    Публикаций:
    0
    Регистрация:
    30 янв 2005
    Сообщения:
    69
    Адрес:
    Belarus
    Передо мной задача, необходимо реализовать в OpenGL объект в 3D Пространстве, в виде Bitmapa, полученого с иконки.
    Проблема в следующем:
    1. Весь Bitmap должен работать как объект, т.е. чтобы его можно было выделять, он расположен в 3D пространстве, стандартными средствами выделяется только точка к которой прикреплен растр. Нужно чтобы он выделялся в любой точке Bitmap'a.
    2. Иконка также должна быть с прозрачной маской, т.е. нажав на прозрачное место объект не должен выделятся.
    3. Использовать простую затекстурированый прямоугольник можно, но придется обойти преобразования, т.е. чтобы он выглядел как 2D в 3D Пространстве.
    4. Все это должно проходить тест глубины, т.е. прямое рисование на экране не подойдет :dntknw: .

    P.S. Зарание прошу прощение за тупость :) Но я даже незнаю с чего начать.
     
  2. tinok

    tinok New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2007
    Сообщения:
    26
    Посмотри здесь: http://www.opengl.org.ru/ (хоть и старая книжонка, мож поможет)
     
  3. r90

    r90 New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2005
    Сообщения:
    898
    в смысле тебе нужен прямоугольник, положение (и размеры?) которого зависит от положения камеры? ну так и делай. вытаскиваешь матрицы MODELVIEW и PROJECTION, и считаешь по ним размеры и координаты прямоугольника.
     
  4. AlexBond

    AlexBond Member

    Публикаций:
    0
    Регистрация:
    30 янв 2005
    Сообщения:
    69
    Адрес:
    Belarus
    Может есть какие-то спрайты или что-то похожее?
    ----------------------------
    Ну если делать как ты говоришь тогда шаги следующие:

    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, а нужно чтобы все было по центру, придется использовать проэктировку.

    Может есть обходной путь?
     
  5. AlexBond

    AlexBond Member

    Публикаций:
    0
    Регистрация:
    30 янв 2005
    Сообщения:
    69
    Адрес:
    Belarus
    Существует ли способ чтобы текст выведенный с помощью glCallLists загрузился в glLoadName(Index) целиком, а не только точкой к которой он прикреплен?
    Как сделать текст активным для выделения?
    Я понимаю конечно что когда я произвожу выделения я меняю размер экрана (gluPickMatrix()) и для оброботчика просто не отображается текст, т.к. он находится за окном обзора, но как сделать чтобы выделение "текста" происходило без проблем?