0

J'ai essayé d'ajouter de la texture, mais la texture ressemble ci-dessous:Android Opengl Cercle Texture

texture image

Desire Output

Voici mon code pour ajouter coordonner et ajouter des coordonnées de texture.

for(int i=0; i<outerVertexCount; i++) { 
    float percent=(i/(float)(outerVertexCount)); 
    float rad= (float) (percent*2*Math.PI); 
    float outerX= (float) (centerX+radius*Math.cos(rad)); 
    float outerY=(float)(centerY+radius*Math.sin(rad)); 

    int previous=idx; 
    circleCoordinates[idx++]=outerX; 
    circleCoordinates[idx++]=outerY; 
    circleCoordinates[idx++]=(circleCoordinates[previous])/(radius*2); 
    circleCoordinates[idx++] = (circleCoordinates[previous+1])/(radius*2); 
} 

S'il vous plaît aidez-moi.

+0

Alors, quel est le problème auquel vous faites face? Quelle est la sortie désirée? –

+0

Salut j'ai éditer la question que j'ai mis mon désir de sortie. – Sayam

Répondre

0

Vous dessinez un cercle et utilisez des coordonnées presque «normalisées» pour prendre les coordonnées de texture. Donc, ce que vous devez faire est de normaliser les coordonnées de texture à l'espace de texture [0, 1]. Le plus simple est de vérifier si la coordonnée de texture de haut et de gauche doit être (0.5, 0.0) et (0.0, 0.5) respectivement. Aussi en bas et à droite devrait être (0.5, 1.0) et (1.0, 0.5) respectivement. (Points qui touchent les bords).

Le problème dans votre code est:

circleCoordinates[idx++] = (circleCoordinates[previous])/(radius*2); 
    circleCoordinates[idx++] = (circleCoordinates[previous+1])/(radius*2); 

Comme vous créez les points du cercle ceux-ci iront en dessous de 0, dans certains quarts de cercle qui prendra des points mal de texture. De même, vous dépassez votre cercle de centerX and centerY, ce qui déplace également votre texture.

Le code de travail devrait être:

circleCoordinates[idx++] = (circleCoordinates[previous])/(radius*2) + 0.5 - centerX/(radius * 2); 
    circleCoordinates[idx++] = (circleCoordinates[previous+1])/(radius*2) + 0.5 - centerY/(radius * 2); 

0,5 est due à vous normalisé à l'aide radius * 2 sans ajout centerPoint il carte à [-0,5, 0,5] mais vous avez aussi ajouté votre point central et aussi normalisé il faut donc soustraire center(XY)/(radius * 2) pour enlever l'artefact.

TLDR; Votre (0,0) est l'intersection blanche de votre première image que vous voulez en haut à gauche. Normaliser en conséquence.

+0

Merci, ça marche – Sayam