Decal thực hiện


11

Tôi gặp vấn đề khi tìm thông tin về đề can, vì vậy có lẽ câu hỏi này sẽ giúp người khác. Việc thực hiện là cho một trình kết xuất phía trước.

Ai đó có thể xác nhận nếu tôi có thực hiện decal phải không?

  • Bạn xác định khối lập phương có kích thước bất kỳ sẽ xác định khối lượng chiếu trong không gian chung. Bạn kiểm tra giao điểm tam giác với khối lập phương đã xác định để nhận các hình tam giác mà hình chiếu sẽ ảnh hưởng.
  • Bạn cắt những hình tam giác này và lưu chúng.
  • Sau đó, bạn sử dụng các thủ thuật ma trận để tính toán tọa độ UV cho các hình tam giác đã lưu sẽ tham chiếu kết cấu bạn đang chiếu.
  • Để làm điều này, bạn lấy các vectơ đại diện cho chiều cao, chiều rộng và chiều sâu của khối lập phương trong không gian chung, sao cho góc dưới bên trái là gốc.
  • Bạn đặt nó trong một ma trận là các vectơ đơn vị i, j, k, đặt bản dịch cho khối lập phương, sau đó bạn nghịch đảo ma trận này.
  • Bạn nhân các đỉnh của các tam giác đã lưu với ma trận này, bằng cách đó bạn có được tọa độ của chúng bên trong một khối có kích thước 0 đến 1 mà bạn sử dụng làm tọa độ UV.
  • Bằng cách này, bạn có các hình tam giác ban đầu mà bạn chiếu lên và bạn có tọa độ UV cho chúng (tọa độ UV đang tham chiếu kết cấu bạn đang chiếu).
  • Sau đó, bạn quay lại các hình tam giác đã lưu vào cảnh và chúng ghi đè lên vùng chiếu với hình ảnh được chiếu.

Bây giờ các câu hỏi mà tôi không thể tìm thấy câu trả lời cho. Là điểm cuối cùng phải không? Tôi chưa bao giờ thực hiện việc cắt phần mềm, nhưng có vẻ như đã đủ lỗi, do độ chính xác hạn chế, rằng sẽ có một số z chiến đấu xảy ra cho kết cấu dự kiến. Ngoài ra là cách để có được tọa độ UV chính xác?


Đây là một liên kết với các liên kết: gamedev.stackexchange.com/questions/24653/ Khăn
Luis Estrada

Câu trả lời:


5

Hãy xem qua bài báo này:

http://blog.wolfire.com/2009/06/how-to-project-decals/

Có vẻ như anh ta đang sử dụng chính xác cách tiếp cận mà bạn đang sử dụng. Anh ta không nói về chiến đấu z, nhưng nó chắc chắn có thể trở thành một vấn đề ở khoảng cách lớn hơn.

Đề nghị của tôi sẽ là vô hiệu hóa đề can sau một khoảng cách nhất định nếu chiến đấu z trở nên rất rõ ràng.


Tôi đã xem bài viết này nhiều lần, có một điều là nó không nói gì về những gì tôi đang hỏi, như bạn đã đề cập, cuộc chiến z không thực sự là vấn đề về khoảng cách, chỉ là bạn Bạn đang cố gắng hiển thị ngay trên đầu hình học hiện tại và do độ chính xác hạn chế, bạn có thể / không thể chắc chắn rằng mình sẽ ở trên đỉnh hoặc chính xác ở cùng một nơi
dreta

1
Khi vẽ đề can, bạn luôn có thể đặt chức năng so sánh bộ đệm độ sâu thành nhỏ hơn hoặc bằng hơn là ít hơn so với đề can luôn được vẽ ngay trên bề mặt mà chúng đang ảnh hưởng.
jmegaffin

1

Những gì tôi đã làm để giải quyết cuộc chiến Z là làm giảm giá trị Z của đỉnh một lượng nhỏ, trong trình tạo bóng decal của tôi, sau khi nó ở tọa độ màn hình.

OK ..... Tôi sử dụng đề can lưới được trang bị. Tôi tạo lưới nxn với Y ngồi trên địa hình. Tôi sử dụng mã để tìm Y trên lưới đa giác địa hình. Sau tất cả các transfrom, tôi đang vẽ trên đỉnh của hình học hiện có trong tọa độ màn hình. Bộ đệm độ sâu nằm trong tọa độ màn hình, do đó, bằng cách di chuyển Z của đa giác đề can một chút về phía màn hình, nó sẽ dừng chiến đấu Z. Bằng cách này, tôi đã giảm một nửa số đa giác tạo nên các lưới đề can được trang bị của tôi xuống một nửa. Đây là mã 120 cũ

 vec4 v = gl_ModelViewProjectionMatrix * gl_Vertex;
 v.z -= .03;
 gl_Position = v;

Hy vọng điều này giải thích nó tốt hơn .. (theo yêu cầu)

Tất cả khung dây.

Địa hình dây chỉ.


1
Câu trả lời này có vẻ đặc biệt ngắn và không cụ thể. Bạn có thể làm rõ câu trả lời của bạn?
Gnemlock

1
Nó không khó hiểu .. Tôi di chuyển đỉnh chỉ bằng một chút trong hướng Z trong không gian màn hình. Bởi vì trong OpenGL, bạn luôn tìm kiếm Z tích cực trong không gian màn hình, di chuyển Z âm một lượng nhỏ sẽ khắc phục chiến đấu Z. Tuy nhiên, có một vấn đề với điều này .. Khi bạn thu nhỏ, z có thể di chuyển decal nhiều hơn mức cần thiết .. Một cách khắc phục là thu nhỏ lượng dịch chuyển bằng mắt đến khoảng cách đỉnh.
Mike O
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.