тим адвайтов
-
Постов
11 -
Зарегистрирован
-
Посещение
Сообщения, опубликованные тим адвайтов
-
-
Да, действительно, с этим файлом компилится под андроид и запускается. Спасибо,Ярослав!
Но картинка осталась прежняя, несмотря на сделанные изменения.
-
-
Например, FRenderBuf: GLuint; GLuint - "undecrared identifier".
И ещё куча ошибок того же типа. Все, похоже, имеют отношение к OpenGL.
Дело в том, что я привык, что в секции uses обычно есть все модули, в которых объявлены типы, но тут в толк не возьму, что ещё надо прицепить. Наверное, это зависит от целевой платформы?
Компиллирую на ХЕ7+update1, под windows7.
-
С этим файликом не компилится, хотя в у него в uses всё вроде прописано. В каком модуле объявлены переменные и функции, непонятно.
-
В файле fmx.context.gles.pas есть класс TCustomContextOpenGL, а в нём процедура
TCustomContextOpenGL.DoInitializeTexture(const Texture: TTexture);
Вот в этой процедуре хотелось бы изменить вызовы
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
на
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
для того, чтобы текстура не натягивалась (clamp), а размножалась (tile).
-
Примеры не запускал. Попробовал сваять сложную конструкцию из 50 3DLayer и 17 думми, прицепил анимацию. На дешёвом планшете "explay" вертится всё быстро, тормозов не заметил.
-
Вот, предлагают такое решение (цитата):
"Had to dig into the FM code to introduce a "TextureRepeat" property to TLightMaterialSource and update its DoTextureChanged method, then have this texture repeat flag in TBitmapCtx.GetTexture transferred to the TTexture, and finally make a conditional in TContextOpenGL.DoInitializeTexture (fmx.context.gles.pas) for clamping or repeating... - See more at: http://codeverge.com/embarcadero.delphi.firemonkey/3d-texture-repeat-on-ipad/1052997#sthash.SyxVtcui.dpuf"
Интересно, он имеет в виду исправление оригинального библиотечного кода или создание класса-наследника от TCustomContextOpenGL?
И ещё: откуда процедура DoInitializeTexture вызывает OpenGL-левские методы glTexParameteri?
Tile для текстур - это важно, кто занимался 3D в FM, наверняка не мог пройти мимо. Отзовитесь!
-
Да, теперь проблема отображения текстур на андроиде решена. (Однако, сразу замаячила следующая: похоже, свойство Tile для TLightMaterialSource отсутствует...надо смотреть исходники)
-
В XE6 как раз всё работает. Сегодня только наткнулся на описание этого бага.
-
Берём любой 3D Shape, например, TRectangle3d. Используем битмап в свойстве LightMaterialSource.texture.
Под виндой всё работает, однако в андроиде текстура не появляется.
Приходится вместо использования TRectangle3d собирать куб из TLayer3d (на которых текстуру андроид видит). Но тогда фонарь (TLight) бесполезен.
Кто-нибудь сталкивался с такой проблемкой?
Можно ли создать класс от TCustomContextOpenGL ?
в Разработка компонентов
Опубликовано
Вопрос решён, хотя и не так, как хотелось бы.
Надо самому заранее сделать Tile с помощью промежуточного Bitmap-а, примерно так:
b:=tbitmap.Create; r:=trect.Create(0,0,b.width,b.Height);
с размерами той области, куда его нужно поместить.
Далее в цикле налепить исходный битмап на промежуточный.:
while dh > 0 do begin ...
b.CopyFromBitmap(ish.Bitmap, r, i*ish.Bitmap.Width, j*ish.Bitmap.Height);
dh:= dh-ish.Bitmap.Height;...
... (то же с dw)...
И, наконец, присвоить его материалу:
lightmaterialsource1.Texture.Assign(;
И так со всеми частями конструкции.
Процедурка небольшая, но, по идее, абсолютно ненужная, если бы не глюк.