我正在製作一個多平臺遊戲引擎(未來的開源),並且我正在製作一個基於它的遊戲。在三星Galaxy S2(I9100B)上進行測試時,它可以完美運行,但是當我嘗試在其他手機(Samsung Galaxy S)上運行時,情況變得很糟糕。OpenGL ES 2.0,與所有東西混合
這裏是銀河S2運行時的屏幕截圖:
,這裏是當我在Galaxy S的運行:
我設法減少數量三角形也在場景中,但即使在屏幕上有50個三角形,我也遇到了同樣的問題。 禁用照明可以減少問題,但不會消除它。我認爲這是我的手機內存問題,所以我嘗試了另一個Galaxy S,但同樣的問題發生。
有人知道我可以從哪裏開始尋找?自動GC不頻繁(每5秒約2次)。
三星Galaxy S2: 的Android 2.3.4版 內核:2.6.35.7-I9100UHKI2-CL553601 [email protected]#2
三星Galaxy S: 的Android版本2.3.3 Kernek: 2.6.35.7-I9000BVJJW4-CL240848 pescio @ bldhp-4#28
片段着色器代碼: precision mediump float;
uniform sampler2D uSampler;
uniform float uIsPoint;
uniform float uEnableLight;
uniform float uDisableTexture;
varying vec4 vColor;
varying vec2 vTextureCoord;
varying vec4 vPosition;
uniform vec3 uPointLightingColor;
varying vec3 vColorWeight;
void main(){
if(uIsPoint >= 2.0) {
gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);
}else{
vec4 calcColor;
if(uEnableLight >= 2.0)
calcColor = vec4(vColor.rgb * vColorWeight, vColor.a);
else
calcColor = vColor;
vec4 texColor = vec4(1.0,1.0,1.0,1.0);
if(uDisableTexture < 2.0)
texColor = texture2D(uSampler, vTextureCoord);
gl_FragColor = vec4(texColor.rgb * calcColor.rgb, texColor.a*calcColor.a);
}
}
的Vertex Shader代碼:
//Atributos
uniform mat4 uMVMatrix; //Model/View Matrix
uniform mat4 uPMatrix; //Model/View/Projection Matrix
uniform mat3 uNMatrix; //Normal Matrix
attribute vec3 aVertexPosition;
attribute vec4 aVertexColor;
attribute vec2 aTextureCoord;
attribute vec3 aNormal;
varying vec4 vColor;
varying vec2 vTextureCoord;
varying vec3 vNormal;
varying vec4 vPosition;
//Lighting
uniform vec3 uAmbientColor;
uniform vec3 uLightDir;
uniform vec3 uLightColor;
uniform vec3 uSpecLightColor;
uniform float uShine;
varying vec3 vColorWeight;
void main(){
//Lighting
vec3 normal = normalize(uNMatrix * aNormal);
vec3 lightNorm = normalize(uLightDir);
float lightWeight = max(dot(aNormal,lightNorm),0.0);
vec3 halfVec = normalize(uLightDir - gl_Position.xyz);
float specWeight = pow(max(dot(normal,halfVec),0.0),uShine);
vColorWeight = uAmbientColor + (lightWeight * uLightColor) + (uSpecLightColor*specWeight);
//Others
vNormal = uNMatrix * aNormal;
vPosition = uMVMatrix * vec4(aVertexPosition,1.0);
gl_Position = uPMatrix * vPosition;
vColor = aVertexColor;
gl_PointSize = 2.0;
vTextureCoord = aTextureCoord;
}
當我讀取深度緩衝區時精度由zFar和zNear規格在製作Perpective Matrix時給出。減少zFar和zNear之間的差異會增加深度緩衝區(如我所讀)。我減少到最小值,我可以,爲znar 2.5f和24.5f zFar,沒有解決:/ - 也試過gl.glDepthFunc(GL10.GL_LEQUAL);但它只是使其工作非常緩慢。 – 2011-12-21 20:52:07
如果你想測試問題是由深度緩衝區引起的,我建議徹底關閉它。 'glDisable(GL_DEPT_TEST);'做到這一點。但是你應該同時啓用背面剔除,否則結果會顯得很怪異。 – onitake 2011-12-23 16:26:36