Перейти к содержанию
Fire Monkey от А до Я

тим адвайтов

Пользователи
  • Постов

    11
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные тим адвайтов

  1. Вопрос решён, хотя и не так, как хотелось бы.

     

    Надо самому заранее сделать 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(B);

     

    И так со всеми частями конструкции.

    Процедурка небольшая, но,  по идее, абсолютно ненужная, если бы не глюк.

     

  2. Например, FRenderBuf: GLuint;  GLuint - "undecrared identifier".

    И ещё куча ошибок того же типа. Все, похоже, имеют отношение к OpenGL.

    Дело в том, что я привык, что в секции uses обычно есть все модули, в которых объявлены типы, но тут в толк не возьму, что ещё надо прицепить. Наверное, это зависит от целевой платформы?

    Компиллирую на ХЕ7+update1, под windows7.

  3. В файле 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).

  4. Вот, предлагают такое решение (цитата):

    "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, наверняка не мог пройти мимо. Отзовитесь!

  5. Да, теперь проблема отображения текстур на андроиде решена. (Однако, сразу замаячила следующая: похоже, свойство Tile для TLightMaterialSource отсутствует...надо смотреть исходники) 

  6. Берём любой 3D Shape, например, TRectangle3d. Используем битмап в свойстве LightMaterialSource.texture.

     

    Под виндой всё  работает, однако в андроиде текстура не появляется.

     

    Приходится вместо использования TRectangle3d собирать куб из TLayer3d (на которых текстуру андроид видит). Но тогда фонарь (TLight) бесполезен.

     

    Кто-нибудь сталкивался с такой проблемкой?

×
×
  • Создать...