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 

2 réponses

Répondre au sujet
f0xi 4304 Messages postés samedi 16 octobre 2004Date d'inscription 9 mars 2018 Dernière intervention - 10 juil. 2009 à 20:34
+3
Utile
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" />
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de f0xi
cs_User8 30 Messages postés jeudi 24 juillet 2008Date d'inscription 13 novembre 2012 Dernière intervention - 15 juil. 2009 à 09:58
+3
Utile
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;
Cette réponse vous a-t-elle aidé ?  
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.