Intereting Posts
Несколько новых продуктов Proguard вызывают сервисы Google Play v10.2.6 до v11.0.0 в проекте Multidex Почему ускоритель эмулятора intel x86 (установщик HAXM) показывает, что он несовместим с окнами? Gradle исключает файл из sourceSet не работает Разрешения INTERNET в Android M Нужно ли вызывать обработчик ошибок bugsense в каждом действии приложения Android? Как добавить звуковые эффекты на Android? Ошибка в студии android при создании нового проекта Android ExoPlayer: решает проблему без разрыва / беспрепятственного воспроизведения, которая нарушена для Android Media Player Как заставить разделять вкладку ActionBar и название / Главная / Меню? Изображение появляется при наклоне 90 градусов при загрузке с сервера на Android? Retrofit2 proguard удалить параметр Не удается закрыть NavigationDrawer с помощью прокрутки справа налево Как отключить салфетки в представлении пейджера в android Использует Scala на Android? Много накладных расходов? Проблемы? Как изменить стиль TextView во время выполнения

Нарисуйте текст над сферой в libgdx

Я пытаюсь libgdx для рендеринга некоторых моделей fbx, и я успешно это сделал, но я застрял в определенной точке.

Я делаю баскетбольный файл fbx с помощью ModelInstance, и теперь хочу нарисовать текст на баскетболе. Я могу нарисовать текст на баскетболе, но его линейность, которая не выглядит частью этого баскетбола. Я хочу, чтобы текст был такой же кривой, как и этот шар.

Вот как я рисую текст –

batch = new SpriteBatch(); batch.setProjectionMatrix(camera.combined); FreeTypeFontGenerator generator = new FreeTypeFontGenerator(Gdx.files.internal("font/Lato-Bold.ttf")); FreeTypeFontGenerator.FreeTypeFontParameter parameter = new FreeTypeFontGenerator.FreeTypeFontParameter(); parameter.size = 30; parameter.color = com.badlogic.gdx.graphics.Color.WHITE; parameter.magFilter = Texture.TextureFilter.Linear; // used for resizing quality parameter.minFilter = Texture.TextureFilter.Linear; generator.scaleForPixelHeight(3); BitmapFont aFont = generator.generateFont(parameter); aFont.getRegion().getTexture().setFilter(Texture.TextureFilter.Linear, Texture.TextureFilter.Linear); aFont.draw(batch, options.get(i), aBound.getCenterX(), aBound.getCenterY() + textHeight / 2); 

Где aBound -> BoundingBox модели (т.е. BasketBall)

Solutions Collecting From Web of "Нарисуйте текст над сферой в libgdx"

То, что вы пытаетесь достичь здесь, немного сложнее в libGdx. Однако ваш подход неверен, потому что вы рисуете текст как отдельный спрайт-объект поверх вашего шара.

Правильная процедура для этого заключается в том, чтобы нарисовать текст на текстуре, а затем отобразить и привязать текстуру к мячу.

Процедуру можно разделить на 4 части –

  1. Настройка генерации шрифтов и объекта фреймбуфера
  2. Настройка спрайт-партии
  3. Рисование текста, отображение текстуры в модель
  4. Оказание модели

В качестве примечания я хотел бы упомянуть, что можно использовать любую другую текстуру, и если вы не хотите обновлять текст в режиме реального времени, вы можете легко использовать предварительно созданную текстуру с любым текстом, который вам нужен.

Код выглядит следующим образом:

Настройка создания шрифтов и фреймбуфера

 //Create a new SpriteBatch object batch = new SpriteBatch(); //Generate font FreeTypeFontGenerator generator = new FreeTypeFontGenerator(Gdx.files.internal("font/Lato-Bold.ttf")); FreeTypeFontGenerator.FreeTypeFontParameter parameter = new FreeTypeFontGenerator.FreeTypeFontParameter(); parameter.size = 30; parameter.color = com.badlogic.gdx.graphics.Color.WHITE; parameter.magFilter = Texture.TextureFilter.Linear; // used for resizing quality parameter.minFilter = Texture.TextureFilter.Linear; generator.scaleForPixelHeight(10); //Get bitmap font BitmapFont aFont = generator.generateFont(parameter); aFont.getRegion().getTexture().setFilter(Texture.TextureFilter.Linear, Texture.TextureFilter.Linear); //Generate new framebuffer object of 128x128 px. This will be our texture FrameBuffer lFb = new FrameBuffer(Pixmap.Format.RGBA4444,128,128,false); 

Настройка спрайт-партии

 //Set the correct resolution for drawing to the framebuffer lFb.begin(); Gdx.gl.glViewport(0,0,128,128); Gdx.gl.glClearColor(1f, 1f, 1f, 1); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); Matrix4 lm = new Matrix4(); //Set the correct projection for the sprite batch lm.setToOrtho2D(0,0,128,128); batch.setProjectionMatrix(lm); 

Наконец нарисуйте текст на текстуре

 batch.begin(); aFont.draw(batch,"Goal!",64,64); batch.end(); lFb.end(); 

Сопоставление текстуры с моделью

 //Generate the material to be applied to the ball //Notice here how we use the FBO's texture as the material base Material lMaterial = new Material(TextureAttribute.createDiffuse(lFb.getColorBufferTexture())); //Since I do not have a sphere model, I'll just create one with the newly //generated material ballModel = mb.createSphere(1.0f,1.0f,1.0f,8,8,lMaterial, VertexAttributes.Usage.Position | VertexAttributes.Usage.Normal | VertexAttributes.Usage.TextureCoordinates); //Finally instantiate an object of the model ballInstance = new ModelInstance(ballModel); 

Отобразить модель

 mBatch.begin(mCamera); mBatch.render(ballInstance); mBatch.end(); //Rotate the ball along the y-axis ballInstance.transform.rotate(0.0f,1.0f,0.0f,0.5f); 

Результат

Извлечение текста в сферу libGDX