9
votes

OpenGL 3.2 Core Profile GlllineWidth

Je configure un contexte de noyau OpenGL 3.2 sur Mac OS X. Je souhaite pouvoir dessiner des goûts de noir épais à l'écran. Dans la version pervoiffée de OpenGL, je pourrais simplement définir

GLint range[2];
glGetIntegerv(GL_ALIASED_LINE_WIDTH_RANGE, range);
glGetIntegerv(GL_SMOOTH_LINE_WIDTH_RANGE, range);


0 commentaires

3 Réponses :


1
votes

Cela pourrait dépendre du type de projection que vous avez configuré. Utilisez-vous une matrice de projection orthographique ou perspective?

Je pense que si vous n'utilisez pas la projection orthographique, la rasterisation finale de la primitive sera soumise à la distance de l'objet (matrice de modèle) de la caméra (matrice de vue).

acclamations


1 commentaires

J'utilise la projection orthographique.



7
votes

Utilisation du profil de noyau OpenGL 3.2, appelez GllineWidth avec une valeur supérieure à 1,0 donnez une erreur invalide_value (appel Glgeterror pour le prouver).

Vous pouvez sûrement obtenir le résultat souhaité en déterminant le quad requis pour dessiner la ligne.

Je pense que vous devriez pouvoir générer des quads à partir de points de ligne: hé, une ligne plus grande est une quad! Peut-être que vous pourriez utiliser Techinques comme Ce pour obtenir le résultat recherché.

La clé est la suivante: au lieu de s'appuyer sur la ligne de ligne, vous donnez une unité de quad à une unité d'entrée (4 sommets à l'aide de la bande triangulaire), puis transformez les sommets entrants à l'intérieur d'un shader qui passe à des uniformes appropriés.

Une autre approche pourrait peut-être rendu à l'aide d'un shader de géométrie: générer un quad à partir d'un point. Cependant, je ne suis pas sûr de ce point. Je ne sais pas si un shader de géométrie (seulement si cela est réalisable, bien sûr) serait la meilleure approche: le coût de dessin d'une bande de ligne utilisant un seul quad serait la configuration uniforme de shader pour chaque ligne composant la bande.


1 commentaires

On dirait que le moyen meilleur / unique de le faire est que deux dessinez l'éther de géométrie complète à travers la géométrie initiale ou un shader de géométrie.



0
votes

LIGNE WIDTH> 1.0 est obsolète et non pris en charge dans un profil principal OpenGL Contexte .
Cependant, il est toujours maintenu dans un contexte de profil de compatibilité.

voir Noyau d'API OpenGL 4.6 Profil SPÉCIALATIO - E.2.1 Caractéristiques obsolètes mais toujours prises en charge :

Les fonctionnalités suivantes sont obsolètes, mais toujours présentes dans le profil de base. Ils Peut être supprimé d'une version future de OpenGL et sont supprimées dans un contexte à l'avenir implémentant le profil principal.


0 commentaires