2010-11-17 19 views
5

Có ai biết cách bật trộn trong OpenGL (android) trên HTC Desire không. Tôi đang cố vẽ các hình tam giác màu và sử dụng giá trị alpha của bộ đệm màu để trộn chúng với nền (hoặc hình tam giác khác).Tại sao phối hợp OpenGL không hoạt động trên HTC Desire?

Nó hoạt động cả trên trình mô phỏng (2.1) và trên một anh hùng htc 2.1 nhưng không theo mong muốn của tôi với 2.2. Có một số khác biệt phần cứng giữa một anh hùng và một mong muốn gây ra điều này?

Các công cụ chính từ mã là (không theo thứ tự):

gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); 

gl.glEnable(GL10.GL_BLEND);   
gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA); 

private final static float[] colors = { 
     1f, 0f, 0f, 0.5f, // point 0 red 
     1f, 0f, 0f, 0.5f, // point 1 red 
     1f, 0f, 0f, 0.5f, // point 2 red 
     1f, 0f, 0f, 0.5f, // point 3 red 

     1f, 0f, 0f, 0.5f, // point 4 red 
     1f, 0f, 0f, 0.5f, // point 5 red 
     1f, 0f, 0f, 0.5f, // point 6 red 
     1f, 0f, 0f, 0.5f, // point 7 red 
}; 

PS. Tôi có thể cung cấp thêm mã nếu ai đó cần ...

+0

Tôi đoán rằng Desire không thực hiện chức năng. Không giống như Direct3D, nó rơi trở lại vào phần mềm rendering, với OpenGL nếu một chức năng của không được thực hiện nó chỉ không hoạt động. Hoặc ít nhất đó là cách nó được sử dụng để làm việc. – ChrisF

+0

Vấn đề là trộn hình tam giác với kết cấu dường như hoạt động trên Desire. Nhưng không phải khi sử dụng bộ đệm màu. – Sunkas

+3

Chính xác điều ngược lại là đúng .. Với DirectX nếu một tính năng được báo cáo là được hỗ trợ, nó sẽ được thực hiện trong phần cứng. Với OpenGL (bao gồm GL | ES), một tính năng không phải là phần mở rộng phải được hỗ trợ. Nếu không có trong phần cứng, thì trong phần mềm. Đối với việc trộn alpha OpenGL | ES 1.0 là bắt buộc. –

Trả lời

3

Jonas, nhận xét của bạn về ánh sáng có vẻ đúng, và vì vậy bây giờ tôi nghĩ chúng tôi có câu trả lời. Đặc tả kỹ thuật OpenGL ES 1.1.12 nêu rõ The value of A produced by lighting is the alpha value associated with dcm, trong đó dcm là màu khuếch tán vật liệu.

Nếu bạn đã bật COLOR_MATERIAL, thì màu khuếch tán vật liệu và màu môi trường xung quanh vật liệu đều được lấy từ màu đỉnh hiện tại. Điều này có nghĩa là Desire là không chính xác, và giả lập là chính xác.

Nếu bạn đã tắt COLROR_MATERIAL (trạng thái mặc định), thì vật liệu màu khuếch tán được đặt bằng glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, ptrTo4Floats). Điều này có nghĩa là Desire là chính xác, và giả lập là không chính xác.

+0

Cảm ơn câu trả lời của bạn. Đã bật COLOR_MATERIAL trước đó. Cố gắng để vô hiệu hóa nó nhưng vẫn không thành công cho phép pha trộn và ánh sáng cùng một lúc trên Desire. Tôi đang sử dụng: gl.glMaterialfv (GL10.GL_FRONT_AND_BACK, GL10.GL_AMBIENT, matAmbient, 0); gl.glMaterialfv (GL10.GL_FRONT_AND_BACK, GL10.GL_DIFFUSE, matDiffuse, 0); và matAmbient và matDiffuse có giá trị alpha (nếu điều đó quan trọng).Tôi cũng đã cố gắng vô hiệu hóa và kích hoạt GL_DEPTH_TEST nhưng không có may mắn ở đó. Bất cứ một đề nghị nào khác? – Sunkas

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