J'utilise SDL2 .
Actuellement, mon seul shader a une matrice MVP et transforme les points avec.
Je calcule ma matrice de vue et de projection pour une caméra avec GLM:
glm::lookAt(pos, pos + forward, up);
glm::perspective(fov, aspectRatio, zNear, zFar);
Je l'ai recherché, mais je ne peux trouver que l'implémentation héritée de plusieurs fenêtres.
Si je crée par exemple 4 caméras et disons qu'elles sont toutes pareilles , sauf que chaque caméra a un quart d'écran différent à restituer. (Je veux donc 4 fenêtres avec le même contenu)
Comment puis-je faire ceci? Désolé si je n'ai pas donné suffisamment d'informations, n'hésitez pas à demander.
Réponses:
Le rendu dans différentes fenêtres (parties) du même écran peut être effectué comme suit:
Par exemple, diviser l'écran en quatre parties et rendre la même scène quatre fois à chaque coin avec différents uniformes et différentes fenêtres:
la source
viewport
sont x, y du coin inférieur gauche du morceau et de la largeur, la hauteur du morceau. Avec le mélange, vous pouvez expérimenter.Si vous écrivez votre propre Vertex / Fragment Shader, il existe une autre possibilité supplémentaire de le faire. C'est beaucoup plus compliqué mais peut être utile pour vous et / ou pour d'autres. De plus, il accélère l'ensemble du processus de dessin car il n'utilise qu'un seul appel à une commande de dessin. Le nombre maximal de fenêtres est défini par GL_MAX_VIEWPORTS et est généralement de 16.
Depuis OpenGL 4.1, la méthode glViewportArrayv existe. Il peut définir un tableau de fenêtres. Les fenêtres créées par cette méthode ont un index affecté.
Cet index peut être utilisé dans le Vertex Shader pour définir la fenêtre dans laquelle la scène est rendue. (Vous devez inclure l' extension " ARB_shader_viewport_layer_array " dans le code du shader)
Dans votre cas, je suggère de faire ce qui suit:
la source
Ceci est une copie de la réponse de @ narthex, sauf avec seulement les fenêtres puisque c'est tout ce dont vous avez besoin. Je ne sais pas pourquoi le tampon de trame / trucs de mélange est inclus dans sa réponse.
la source
Ce sont toutes de bonnes réponses, et pourtant il existe une autre manière: (N'est-ce pas toujours le cas?)
En raison de la popularité croissante de la réalité virtuelle, les gens d'OculusVR ont développé un trio d'extensions "Multiview" appelées:
Ces extensions permettent de rendre plusieurs vues de la même scène en un seul appel, ce qui élimine la redondance du rendu de la même scène dans le même état du point de vue de chaque œil. Bien que créé dans le but de VR, le développeur n'est pas nécessairement limité à seulement deux vues. Cette extension permet plutôt autant de vues que MAX_VIEWS_OVR le spécifie.
Avant d'utiliser ces extensions, le développeur doit vérifier leur prise en charge dans le pilote graphique de l'utilisateur en ajoutant le code suivant:
À partir de là, il s'agit de configurer votre framebuffer pour utiliser cette fonctionnalité:
et de même dans le shader:
Dans une application liée au processeur, cette extension peut réduire considérablement le temps de rendu, en particulier avec les scènes plus complexes :
la source