2010-10-07 5 views
1

Salut à tous, J'écris un petit moteur 3D pour Android pour mieux apprendre la plate-forme et opengl. J'espère éventuellement l'utiliser comme base pour les petits jeux 3D. J'essaye de mettre en application l'éclairage maintenant, et généralement suivant les didacticiels de port d'android de NeHe opengl. J'ai un simple cube qui tourne et 1 lumière qui ne devrait pas changer de position. Lors du rendu de ma scène sur un appareil, la lumière semble "diminuer" et se rallumer lorsque le cube tourne.Problème avec l'éclairage Android OpenGLES

C'est une vidéo swf du comportement: http://drop.io/obzfq4g

Le code pour mon "moteur" se trouve ici: http://github.com/mlasky/Smashout-Android-3D-Engine/

Les bits concernés sont les suivants:

http://github.com/mlasky/Smashout-Android-3D-Engine/blob/master/src/com/supernovamobile/smashout/SmashoutGLRenderer.java
c'est là J'initialise opengl et configure ma scène.

et

http://github.com/mlasky/Smashout-Android-3D-Engine/blob/master/src/com/supernovamobile/smashout/SMMesh.java c'est le code pour fait tourner/dessiner le maillage du cube.

J'aimerais pouvoir formuler une meilleure question; mais je suis très coincé/confus et ne peux même pas penser à une question intelligente à poser à part "est-ce que quelqu'un sait ce qui pourrait causer le genre de comportement que je vois?"

Merci pour toute aide que vous pouvez fournir. Editer: Aussi la lenteur/le choppyness de l'animation dans la vidéo est le résultat du logiciel screencap. C'est doux tout au long de la rotation sur l'émeu.

+0

Vous pourriez noter qu'il ya un ralentissement très sensible alors que l'objet est sombre. Je n'ai aucune idée pourquoi l'un ou l'autre problème se produit, mais ils pourraient être liés. – jv42

+0

Merci pour le commentaire, mais je pense que cela pourrait juste être un problème avec le logiciel de capture d'écran. Je ne remarque pas beaucoup de ralentissement sur mon emu. –

Répondre

1

De la vidéo, il semble que vos normales soient incorrectes.

Pour un cube aligné sur l'axe, les normales de cube.xml semblent désactivées. Ils devraient être alignés sur l'axe, pas ce qu'ils sont. Où avez-vous eu le modèle?

This answer peut également être liée si mVNormalsBuffer est vide.

+0

Merci pour la réponse, je vais examiner cela maintenant. Le modèle vient de Blender, c'est juste le cube initial converti en triangles et texturé. Il est exporté avec un script que j'ai écrit: http://github.com/mlasky/Smashout-Android-3D-Engine/blob/master/superexport.py Donc il pourrait très facilement y avoir un problème avec les normales. –

+0

hey, je viens de relire votre commentaire. Je pourrais être vraiment stupide, mais les normales de sommet ne devraient-elles pas être alignées sur un cube? Je suppose que seules les normales de surface seraient alignées sur l'axe. –

+0

@Electronic Zebra: Voir ma deuxième liste [ici] (http: // stackoverflow.com/questions/312124/opengl-comment-éviter-texture-mise à l'échelle/354140 # 354140) sur comment je m'attends à ce que les normales soient pour un cube. Vous pouvez [moyenne] (http://www.xmission.com/~nate/smooth.html) vos normales pour obtenir un cube lisse, ce qui est peut-être ce que faisait Blender. Sinon, pour un cube aligné sur l'axe, toutes vos normales seront alignées sur l'axe. – genpfault

1

Vous utilisez

gl.glNormalPointer(3, GL10.GL_FLOAT, mVNormalsBuffer); 

mal.

Il devrait être:

gl.glNormalPointer(GL10.GL_FLOAT,0, mVNormalsBuffer);