2011-12-27 39 views
8

Tôi đang tham gia GLSL và cần trợ giúp về tra cứu kết cấu. Tôi đang cố gắng sử dụng kết cấu để lưu trữ nhưng tôi không thể tìm kiếm kết cấu "đúng". Tôi thích sử dụng phương thức texture2D thông thường (sử dụng GLSL 1.2) nhưng kết quả không đủ tốt.Thay thế cho texelFetch?

Sử dụng texture2D: one

Sử dụng texelFetch: two

Bây giờ rõ ràng là một cái gì đó là sai với cái đầu tiên. Đây là những gì tôi đang cố gắng làm (có kích thước là chính xác trừ khi có một cái gì đó tôi không biết về):

vec4 texelFetch(sampler2D tex, ivec2 size, ivec2 coord) 
{ 
    return texture2D(tex, vec2(float(coord.x)/float(size.x), 
           float(coord.y)/float(size.y))); 
} 

Vì vậy, làm thế nào điều này được thực hiện đúng?

+1

Các thông số lọc kết cấu bạn đang sử dụng là gì? Kết cấu của bạn có mipmap không? –

+0

Nó ở gần nhất và không có mipmaps. Tôi đã tìm ra vấn đề. Tôi đã sử dụng kích thước kết cấu thay vì phạm vi, do đó, nó đã được downscaling một chút. Đặt tên kém. –

Trả lời

6

này đã trở thành một số loại câu hỏi thường gặp:

tôi đã trả lời nó ở đây

https://stackoverflow.com/a/5879551/524368

và đây

https://stackoverflow.com/a/7272871/524368

và ở một vài nơi khác nữa.

+1

Cảm ơn. Tôi đã dành vài ngày cuối cùng cố gắng tìm ra những gì đã sai, nhưng tôi chưa bao giờ gặp câu trả lời của bạn hay câu trả lời khác như họ. Tôi đoán từ khóa của tôi không quá lớn. –

+12

Chastising mọi người không googling không phải là hữu ích; những người ** làm ** dành thời gian tìm kiếm có xu hướng chạy vào tất cả các liên kết của những người nổi giận mà ai đó không tìm kiếm, điều này khiến cho hồ bơi vô dụng cho những người thực sự tìm kiếm giải pháp trước khi hỏi mới câu hỏi. – Skrylar

+26

Trớ trêu thay, câu trả lời này là liên kết stackoverflow đầu tiên trong kết quả tìm kiếm của tôi. –

3

Tôi sẽ nói, sử dụng textureRect. Sau đó, bạn có thể sử dụng texture2D và cung cấp các tọa độ thực tế theo pixel mà bạn muốn truy cập.