2012-06-18 32 views
6

Đối với mỗi điểm chương trình đổ bóng OpenGL của tôi, nó tạo ra một vòng màu đỏ chuyển đổi trơn tru giữa mờ đục và hoàn toàn trong suốt. Chương trình đổ bóng của tôi hoạt động, nhưng có các tạo phẩm dải.Tại sao chương trình shader OpenGL của tôi cho các điểm có tạo phẩm dải?

Trình đổ bóng phân đoạn bên dưới.

#version 110 

precision mediump float; 

void main() { 
float dist = distance(gl_PointCoord.xy, vec2(0.5, 0.5)); 

// Edge value is 0.5, it should be 1. 
// Inner most value is 0 it should stay 0. 
float inner_circle = 2.0 * dist; 
float circle = 1.0 - inner_circle; 

vec4 pixel = vec4(1.0, 0.0, 0.0, inner_circle * circle); 

gl_FragColor = pixel; 
} 

Đây là trình đổ bóng đỉnh thú vị hơn mà tôi không nghĩ là nguyên nhân của sự cố.

#version 110 

attribute vec2 aPosition; 

uniform float uSize; 
uniform vec2 uCamera; 

void main() { 
// Square the view and map the top of the screen to 1 and the bottom to -1. 

gl_Position = vec4(aPosition, 0.0, 1.0); 
gl_Position.x = gl_Position.x * uCamera.y/uCamera.x; 

// Set point size 
gl_PointSize = (uSize + 1.0) * 100.0; 
} 

Xin hãy giúp tôi tìm hiểu, tại sao chương trình shader OpenGL của tôi có các tạo phẩm dải?

P.S. Ngẫu nhiên đây là cho một máy tính bảng Acer Iconia Android.

+0

Bạn có thể thực hiện truy vấn glGet với GL_ALPHA_BITS không? Có lẽ số lượng bit bit alpha trong bề mặt render của bạn là nhỏ? – Tim

+0

@Tim Nó cho tôi 0, –

+0

Xin chào, tôi tự hỏi nếu bạn đã giải quyết được vấn đề. –

Trả lời

2

GLSurfaceView của Android sử dụng bề mặt RGB565 theo mặc định. Cho phép phối màu (glEnable(GL_DITHER)) hoặc cài đặt EGLConfigChooser tùy chỉnh để chọn cấu hình bề mặt RGBA hoặc RGBX với 8 bit cho mỗi kênh.

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