2010-11-17 13 views
5

Czy ktoś wie, jak włączyć mieszanie w OpenGL (Android) w HTC Desire. Próbuję narysować kolorowe trójkąty i używając wartości alfa bufora kolorów, aby połączyć je z tłem (lub innym trójkątem).Dlaczego funkcja mieszania OpenGL nie działa w telefonie HTC Desire?

Działa zarówno na emulatorze (2.1), jak i na htc hero 2.1, ale nie na moim pragnieniu z 2.2. Czy istnieje jakaś różnica w sprzęcie między bohaterem a pragnieniem, które to powoduje?

Głównym rzeczy z kodu jest (nie w kolejności):

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. Mogę dostarczyć więcej kodu, jeśli ktoś tego potrzebuje ...

+0

Przypuszczam, że Desire nie realizuje funkcji. W przeciwieństwie do Direct3D, który powraca do renderowania oprogramowania, z OpenGL, jeśli funkcja nie jest zaimplementowana, po prostu nie działa. A przynajmniej tak to kiedyś działało. – ChrisF

+0

Chodzi o to, że mieszanie trójkątów z teksturami działa na Desire. Ale nie w przypadku korzystania z buforów kolorów. – Sunkas

+3

Dokładnie jest odwrotnie. W DirectX, jeśli funkcja jest obsługiwana, zostanie wykonana w sprzęcie. W przypadku OpenGL (w tym GL | ES) musi być obsługiwana funkcja, która nie jest rozszerzeniem. Jeśli nie w sprzęcie, to w oprogramowaniu. Dla mieszania alfa typu OpenGL | ES 1.0 jest obowiązkowe. –

Odpowiedz

3

Jonas, twoja uwaga na temat oświetlenia wydaje się właściwa, więc teraz myślę, że mamy odpowiedź. Specyfikacja OpenGL ES 1.1.12 podaje The value of A produced by lighting is the alpha value associated with dcm, gdzie dcm jest kolorem materiału rozproszonego.

Jeśli włączyłeś COLOR_MATERIAL, kolor materiału i jego rozproszony kolor zostaną pobrane z aktualnego koloru wierzchołków. To sugerowałoby, że Desire jest nieprawidłowe, a emulator jest poprawny.

Jeśli wyłączyłeś COLROR_MATERIAL (stan domyślny), kolor dyfuzyjnego materiału jest ustawiony na glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, ptrTo4Floats). Oznaczałoby to, że pożądanie jest poprawne, a emulator jest niepoprawny.

+0

Dzięki za odpowiedź. Wcześniej włączono COLOR_MATERIAL. Próbowałem go wyłączyć, ale wciąż nie udało mi się połączyć światła i światła w tym samym czasie z Desire. Używam: gl.glMaterialfv (GL10.GL_FRONT_AND_BACK, GL10.GL_AMBIENT, matAmbient, 0); gl.glMaterialfv (GL10.GL_FRONT_AND_BACK, GL10.GL_DIFFUSE, matDiffuse, 0); i matAmbient i matDiffuse ma wartości alfa (jeśli to ma znaczenie).Próbowałem też wyłączyć i włączyć GL_DEPTH_TEST, ale bez powodzenia. Jakieś inne sugestie? – Sunkas

Powiązane problemy