2011-09-23 8 views
5

Chỉ cần tìm ra cách, sử dụng Pixel Shader, để chiếu kết cấu tới tứ giác do người dùng định nghĩa.Pixel shader để chiếu kết cấu tới tứ giác đơn phương

sẽ được chấp nhận tọa độ của bốn cạnh của một tứ giác:

/// <defaultValue>0,0</defaultValue> 
float2 TopLeft : register(c0); 

/// <defaultValue>1,0</defaultValue> 
float2 TopRight : register(c1); 

/// <defaultValue>0,1</defaultValue> 
float2 BottomLeft : register(c2); 

/// <defaultValue>1,1</defaultValue> 
float2 BottomRight : register(c3); 

thử vài thuật toán nội suy, nhưng không thể quản lý để làm cho nó đúng.

Có mẫu nào mà các bạn nghĩ rằng tôi có thể sửa đổi để có được kết quả mong muốn không?

Trả lời

1

Có một số nice paper here mô tả các tùy chọn của bạn (hoặc .ppt) này. Về cơ bản, bạn cần phải xác định một số tọa độ barycentric trên quad, sau đó nội suy các giá trị fragment như tổng trọng số BC của các giá trị đỉnh đã cho.

Rất tiếc, không biết mã nào; việc thiếu sự hỗ trợ trực tiếp cho quads trên HW hiện đại theo định hướng tam giác (xem câu trả lời của voidstar69) có nghĩa là họ đã thay vì đi ra khỏi thời trang.

1

Vấn đề ở đây là tất cả phần cứng đồ họa 3D hiện đại đều làm xáo trộn hình tam giác, chứ không phải tứ giác. Vì vậy, nếu bạn yêu cầu Direct3D hoặc OpenGL để render một quad, API sẽ chia nội bộ quad thành hai tam giác. Đây không phải là một vấn đề vì tất cả các kết xuất hiện đại đều chính xác, vì vậy người xem không thể nói sự khác biệt giữa một tam giác và hai hình tam giác - nội suy sẽ liền mạch.

Cách chính xác để yêu cầu API thực hiện phép nội suy này là truyền cho nó kết cấu tọa độ như dữ liệu theo từng đỉnh, mà API/phần cứng sẽ nội suy trên mỗi pixel. Sau đó, trình tạo pixel của bạn sẽ có quyền truy cập vào tọa độ kết cấu mỗi pixel này. Tôi giả sử rằng khi bạn sử dụng thuật ngữ 'project', bạn chỉ đơn giản là ánh xạ một kết cấu hình chữ nhật lên một quad, và bạn không đề cập đến kết cấu chiếu (giống như một spotlight chiếu một texture lên bề mặt). Điểm mấu chốt ở đây là việc truyền tọa độ kết cấu của điểm ảnh tới trình đổ bóng pixel là cách tiếp cận sai (trừ khi bạn có một số lý do đặc biệt tại sao điều này là bắt buộc).

+0

Điều này hoàn toàn đúng ... nhưng cũng hoàn toàn có thể hoàn toàn bỏ qua các nội suy dựa trên tam giác của HW và xác định sơ đồ của riêng bạn trên tứ giác hoặc đa giác hoặc những thứ phức tạp hơn nữa ngay cả khi bạn có thể chia dấu chân của mình thành hình tam giác và nhận được mỗi pixel đổ bóng thông tin cần thiết (cụ thể là vị trí và giá trị của tất cả các đỉnh khác; không chỉ là hình tam giác cục bộ). Tất nhiên đây không phải là một cách đặc biệt hiệu quả khi làm việc so với hỗ trợ nội suy tam giác chuyên dụng của HW nhưng điều đó không có nghĩa là nó không có ứng dụng. – timday

+1

Áp phích chưa được chỉ định nếu họ đang cố gắng sử dụng nội suy HW hoặc bước bên nó. Tôi đồng ý rằng cả hai đều có thể. Tôi nghĩ rằng câu hỏi ban đầu cần phải được làm rõ và cung cấp thêm chi tiết. – voidstar69