2011-12-19 50 views
5

Tôi có kết cấu với alpha. Và tôi muốn tô màu nó với một số màu, vì vậy nó sẽ được tô màu tùy thuộc vào giá trị alpha màu, nhưng độ mờ ngang sẽ chỉ được xác định bởi kết cấu alpha.OpenGL ES: Cách kết cấu màu với màu

Điều này tương tự như đa văn bản nhưng có màu thay vì kết cấu thứ hai. Cách thực hiện?

(Đã cập nhật) Tôi đã cố gắng thiết lập bộ kết hợp kết cấu. Màu sắc được tô màu tốt, nhưng có vấn đề với alpha - nó không có giá trị từ kết cấu (như mặt nạ). Mã của tôi tại thời điểm này:

glActiveTexture (GL_TEXTURE0); // do we need stage #1? 
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE); 
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_INTERPOLATE); 
glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, (GLfloat*) &tintColor_); 
glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_RGB, GL_TEXTURE); 
glTexEnvi(GL_TEXTURE_ENV, GL_SRC1_RGB, GL_CONSTANT); 
glTexEnvi(GL_TEXTURE_ENV, GL_SRC2_RGB, GL_CONSTANT); 
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR); 
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_SRC_COLOR); 
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_RGB, GL_ONE_MINUS_SRC_ALPHA); 
// this doesn't work for alpha: 
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, GL_REPLACE); 
glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_ALPHA, GL_TEXTURE); 
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA, GL_SRC_ALPHA); 

Ảnh chụp màn hình:

Không pha màu:

enter image description here

Tint với RGBA = (0, 0,5, 1, 0.5):

enter image description here

+0

Mã của bạn dường như đúng với tôi. Bạn có thể vui lòng đính kèm ảnh chụp màn hình của sự cố alpha hoặc mô tả điều gì không tốt với nó. – iHunter

+0

Bạn có thể tải lên kết cấu không? –

+0

Ngoài ra, hãy hiển thị mã? –

Trả lời

0

Bạn đã thử mã trên với glEnable (GL_BLEND)?

+0

Luôn bật. – brigadir

0

Bạn có thể muốn đọc OpenGL documentation về độ trong suốt, 15.020: "Làm cách nào để đạt được hiệu ứng trong suốt?"

Đảm bảo bạn đang hiển thị cảnh theo thứ tự đúng (câu trả lời của bạn không hiển thị bất kỳ kết xuất nào).

Đảm bảo bạn đang sử dụng chức năng trộn mong muốn.

Một đề xuất khác mà tôi có thể thực hiện là bắt đầu sử dụng shaders. Tôi luôn cảm thấy có chút kiểm soát hơn khi sử dụng chúng.

0

Tôi nhận được kết quả tương tự (chạy trên Android Samsung Galaxy S, với giá trị của nó). Tôi không hiểu tại sao nó không hoạt động. Các tài liệu có vẻ hợp lý rõ ràng.

Đối với tôi, nó hoạt động nếu tôi sử dụng GL_MODULATE cho RGB. Nó thất bại một lần nữa nếu tôi sử dụng GL_ADD hoặc GL_ADD_SIGNED. Ngay cả khi sử dụng GL_MODULATE trên alpha cũng cho cùng một hành vi sai lầm khi sử dụng các chế độ đó trên RGB. Bạn có thể bị mắc kẹt với điều chỉnh màu sắc của bạn thay vì nội suy chúng.

Nói tóm lại, điều này làm việc cho tôi:

glActiveTexture (GL_TEXTURE0); // do we need stage #1? 
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE); 
glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, (GLfloat*) &tintColor_); 

glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_MODULATE); 
glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_RGB, GL_TEXTURE); 
glTexEnvi(GL_TEXTURE_ENV, GL_SRC1_RGB, GL_CONSTANT); 
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR); 
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_SRC_COLOR); 

glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, GL_REPLACE); 
glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_ALPHA, GL_TEXTURE); 
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA, GL_SRC_ALPHA); 
+0

Vâng, với chế độ điều biến, tất cả đều hoạt động chính xác nhưng không giống như tôi muốn. Tôi sẽ đặt +50 ở đây để không mất nó. – brigadir

+0

Cảm ơn vì tiền thưởng. Xin lỗi tôi không thể giúp đỡ nhiều hơn. –

Các vấn đề liên quan