En OpenGL, je peux dessiner un pixel exactement aux coordonnées (5, 5)?
Par (5, 5) je veux dire exactement la cinquième ligne et de la cinquième colonne.
Je l'ai trouvé très difficile de dessiner des choses à l'aide des coordonnées d'écran, toutes les coordonnées en OpenGL est relatif, et variant généralement entre -1.0 et 1.0. Pourquoi il est si grave pour empêcher les programmeurs d'utiliser des coordonnées d'écran /fenêtre coordonnées?
Parce que l'utilisation de [-1..1] au lieu de [0..800] permet également de travailler avec un 1024p écran. Mais depuis vous connaître la taille de votre écran, procédez comme datenwolf et basszero dit.
OpenGL est ce qui arrive quand les sciences informatiques, les normes sont conçues par les mathématiciens. Si CS, les gens et les gens UX étaient présents, ils me comprennent des fonctions simples pour régler la résolution, le mode texte et la capacité de dessiner des lignes fines précision sous-pixel la sortie de la boîte.
stackoverflow.com/questions/5467218/opengl-2d-hud-over-3d
Thankkkkk youuuuu! Il semble que l'internet est le silence sur ce sujet.
OpenGL est ce qui arrive quand les sciences informatiques, les normes sont conçues par les mathématiciens. Si CS, les gens et les gens UX étaient présents, ils me comprennent des fonctions simples pour régler la résolution, le mode texte et la capacité de dessiner des lignes fines précision sous-pixel la sortie de la boîte.
stackoverflow.com/questions/5467218/opengl-2d-hud-over-3d
Thankkkkk youuuuu! Il semble que l'internet est le silence sur ce sujet.
OriginalL'auteur xzhu | 2011-05-27
Vous devez vous connecter pour publier un commentaire.
J'ai fait un peu de programmation 3D de plusieurs années en arrière et, alors que je suis loin d'être un expert, je pense que vous donnent sur une différence très importante entre la musique classique bitmap
DrawPixel(x, y)
graphique et le type de graphique fait avec Direct3D et OpenGL.De retour dans les jours avant que la 3D, l'infographie a été principalement sur le bitmaps, qui est-à-dire des collections de points de couleur. Ces points avaient une relation 1:1 avec les pixels sur votre écran.
Cependant, qui avait de nombreux inconvénients, notamment celui de faire de la 3D très difficile et nécessitant des images de différentes tailles pour différentes résolutions d'écran.
En OpenGL/D3D, vous avez affaire avec des graphiques vectoriels. Les lignes sont définies par des points dans les 3 dimensions de l'espace de coordonnées, les formes sont définies par des lignes et ainsi de suite. Les Surfaces peuvent avoir les textures, les lumières peuvent être ajoutés, comme les différents types d'effets d'éclairage, etc. Cette scène entière, ou une partie, peut ensuite être consultés par le biais d'une caméra virtuelle.
Ce que vous "voir", même si cette caméra virtuelle est une projection de la scène sur une surface 2D. Nous sommes toujours aux prises avec des graphiques vectoriels à ce point. Cependant, depuis les écrans d'ordinateur sont constitués de discrètes pixels, ce vecteur de l'image doit être pixellisé, qui transforme le vecteur dans une image à taille réelle des pixels.
Pour résumer, vous ne pouvez pas utiliser l'écran/fenêtre coordonnées parce que OpenGL est basé sur des graphiques vectoriels.
Vous pouvez allouer un tampon de trame de l'objet, le rendu de votre scène en elle, puis tous les pixels de la peinture des choses que vous voulez avec elle.
Cela étant dit, il est très facile de la carte OpenGL coordonnées de fenêtre d'affichage des coordonnées:
glViewport(win_offset_x, win_offset_y, win_width, win_height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(win_offset_x, win_offset_x+win_width, win_offset_y, win_offset_y+win_height, -1, 1); glMatrixMode(GL_MODELVIEW); glLoadIdentity();
et voìla, OpenGL coordonnées maintenant la carte à fenêtre d'affichage de pixel de coordonnées.Wow, CELA a été la réponse? Il n'a même pas la réponse à la question, il dit simplement: "Ce que vous essayez de faire est impossible", ce qui est un mensonge.
Cette réponse et le fait que n'importe qui upvoted il pisse vraiment me off.
OriginalL'auteur dandan78
La façon la plus simple est probablement de définir la projection de faire correspondre les dimensions en pixels de l'espace de rendu via glOrtho. Ensuite, les sommets peuvent être coordonnées en pixels. L'inconvénient est que le redimensionnement de la fenêtre peut causer des problèmes et vous êtes la plupart de gaspiller de l'accélération des transformations.
En supposant une fenêtre qui est de 640 x 480:
Tampon de trame les objets et les textures sont un autre moyen, mais vous aurez à créer votre propre tramage routines (tracer une ligne, un cercle, un bitmap, etc). Il y a problaby libs pour cela.
OriginalL'auteur basszero
@dandan78 OpenGL n'est pas un Vecteur convertisseur de Graphismes. Est un Rasterizer. Et d'une manière plus précise est une Norme décrit par le biais d'une interface de langage. Un rasterizer, cartes de des objets représentés en 3D coordonnée des espaces (une voiture, un arbre, une sphère, un dragon) en 2D coordonnée des espaces (un avion, votre application de fenêtre ou de votre écran), ces coordonnées 2d appartiennent à un discret coordonnée de l'avion. Le contre rendu de la méthode de tramage est le lancer de Rayons.
Vector graphics est un moyen de représenter par le biais de fonctions mathématiques, un ensemble de courbes, de lignes ou similaire des primitives géométriques, dans un nondiscrete. Ainsi des graphiques de Vecteur est dans le "modèle de la représentation du champ" plutôt que de "rendu" sur le terrain.
OriginalL'auteur J.Guarin
Vous pouvez simplement changer la "caméra" pour faire de la 3D coordonnées correspondent à des coordonnées d'écran en définissant la matrice modelview à l'identité et à la projection d'une projection orthographique (voir ma réponse sur cette question). Alors vous pouvez simplement tirer un seul point primitif en coordonnées d'écran.
Vous pouvez également définir la trame position avec
glWindowPos
(qui travaille en coordonnées d'écran, contrairement àglRasterPos
) puis il suffit d'utiliserglDrawPixels
pour dessiner une 1x1 pixel de l'image.OriginalL'auteur Christian Rau