2014-09-30 9 views
0

Я использую последнюю магистраль GLScene для Delphi XE2 , и я работал над проектом типа GUI-типа, который использует 3D вместо 2D для draw Элементы GUI на экране.Сделайте текстуру подходящей 4-точечной полигоном/плоскостью с GLScene или OpenGL для Delphi

Работает, но размещение графики не является идеальным по очевидным причинам.

Мне удалось отобразить трехмерный вид, так что 1 пиксель на TGLSceneViewer больше или меньше 1 пиксель на экране. Это достаточно для меня.

Однако я отказываюсь от идеи использования 3D для моего графического интерфейса, и вместо этого я буду фокусировать на использовании графического представления GLScene for2D исключительно с ускорением GPU.

Затем я помню, используя Projective Transformation в предыдущем проекте, где я использовал Graphics32 для своего графического интерфейса.

С проективным преобразованием я мог бы просто сюжетные в 3D-пространстве, читать 3D-координаты этих точек, преобразования координат в 2D-координат и применяются те к параметрам трансформации TBitmap32 Проекционные и альт, I имеет 3D-возможности в моем программном обеспечении.

Итак, мой вопрос:

Можно «растянуть» текстуру в GLScene или OpenGL, так что текстура соответствует между 4 пункта, или в плоскости, так что всякий раз, когда я перехожу угол самолет в новое положение, текстура будет растянута соответственно?

Таким образом, я мог бы использовать GLScene для 2D-графики, но сделать некоторые простые трюки, чтобы все выглядело как 3D.

Ссылка ниже указует на изображение в Интернете, который является визуальным представлением о том, что я ищу: http://i.stack.imgur.com/hDdqa.png

+0

Почему бы не использовать FireMonkey? Это родной, 2D и 3D, и аппаратное ускорение (в том числе 2D-версия.) Практически все, что вы хотите, без усилий, чтобы написать его с нуля самостоятельно. –

+0

Производительность Firemonkey не так хороша, если я правильно ее помню. Или я здесь не прав? – xaid

+0

Были проблемы, когда он вернулся к GDI +, когда он не смог использовать Direct2D в ранних версиях (XE4 и ниже, я думаю.) Пока вы используете Vista или выше, все должно быть в порядке. Я использую его в XE6 ежедневно для 2D-работы, и это здорово. Как и любая библиотека, вам нужно знать несколько вещей, например, удобно кэшировать ваши текстовые объекты, если вы нарисовываете их для многого экрана и т. Д. Аналогичные вещи вам нужно знать и для VCL! В целом он работает хорошо и быстро, и я счастлив. –

ответ

1

если вы не выполняете что-то сумасшедшее в ваших шейдерах, или что вы используете фиксированным функциональной функциональности трубопровода это должно быть довольно тривиально.

Координаты текстуры в OpenGL всегда нормализуются, что означает, что они падают в диапазоне от [0-1];

Так что, если вы рисуете свои объекты, вы всегда устанавливаете координаты текстуры максимально 1 и минимум 0, вы всегда должны иметь текстуру, заполняющую ваш квад.

Не могли бы вы предоставить код, который вы используете, чтобы нарисовать свои 4 балла? Я могу помочь с этим, если увижу это.

+0

У меня нет кода, поскольку я использую GLScene, и я в основном добавляю объект TGLPlane к сцене, который состоит из 4 пунктов. Я не знаю, как манипулировать этими 4 очками, поскольку GLScene обрабатывает все. Поэтому я даже не могу попробовать то, что вы предлагаете. Однако сейчас я изучаю GLScene, чтобы увидеть, как манипулировать 4 точками TGLPlane. – xaid

+0

Хорошо, если ваши координаты текстуры из вашей плоскости используют нормализованные координаты, у вас не должно быть никаких проблем. – Daniel

+0

Хорошо, Даниил, спасибо за информацию. – xaid

 Смежные вопросы

  • Нет связанных вопросов^_^