Làm cách nào để kết xuất PNG với độ trong suốt trong LibGDX?


12

Tôi đang xây dựng một ví dụ tic-tac-toe đơn giản với LibGDX. Tôi có các hình ảnh đơn giản: chữ thập, hình tròn và bảng, tất cả pngđược tạo bằng GIMP với nền trong suốt.

Làm thế nào tôi có thể kết xuất chúng như một Texturesự minh bạch?

Tôi đã thử với tính năng kích hoạt GL10, nhưng có vẻ như nó không hoạt động.


Bạn đã đặt mã này vào mã của mình chưa: Gdx.gl.glClearColor (1, 1, 1, 1); Gdx.gl.glClear (GL10.GL_COLOR_BUFFER_BIT);
LeSam

đặt điều này trong vòng lặp kết xuất
LeSam 24/12/13

Nó sẽ hoạt động tốt (làm cho tôi). Vấn đề cụ thể nào bạn đã gặp phải?
tro999

Tuyên bố của bạn: "Tôi có những hình ảnh đơn giản: chéo, khoanh tròn và bảng tất cả các png được tạo bằng gimp với màu alpha." có thể được diễn giải theo nhiều cách khác nhau, từ độ trong suốt của khóa màu đến alpha được nhân lên trước. Bạn có thể làm rõ những gì bạn có ý nghĩa? Nói chung, bạn sẽ cần pha trộn alpha (độ trong suốt alpha) hoặc thử nghiệm alpha (mặt nạ alpha); cả hai thứ này đều không được bật theo mặc định và thứ hai không được hỗ trợ trong OpenGL hiện đại.
Andon M. Coleman

Câu trả lời:



2

Tạo Sprite và gán Texture cho nó, sau đó sử dụng Sprite setColor để điều chỉnh alpha của nó, như vậy,

Texture yourTexture = new Texture("image.png");
sprite = new Sprite(yourTexture);
//RGBA
sprite.setColor(1, 0, 0, 0.2f);

và trong vòng lặp render () sử dụng SpriteBatch

sprite.draw(spriteBatch);

Lưu ý rằng SpriteBatch sử dụng DefaultShader, nếu bạn muốn bạn có thể viết shader của riêng mình để kiểm soát độ trong suốt và tất nhiên bạn nên kích hoạt OpenGL ES 2.0 cho điều đó.
daniel

1

Nếu bạn đặt

Gdx.gl.glClearColor(0, 0, 0, 1); 
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT); 

ở đầu vòng lặp render () của bạn sẽ làm mới màn hình với màu đen. Vì vậy, nếu bất kỳ hình ảnh có độ trong suốt trong đó, nó sẽ được chú ý.

vì vậy vòng lặp render () của bạn có thể trông như thế này

public void render(float delta) {
  Gdx.gl.glClearColor(0, 0, 0, 1);
  Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);

  // Update logic & etc.        

  batch.begin();

  // Place your render calls
  // In this I use a Sprite object named "sprite" and all you need to do is call .draw();
  // on it and it will render at 0,0, unless told differently with .setPosition();

  sprite.draw(batch);

  batch.end();              
}

0

Tôi đã cố gắng kết xuất một .png với độ trong suốt. Với thiết lập cơ bản (trộn không được kích hoạt), nó không hiển thị đúng.

Tôi không bao giờ kích hoạt pha trộn, nhưng tôi đã thêm điều này:

Gdx.gl.glClear(GL20.GL_ALPHA_BITS);

Vấn đề của tôi là alpha không bao giờ được xóa. Có nghĩa là nếu tôi kết xuất với 0,1 alpha, sẽ mất 10 khung hình cho đến khi alpha được "xếp chồng" trở lại thành 1. Thêm cuộc gọi ở trên đã xóa alpha, giống như bạn sẽ xóa màu.

Tôi biết đây là một câu hỏi cũ, vì vậy các giải pháp sau đó đã khác. enableBlending vẫn hoạt động, nhưng tôi không chắc liệu điều này có ngăn chặn "xếp chồng" alpha không. Xóa các bit alpha có lẽ là cách dễ nhất để ngăn chặn giao diện chắc chắn.

Đối với kết xuất thực tế, đó là giống như mọi khi.

//Viewport, camera, logic, etc
batch.begin();
//draw your image(s) here
batch.end();
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.