OpenGl et le Zbuffer [Résolu]

cs_User8 30 Messages postés jeudi 24 juillet 2008Date d'inscription 13 novembre 2012 Dernière intervention - 10 juil. 2009 à 11:46 - Dernière réponse : cs_User8 30 Messages postés jeudi 24 juillet 2008Date d'inscription 13 novembre 2012 Dernière intervention
- 15 juil. 2009 à 09:58
Bonjour,

Sous Opengl, je souhaiterai pouvoir colorier des objets 3d en fonction du Zbuffer mais jusqu'à maintenant toutes mes tentatives sont restées infructueuses. 

Voila ou j'en suis (pas bien loin)

var
   depth : array of  GlFloat;
   rgb   : array of  GlFloat;
begin
  setlength(depth,w*h);
  setlength(rgb,3*w*h);

  glReadPixels (0, 0, w, h, GL_DEPTH_COMPONENT, GL_FLOAT, depth);

  for i := 0 to (W * H)-1 do
  begin
     rgb[3*i]:=depth[i];
     rgb[3*i+1]:=depth[i];
     rgb[3*i+2]:=depth[i];
  end;

  glRasterPos2i(0, 0);
  glDrawPixels(w, h, GL_RGB, GL_FLOAT, rgb);
end;

Mais lorsque je lance la fonction je ne vois rien apparaitre. Je ne suis pas sur de passer correctement les arguments depth et rgb. Quelqu'un pourrait-il m'eclairer?

Merci d'avance
Afficher la suite 

Votre réponse

2 réponses

Meilleure réponse
f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscription 9 mars 2018 Dernière intervention - 10 juil. 2009 à 20:34
3
Merci
var
   i,WH  : integer;
   depth : pAGlFloat;
   rgb   : pAGlFloat;
begin
  WH := w*h;
  depth := AllocMem(WH);
  rgb   := AllocMem(3*WH);
  try
    glReadPixels(0, 0, w, h, GL_DEPTH_COMPONENT, GL_FLOAT, Depth);

    for i := 0 to (WH)-1 do
    begin
      rgb^[3*i] := depth^[i];
      rgb^[3*i+1]:=depth^[i];
      rgb^[3*i+2]:=depth^[i];
    end;

    glRasterPos2i(0, 0);
    glDrawPixels(w, h, GL_RGB, GL_FLOAT, rgb);

  finally
    FreeMem(depth);
    FreeMem(rgb);
  end;
end;

<hr width="100%" size="2" />

Merci f0xi 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de f0xi
Meilleure réponse
cs_User8 30 Messages postés jeudi 24 juillet 2008Date d'inscription 13 novembre 2012 Dernière intervention - 15 juil. 2009 à 09:58
3
Merci
Merci pour la réponse FOxi.

Sinon voici une autre variante:

var
   depth : array of  GlFloat;
   rgb   : array of  GlFloat;
begin
  setlength(depth,w*h);
  setlength(rgb,3*w*h);

  glReadPixels (0, 0, w, h, GL_DEPTH_COMPONENT, GL_FLOAT, @depth[0]);

  for i := 0 to (W * H)-1 do
  begin
     rgb[3*i]:=depth[i];
     rgb[3*i+1]:=depth[i];
     rgb[3*i+2]:=depth[i];
  end;

  glRasterPos2i(0, 0);
  glDrawPixels(w, h, GL_RGB, GL_FLOAT, @rgb[0]);
end;

Merci cs_User8 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de cs_User8

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.