Vấn đề:
tôi đang học OpenGL từ http://www.arcsynthesis.org/gltut/index.html hướng dẫn, và tôi đã có thời gian thực sự khó khăn nhận được Tutorial 13: kẻ mạo danh Geometry làm việc (hơn 6 giờ), và bây giờ là làm việc sau một sự thay đổi thực sự nhỏ trong mã thực sự là không có op, và tôi cần sự giúp đỡ của bạn để tìm hiểu tại sao nó thay đổi bất cứ điều gì.GLSL, giao diện khối
Giải thích - chỉnh sửa:
Vấn đề là với mã không thay đổi các shader mảnh đã không nhận được đầu vào đúng từ đổ bóng hình học, nhưng với một trong hai thay thế đổ bóng hình học của ra giao diện khối để biến tách hoặc đưa ra khối một tên dụ làm cho chương trình hoạt động tốt. Nhưng những thay đổi này sẽ là không-op.
Sự cố có thể là xung đột tên.
Như thế này nó không hoạt động:
in VertexData
{
vec3 cameraSpherePos;
float sphereRadius;
} vert[];
out FragData
{
flat vec3 cameraSpherePos;
flat float sphereRadius;
smooth vec2 mapping;
};
void main()
{
mapping =
cameraSpherePos =
sphereRadius =
EmitVertex();
/* mapping's value doesn't get to the fragment shader correctly */
}
Nhưng một trong hai cho FragData một tên ví dụ như frag, và sử dụng frag.mappaing instad lập bản đồ, hoặc sử dụng 3 biến riêng biệt giải quyết vấn đề.
Tại sao nó không hoạt động mà không có tên mẫu?
Chỉnh sửa: Có vẻ như đó là sự cố trình điều khiển.
Bạn đang chạy phần cứng nào? –
Chương trình đang chạy #verison 330 trên: Geforce GTS 360M - "3,30 NVIDIA qua trình biên dịch Cg" – IceCool
Hm, thêm shader và C++ code sẽ giúp đưa ra câu trả lời chính xác hơn. Trong trình đổ bóng gs của bạn, bạn khởi tạo/thiết lập từng thành viên của FragData chính xác cho mỗi lần lặp đỉnh, trước khi gọi EmitVertex(). Ngoài ra nếu bạn có nhiều lời gọi - hãy đảm bảo bạn đã đặt FragData chính xác. – dinony