2016-12-13 1 views
1

J'ai quelques problèmes avec mon appareil photo, où le plan proche semble être trop loin même si je l'ai réglé à 0,1 ou moins. Il semble qu'il y ait déjà une certaine valeur de décalage. Vous ne pouvez donc pas vraiment vous approcher d'un objet arbitraire dans la scène.OpenGL près de l'avion est trop écrêté

Voici une apparence visuelle du bogue. enter image description here

Le triangle noir représenté est l'écrêtage. Actuellement, j'utilise une matrice de perspective et voici le code pour cela.

Matrix4x4 Matrix4x4::Perspective(Float fov, Float aspectRatio, Float near, Float far) 
{ 
    Matrix4x4 result(1.0f); 

    Float q = 1.0f/tan(toRadians(0.5f * fov)); 
    Float a = q/aspectRatio; 

    Float b = (near + far)/(near - far); 
    Float c = (2.0f * near * far)/(near - far); 

    result.elements[0 + 0 * 4] = a; 
    result.elements[1 + 1 * 4] = q; 
    result.elements[2 + 2 * 4] = b; 
    result.elements[2 + 3 * 4] = -1.0f; 
    result.elements[3 + 2 * 4] = c; 

    return result; 
} 

Je ne pense pas que le bogue provient de la classe maths. C'est parce que le code mathématique provient principalement d'un autre projet sur lequel j'ai travaillé. Et fonctionne parfaitement bien à partir de là. Je ne soupçonne pas non plus que c'est la façon dont je le rends (rendu vers l'avant). Je crois que mes indications sont bonnes car je suis capable de déplacer et de faire pivoter l'appareil photo via la souris et le clavier.

Mais! Ce que je soupçonne, c'est les tampons. Les tampons OpenGL. Mais je ne suis pas entièrement sûr.

J'espère que quelqu'un me donnera des conseils sur la façon dont je peux chasser et s'attaquer à ce bug.

Merci d'avance.

+2

d'abord, vous devrez fournir tous les autres transformées en plus la matrice de projection (vue, mondiale, et tout ce que vous avez d'autre). Le tampon de vertex pour le cube est évidemment également nécessaire. – Ap31

+0

Avez-vous une idée du problème? – JekasG

+2

@JekasG: Votre cube pourrait simplement atteindre au-delà de Z <= near mais nous ne pouvons pas le dire sans voir votre configuration de transformation et les sommets du cube. Vous regardez le cube le long de sa diagonale, dont la longueur est allongée d'un facteur de 'sqrt (3 * 1²) = sqrt (3) = ~ = 1,73'. – datenwolf

Répondre

1

« glEnable (GL_DEPTH_CLAMP) » Résolu Le problème

2

Eh bien une image vaut plus de 1000 mots donc:

cube cut

Comme je l'ai mentionné dans mes commentaires si votre cube est la taille moitié r=1.0 et vous configurez votre appareil photo à une distance r du centre cube vous encore être coupé par z_near comme les bords du cube sont éloignés du centre dans la plage <sqrt(2),sqrt(3)> donc tous les bords tournés vers la caméra seront coupés ...

Mais aussi comme mentionné cela est juste deviner parce que vous ne fourniss Les données les plus pertinentes pour cela (matrices et contenu maillé) ...

PS sur le côté droit est la vue du côté du cube de vos paramètres de l'appareil photo Je suppose que vous avez défini. Le vert (+/-)Z est votre direction de visualisation.