CONNEXION
  • RetourJeux
    • Tests
    • Soluces
    • Previews
    • Sorties
    • Hit Parade
    • Les + attendus
    • Tous les Jeux
  • RetourActu
    • French Days
    • Culture Geek
    • Astuces
    • Réalité Virtuelle
    • Rétrogaming
    • Toutes les actus
  • French Days
  • RetourHigh-Tech
    • French Days
    • Actus JVTECH
    • Bons plans
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTECH
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch
    • Xbox Series
    • Overwatch 2
    • FUT 23
    • League of Legends
    • Genshin Impact
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • PS4
  • One
  • Switch
  • Wii U
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Etoile Abonnement RSS

Sujet : [C++/OpenGL/GLSL] Matrice de projection

News culture
La Planète des Singes : Le Nouveau Royaume - la révolution simienne est en marche !
DébutPage précedente
12
Page suivanteFin
[DenshaOtoko] [DenshaOtoko]
MP
Niveau 12
29 juillet 2014 à 21:21:35

Bonjour,

J'ai un soucis avec la matrice de projection

le code principal : http://pastebin.com/wGwyzwkx

à la ligne 17, si je multiplie la matrice de projection par la gauche donc faire :

gl_Position = projection*view*modelview*vec4(in_position, 1.0);

ça m'affiche écran noir

si je laisse la ligne 17 telle quelle, ça m'affiche bien mon repère qui tourne, mais du coup je n'ai pas de matrice de projection

je ne comprends pas pourquoi ça m'affiche écran noir lorsque je multiplie par la matrice de projection, est-ce que je fais de mauvaises manipulation avec? ai-je oublié quelque chose ?

merci d'avance pour vos futures réponses

--
P.-S: je débute avec opengl 3.x, désolé d'avance si vous voyez des affreusetés dans le code, cependant si vous en voyez, n'hésitez pas à me l'indiquer

P.-P.-S: ligne 70;74 lorsque je met les sizeof(truc), je met ça de manière statique, car mes données sont statiques pour l'instant, mais je metterais ça propre et de manière dynamique plus tard lorsque je rajouterais mon parser de fichier dae

chiagedeluna chiagedeluna
MP
Niveau 10
29 juillet 2014 à 21:23:57

gl_Position=ftransform(); donne quelque chose de correct?

chiagedeluna chiagedeluna
MP
Niveau 10
29 juillet 2014 à 21:29:49

Sinon, je crois qu'il n'y a pas de matrice view en openGL. Juste la matrice ModelView et Projection. essaie d'enlever le view dans l'opération?

[DenshaOtoko] [DenshaOtoko]
MP
Niveau 12
29 juillet 2014 à 21:33:10

ChiageDeLuna :d) je viens d'essayer, cela m'affiche écran noir

mais du coup, si je fais gl_Position=ftransform(); à aucun moment dans le pipeline je fais intervenir la position 3d du vertex courant, si?

[DenshaOtoko] [DenshaOtoko]
MP
Niveau 12
29 juillet 2014 à 21:35:45

pour ce qui est de la matrice view, avec

gl_Position = view*modelview*vec4(in_position, 1.0);

:d) ça fonctionne

gl_Position = modelview*vec4(in_position, 1.0);

:d) ça fonctionne

gl_Position = view*vec4(in_position, 1.0);

:d) ça fonctionne

c'est lorsque je fais intervenir la matrice de projection que plus rien ne s'affiche :

gl_Position = projection*view*modelview*vec4(in_position, 1.0);

:d) ne fonctionne pas

gl_Position = projection*view*vec4(in_position, 1.0);

:d) ne fonctionne pas

gl_Position = projection*vec4(in_position, 1.0);

:d) ne fonctionne pas

chiagedeluna chiagedeluna
MP
Niveau 10
29 juillet 2014 à 21:56:13

En fait ftransform applique l'opération de déformation du pipeline fixe, si je ne me plante pas. Ca évite d'écrire soi-même la formule. Je sèche, je ne suis pas expert dans le domaine, désolé.

chiagedeluna chiagedeluna
MP
Niveau 10
29 juillet 2014 à 21:56:45

Mais attend, je crois que t'as pas testé projection*modelview*vec4(in_position,1.0);

[DenshaOtoko] [DenshaOtoko]
MP
Niveau 12
29 juillet 2014 à 22:07:54

ChiageDeLuna :d) merci pour tes réponses
j'avais aussi essayé avec projection*modelview*vec4(in_position,1.0), j'ai juste oublié de le précisé dans mon précédent message

je pense que ça ne peut venir que de la matrice de projection, lorsque je l'enleve ça m'affiche tout bien, lorsque que je la met ça ne m'affiche plus rien

concernant ftransform(), je n'ai pas très bien compris, quelque soit le pipeline la position 3d de mon vertex courant doit intervenir à un moment ou un autre dans la valeur de gl_Position si j'ai bien compris normalement, puis de toute manière ftransform() ne pourra pas être une solution à long terme car j'aurais besoin de ma matrice view pour la camera et ma matrice modelview pour les translations et rotations

pilo1488 pilo1488
MP
Niveau 10
29 juillet 2014 à 22:18:41

Fov est en radian, donc 70 c'est beaucoup trop grand ;)

Ligne 40, essais 70 / 180.0 * 3.14 (ou la constante pi si il y en a une)

Met aussi des () dans le calcul:
gl_Position = projection * (view * (modelview * vec4(in_position, 1.0)))

pilo1488 pilo1488
MP
Niveau 10
29 juillet 2014 à 22:22:53

Oups j'avais lu de travers la doc de glm, fov est pas forcement en radian!

[DenshaOtoko] [DenshaOtoko]
MP
Niveau 12
29 juillet 2014 à 22:26:03

Pilo1488 :d) merci pour ta réponse

oui j'avais essayé en fait en radian et en degré (comme à la ligne 140 où cela fonctionne, car quand je met pas la matrice de projection, cela m'affiche bien une rotation du repère dessiné)

c'est juste que là dans mon code en Fov j'ai laissé en radian, parce que dans les 2 cas ça ne fonctionnait pas

j'ai essayé de mettre les parenthéses, ça m'affiche toujours rien

pilo1488 pilo1488
MP
Niveau 10
29 juillet 2014 à 22:41:57

Oui ce soir je suis pas concentré je dis n'importe quoi

Je prends le risque d'une autre :
Ton lookat est en (0, 0, 0) et regarde en (1, 3, -10), es tu sur que tu puisse voir les lignes comme ca? (Je demande, car la reponse est peut etre oui :))

Essaus peut etre de mettre la camera en (0, 0, 15) par exemple et le lookat a (0, 0, 0)

[DenshaOtoko] [DenshaOtoko]
MP
Niveau 12
29 juillet 2014 à 22:54:54

Pilo1488 :d) alors je viens d'essayer de mettre la camera en (0,0,15) et de laisser le lookat à (0,0,0) mais ça ne m'affiche toujours rien

sinon oui, je suis sûr de pouvoir voir mon repère tourné avec la matrice view de mon code

pour le même code, lorsqu'à la ligne 17 j'ai:

gl_Position = view * (modelview * (vec4(in_position, 1.0)));

:d) cela m'affiche le repère qui tourne autour de l'axe Y : http://pix.toile-libre.org/upload/original/1406666990.png

lorsqu'à la ligne 17 j'ai:

gl_Position = projection * (view * (modelview * (vec4(in_position, 1.0))));

:d) cela m'affiche écran noir : http://pix.toile-libre.org/upload/original/1406667109.png

----

informations supplémentaires :

:d) je passe par MESA, version utilisé : 3.3 (Core Profile) Mesa 10.3.0-devel (git-cce5814 trusty-oibaf-ppa)

:d) je suis sur Xubuntu 14.04

:d) j'ai récupéré le statut de compilation du vertex shader, et il me renvoie vrai et aucun log d'erreur, donc aucune erreur à la compilation du vertex shaders, je sais vraiment pas ce qu'elle a cette matrice de projection

pilo1488 pilo1488
MP
Niveau 10
29 juillet 2014 à 23:08:15

Ok! J'essairai de compiler le code demain matin, ca doit une toute petite erreur!

[DenshaOtoko] [DenshaOtoko]
MP
Niveau 12
29 juillet 2014 à 23:13:00

D'accord, merci

sinon tout compile parfaitement en fait, le programme, et les 2 shaders

donc pour trouvé l'erreur je ne vois plus aucune approche

[DenshaOtoko] [DenshaOtoko]
MP
Niveau 12
29 juillet 2014 à 23:19:50

ah, je savais bien que ton pseudo me disait quelque chose, c'était toi qui m'avait aidé aussi il y a un an pour le parser de fichier wavefront obj

https://www.jeuxvideo.com/forums/1-31-8653998-1-0-1-0-opengl-parser-fichiers-obj-et-mtl.htm

merci encore

le parser c'était avec opengl 2.1 aussi, c'était pas du tout le même fonctionnement que opengl 3.x, du coup là je repars de zero avec opengl 3.x

pilo1488 pilo1488
MP
Niveau 10
30 juillet 2014 à 10:15:38

Ah oui je me souviens :)

Tu aurais le code source complet pour que je puisse essayer de le faire tourner?
(il manque peut etre juste main avec l'initialisation de SDL dans ce que tu as mi sur pastebin?)

[DenshaOtoko] [DenshaOtoko]
MP
Niveau 12
30 juillet 2014 à 15:31:29

oui, voilà tout le projet :

https://github.com/stanoob/ParserColladaDAE

le code que j'ai mis sur pastebin est dans le fichier scenegl.cpp
la ligne qui fait défaut est la ligne 101

les autres fichiers c'est pour le parser de fichier dae que j'ai entrepris d'essayer de faire, d'ailleurs j'ai un probleme avec, mais j'en ferais un autre topic après ne plus avoir le probleme de matrice de projection

(j'allais faire une archive et upload ça sur mega.co.nz, mais au final je pense que c'est le bon moment pour apprendre à utiliser git)

Lapintade Lapintade
MP
Niveau 18
30 juillet 2014 à 16:03:47

dans ton code initial, tes coordonnées de vertices sont compris entre 0.0 et 1.0f

et tu as defini un near->far qui va de 1.0f à 100.0f

En theorie, tu ne dois rien voir car tes points sont tous avant ton plan "near".

Essai avec des coordonnées plus grands.

tu peux aussi vérifier les valeurs qui sont dans ta variable "projection"

pilo1488 pilo1488
MP
Niveau 10
30 juillet 2014 à 16:43:27

Merci pour le code ;)

Donc c'est bien un simple problème de placement de camera (comme je te le disais, et comme le dit aussi Lapintade).

si tu met ca :

view = glm::lookAt(glm::vec3(0.0, 3.0, -5.0),
glm::vec3(0.0, 0.0, 0.0),
glm::vec3(0.0, 1.0, 0.0));

tu verra que tout marche comme il faut ;)
gl_Position = projection * view * modelview * vec4(in_position, 1.0);

P.S. : c'est la premiere fois que je compilais du code "pur" OpenGL 3 sur ma machine, j'ai utilisé GLEW (donc en enlevant les define que tu avait mis pour win32, pour que ca fonctionne aussi sous mon linux), et j'ai du rajouté ca avant le init de glew :
glewExperimental = GL_TRUE;

je sais pas si c'est necessaire sur d'autre plateforme, mais sous linux apparament oui (enfin, c'est sur que oui sinon les pointeurs sur les fonctions openGL ne sont pas setter).

DébutPage précedente
12
Page suivanteFin
Répondre
Prévisu
?
Victime de harcèlement en ligne : comment réagir ?
La vidéo du moment