2012-06-01 25 views
6

Tôi muốn hiển thị hiệu ứng hạt trong mô hình 3D bằng tọa độ Z. Tôi đã cố gắng thực hiện ParticleEffect của riêng mình bằng cách sử dụng Decals thay vì Sprites mà không thành công.Hệ thống hạt libgdx Z phối hợp

Có cách nào khác để hiển thị ParticleEffect bằng tọa độ Z không? Có lẽ bằng cách thao tác ma trận chuyển đổi của SpriteBatch?

Cập nhật:

làm việc mã

// update projection each frame since my camera is moving 
spriteBatch.setProjectionMatrix(camera3d.projection); 

for (ParticleEffect effect : effects){ 
    spriteBatch.setTransformMatrix(camera3d.view); 
    spriteBatch.getTransformMatrix().translate(x,y,z); // different for each effect 
    spriteBatch.getTransformMatrix().scale(0.1f,0.1f,0.1f); //optional 
    spriteBatch.begin(); 

    effect.draw(spriteBatch, delta); 

    spriteBatch.end(); 
    spriteBatch.getTransformMatrix().idt(); 
} 
+0

Trò chơi của bạn có phải là 2D hoặc 3D không? "Sử dụng tọa độ Z" nghĩa là gì? Rằng các hạt hiển thị ở các kích cỡ khác nhau trên màn hình? Bạn có thể hiển thị ảnh chụp màn hình của những gì bạn có không? –

+0

Trò chơi của tôi là 3d, nhưng ParticleEffect của libgdx là dành cho 2ngày (chỉ sử dụng X và Y, không có Z) bởi vì nó sử dụng Sprites (2d) nội bộ và SpriteBatch để vẽ. Tôi muốn hiệu ứng xuất hiện một phần phía sau của các đối tượng gần và ở phía trước của các đối tượng xa đối với quan điểm. – kromit

Trả lời

9

Nếu hiệu ứng 3D của bạn là một hiệu ứng thị sai, có nghĩa là các hạt của bạn phải đối mặt với camera perpendicularily, bạn thực sự có thể thiết lập các ma trận biến đổi của SpriteBatch

batch.getTransformMatrix().idt().translate(0, 0, z); 
batch.begin(); 
... do your rendering here 
batch.end(); 
// reset the matrix, so you can use the batch for other stuff 
batch.idt(); 

Để có hiệu ứng phối cảnh, bạn cũng sẽ phải sử dụng phép chiếu phối cảnh. Cách dễ nhất để đối phó với yêu cầu này là sử dụng PerspectiveCamera thay vì OrthographicCamera.

+0

cảm ơn bạn, đó là gợi ý cuối cùng! Tôi đã cập nhật câu hỏi với mã hoạt động. cảm ơn bạn đã libgdx bằng cách này! – kromit