2012-11-06 14 views
6

Tôi chỉ mới bắt đầu học OpenGL. Với tất cả các hướng dẫn tôi đã thấy, chúng thể hiện bằng cách sử dụng trình đổ bóng phân đoạn để đặt màu của tất cả các đối tượng trong chế độ xem. Những gì tôi chưa tìm thấy là làm thế nào bạn sẽ sử dụng một shader mảnh trên chỉ là một trong các đối tượng, cho các đối tượng khác nhau màu sắc khác nhau. Làm thế nào để bạn làm điều đó?Làm cách nào để áp dụng trình đổ bóng phân đoạn cho một đối tượng trong OpenGL?

Để cung cấp nền cho câu hỏi, tôi vẽ một cảnh đơn giản với một ngôi nhà và một con đường trong 2ngày. Tôi đã phát hiện ra cách thiết lập màu sắc của từng đối tượng (cơ thể chính của ngôi nhà, cửa sổ, vv) bằng cách sử dụng đường ống đồ họa cố định, tôi chỉ không hiểu cách thiết lập màu bằng cách sử dụng bộ đổ bóng.

Bất kỳ việc làm rõ nào sẽ được đánh giá rất nhiều, bao gồm sửa lỗi nếu tôi hiểu nhầm điều gì đó.

+0

Tạo đồng phục màu và thay đổi đồng phục trước khi bạn vẽ một đối tượng mới bằng trình đổ bóng. –

Trả lời

3

Để cung cấp nền cho câu hỏi, tôi vẽ một cảnh đơn giản với ngôi nhà và đường trong 2ngày. Tôi đã phát hiện ra cách thiết lập màu sắc của từng đối tượng (cơ thể chính của ngôi nhà, cửa sổ, vv) bằng cách sử dụng đường ống đồ họa cố định, tôi chỉ không hiểu cách thiết lập màu bằng cách sử dụng bộ đổ bóng.

As RobertRouhani said, làm cho màu đồng nhất và thay đổi màu cho từng đối tượng.


Làm thế nào để áp dụng một Shader đoạn để chỉ một đối tượng trong OpenGL?

Bạn chỉ cần thay đổi chương trình đổ bóng bằng glUseProgram và hiển thị cuộc gọi sau khi sử dụng trình đổ bóng khác.

Xem điều này: https://gamedev.stackexchange.com/questions/22216/using-multiple-shaders

3

Trước khi bạn vẽ một đối tượng với glDrawArrays hoặc glDrawElements, chuyển màu cho trình đổ bóng dưới dạng biến.

http://www.opengl.org/sdk/docs/man/xhtml/glUniform.xml

mẫu GLSL fragment shader:

uniform vec4 u_color; 

void main(void) 
{ 
    gl_FragColor = u_color; 
} 

tôi sẽ mở rộng về câu trả lời này nhưng tôi lười biếng. Hy vọng nó sẽ giúp phần nào. Có rất nhiều hướng dẫn trực tuyến, chỉ cần tìm kiếm glsl, glUniform4f, v.v.

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