0

私はマルチプラットフォームのゲームエンジン(将来的にはオープンソース)を作成していて、それに基づいてゲームを作成していました。サムスンギャラクシーS2(I9100B)でテストすると、完全に動作しますが、他の電話(サムスンギャラクシーS)で実行しようとすると、問題が発生します。

GalaxyS2で実行しているときのスクリーンショットは次のとおりです。

ここに画像の説明を入力してください

そして、これが私がGalaxySで実行するときです。

ここに画像の説明を入力してください

シーン内の三角形の数も減らすことができましたが、画面に50個の三角形が表示されていても、同じ問題が発生しました。照明を無効にすると問題は軽減されますが、解消されるわけではありません。それは私の携帯電話のメモリの問題だと思ったので、別のGalaxy Sを試してみましたが、同じ問題が発生します。

誰かが私がどこから探し始めることができるか知っていますか?自動GCは頻繁ではありません(5秒あたり約2回)。

Samsung Galaxy S2:Androidバージョン2.3.4カーネル:2.6.35.7-I9100UHKI2-CL553601 se.infra@SEI-07#2

Samsung Galaxy S:Androidバージョン2.3.3 Kernek:2.6.35.7-I9000BVJJW4-CL240848 pescio @ bldhp-4#28

フラグメントシェーダーコード:高精度ミディアムフロート;

            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);
                }

            }     

頂点シェーダーコード:

            //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;

            }
4

2 に答える 2

1

深度バッファの精度を上げてみてください。

http://www.opengl.org/wiki/Depth_Buffer_Precision

于 2011-12-21T17:44:11.077 に答える
0

これは頂点の順序付けの問題のようです。Galaxy S ではおそらく背面カリングがデフォルトでオンになっているため、ビューアーに面していないすべての三角形が削除されます。どの三角形が正面を向いているかは、glFrontFace()

時計回りと反時計回りの両方を試して、カリングされた三角形とカリングされていない三角形の位置が入れ替わるかどうかを確認する必要があります。その場合、背面カリングをオフにするか、頂点の順序がすべての三角形で同じであることを確認する必要があります。

于 2011-12-23T16:31:13.547 に答える