libgdx

2017-04-21 52 views
10

में क्षेत्र पर टेक्स्ट ड्रा करें मैं कुछ fbx मॉडल को प्रस्तुत करने के लिए libgdx की कोशिश कर रहा हूं और मैंने सफलतापूर्वक ऐसा किया है, लेकिन मैं एक बिंदु पर अटक गया हूं।libgdx

मैं मॉडलइन्सेंस की सहायता से बास्केटबाल एफबीएक्स फ़ाइल प्रस्तुत कर रहा हूं और अब मैं उस बास्केटबॉल पर एक टेक्स्ट बनाना चाहता हूं। मैं बास्केटबाल पर पाठ खींचने में सक्षम हूं लेकिन इसकी रैखिक जो बास्केटबाल के हिस्से के रूप में नहीं दिख रही है। मैं उस गेंद के समान वक्र तरीके से पाठ चाहता हूं। > मॉडल (अर्थात बास्केटबॉल) की BoundingBox

+0

आप टेक्स्ट को एक ही मैट्रिक्स पर एक अलग इकाई के रूप में चित्रित कर रहे हैं।एक तरह से आप इसे बनावट बिटमैप पर टेक्स्ट खींचने के लिए प्राप्त कर सकते हैं जिसका उपयोग आप टोकरीबॉल आदि के लिए कर रहे हैं। यह गोलाकार आकार लेगा। – Qamar

उत्तर

1

क्या तुम यहाँ प्राप्त करने के लिए कोशिश कर रहे हैं libGdx में थोड़ा जटिल है -

यह मैं कैसे text--

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); 

कहाँ लाजिमी ड्राइंग कर रहा हूँ। आपका दृष्टिकोण, हालांकि गलत है क्योंकि आप टेक्स्ट को अपनी गेंद के शीर्ष पर एक अलग स्प्राइट ऑब्जेक्ट के रूप में चित्रित कर रहे हैं।

यह प्राप्त करने के लिए सही प्रक्रिया पाठ को एक बनावट पर खींचना है और फिर मानचित्र को बनावट को बांधना और बांधना है।

प्रक्रिया 4 भागों में विभाजित किया जा सकता है -

  1. फ़ॉन्ट पीढ़ी और फ्रेमबफर वस्तु
  2. स्प्राइट बैच
  3. की स्थापना पाठ आकर्षित स्थापना, मॉडल के लिए बनावट मानचित्रण
  4. मॉडल

एक नोट के रूप में, मैं यह उल्लेख करना चाहता हूं कि किसी भी अन्य बनावट का उपयोग किया जा सकता है और यदि आप रीयल-टाइम में टेक्स्ट को अपडेट नहीं करना चाहते हैं, तो आप आसानी से प्री-मेड बनावट का उपयोग कर सकते हैं जो भी आप चाहते हैं।

स्प्राइट बैच

//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); 

की स्थापना अंत पर पाठ आकर्षित फ़ॉन्ट पीढ़ी और फ्रेमबफर वस्तु

//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); 

की स्थापना -

कोड इस प्रकार है बनावट

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); 

परिणाम -

Render text to sphere libGDX