Problema che disegna una sfera in OPENGL ES

Ho cercato di creare la mia sfera utilizzando OpenGL ES e ho seguito la math descritta qui http://www.math.montana.edu/frankw/ccp/multiworld/multipleIVP/spherical/learn.htm

Tuttavia, quando dissiamo la sfera (solo i vertici), è stata disegnata metà della sfera. Puoi indicarmi qual è il problema esatto del codice che dico qui sotto:

  • Come ricevere i dati restituiti dalla window di dialogo personalizzata in android
  • Android non riconosce il riconoscimento vocale solo un risultato?
  • Velocità di discesa dal GPS su Android Calcolo della distanza e del tempo
  • Invia la posizione corrente al server periodicamente in android
  • La class non è stata trovata quando Unmarshalling Android Intent Parcelable
  • Android: come espandere e crollare la dimensione cardView in RecyclerView
  • public class Sphere { static private FloatBuffer sphereVertex; static private FloatBuffer sphereNormal; static float sphere_parms[]=new float[3]; double mRaduis; double mStep; float mVertices[]; private static double DEG = Math.PI/180; int mPoints; /** * The value of step will define the size of each facet as well as the number of facets * * @param radius * @param step */ public Sphere( float radius, double step) { this.mRaduis = radius; this.mStep = step; sphereVertex = FloatBuffer.allocate(40000); mPoints = build(); Log.d("ALIS CHECK!!!!!!", " COUNT:" + mPoints); } public void draw(GL10 gl) { gl.glFrontFace(GL10.GL_CW); gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); gl.glVertexPointer(3, GL10.GL_FLOAT, 0, sphereVertex); gl.glColor4f(1.0f, 0.0f, 0.0f, 1.0f); gl.glDrawArrays(GL10.GL_POINTS, 0, mPoints); gl.glDisableClientState(GL10.GL_VERTEX_ARRAY); } private int build() { /** * x = p * sin(phi) * cos(theta) * y = p * sin(phi) * sin(theta) * z = p * cos(phi) */ double dTheta = mStep * DEG; double dPhi = dTheta; int points = 0; for(double phi = -(Math.PI/2); phi <= Math.PI/2; phi+=dPhi) { //for each stage calculating the slices for(double theta = 0.0; theta <= (Math.PI * 2); theta+=dTheta) { sphereVertex.put((float) (mRaduis * Math.sin(phi) * Math.cos(theta)) ); sphereVertex.put((float) (mRaduis * Math.sin(phi) * Math.sin(theta)) ); sphereVertex.put((float) (mRaduis * Math.cos(phi)) ); points++; } } sphereVertex.position(0); return points; } } 

    Anche qui è la mia class di rendering:

     /** * These values are used to rotate the image by a certain value */ private float xRot; private float yRot; public void setxRot(float xRot) { this.xRot += xRot; } public void setyRot(float yRot) { this.yRot += yRot; } public GLViewRenderer(Context ctx) { //initialize our 3D triangle here mSphere = new Sphere(1, 25); //Initializing the rate counter object //This will help us in calculating the frames per second fpsCalculator = new RateCounter(TAG); fpsCalculator.start(); } public void onSurfaceCreated(GL10 gl, EGLConfig config) { //initialize all the things required for openGL configurations gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f); gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST); } public void onDrawFrame(GL10 gl) { if(fpsCalculator != null) fpsCalculator.countOnce(); //write the drawing code needed gl.glClear(GL10.GL_COLOR_BUFFER_BIT); gl.glLoadIdentity(); /** * Change this value in z if you want to see the image zoomed in */ gl.glTranslatef(0.0f, 0.0f, -5.0f); gl.glRotatef(xRot, 0.0f, 1.0f, 0.0f); gl.glRotatef(yRot, 1.0f, 0.0f, 0.0f); mSphere.draw(gl); } public void onSurfaceChanged(GL10 gl, int width, int height) { if(height == 0) { height = 1; } gl.glViewport(0, 0, width, height); gl.glMatrixMode(GL10.GL_PROJECTION); gl.glLoadIdentity(); //Calculate The Aspect Ratio Of The Window GLU.gluPerspective(gl, 45.0f, (float)width / (float)height, 0.1f, 100.0f); gl.glMatrixMode(GL10.GL_MODELVIEW); //Select The Modelview Matrix gl.glLoadIdentity(); //Reset The Modelview Matrix } /** * Used to stop the FPS counter */ public void pause() { if(fpsCalculator != null) fpsCalculator.stop(); } 

    }

    Mi piacerebbe davvero apprezzare qualche aiuto su questo.

    PS: Ho provato a cambiare CW a CCW ancora non fortuna Grazie

  • Gesto di fling e Webview in Android
  • Come recuperare le stringhe base64 (grande image) dal server a android
  • org.json.JSONException: Valore del tipo org.json.JSONArray non può essere convertito in JSONObject
  • Rileva la cartella della camera Android
  • BroadcastReceiver per SMS multipart
  • come visualizzare l'image esterna in android?
  • 2 Solutions collect form web for “Problema che disegna una sfera in OPENGL ES”

    Cambi questo

     for(double phi = -(Math.PI/2); phi <= Math.PI/2; phi+=dPhi) 

    a questa

     for(double phi = -(Math.PI); phi <= Math.PI; phi+=dPhi) 

    In realtà, cambiando

     for(double phi = -(Math.PI/2); phi <= Math.PI/2; phi+=dPhi) 

    a

     for(double phi = -(Math.PI); phi <= 0; phi+=dPhi) 

    è abbastanza. Con phi da – (Math.PI) a + (Math.PI) si sta facendo girare a 360 gradi e contando each punto due volte. È inoltre ansible:

     for(double phi = -(Math.PI); phi <= Math.PI; phi+=dPhi) { for(double theta = 0.0; theta <= (Math.PI); theta+=dTheta) { ... } } 

    per evitare di contare due volte.

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.