begin process at 2012 05 30 02:09:20
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Linux

 > 

OpenGL

 > 

probleme avec la fonction glreadpixels


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

probleme avec la fonction glreadpixels

samedi 15 mai 2010 à 22:36:27 | probleme avec la fonction glreadpixels

sousoi


je trouve que on peut implimenter l'algo de z buffer avec opengl et recuperer les donnee avec la fonction de opengl "glreadpixels" mais je trouve un probleme tel que j'essais de lire le buffer et afficher le contenue mais je trouve que le contenue est des 1. mon code source est le suivant:
#include "stdafx.h"
#include<stdio.h>
#include<malloc.h>
#include <string.h>
#include <stdlib.h>
#include <GL/glut.h>
/* declaration des varaibles globales */
//----------------------------------------

float prfi,prfs,prfs1,sprof=0,nbsommet=0,buffer[4884],zbuffer[74][66];
int choix=0;
//---------------------------------------
/*declaration de type */
typedef struct _vecteur{float x,y,z;}vecteur;

//---------------------------------------
/* declaration des listes*/
typedef struct _vertex
{
vecteur v;
struct _vertex *suiv;
}vertex;

typedef struct _facet
{
vertex *ft[3];
struct _facet *suivft;
}facet;


//-------------------------------------
/* fonc initial des pointeur */

vertex *tetev1=NULL;
vertex *finv1=NULL;
facet *teteft=NULL;
facet *finft=NULL;

//-------------------------------------------------
//liste des vertexe
void creer(float x1,float y1,float z1)
{
vertex *v;

v=(struct _vertex *) malloc(sizeof(struct _vertex));
v->v.x=(double)x1;
v->v.y=(double)y1;
v->v.z=(double)z1;
v->suiv=NULL;

if(tetev1==NULL)
{
tetev1=v;
finv1=v;
}
else
{
finv1->suiv=v;
finv1=v;
}
}
void creerlistef(int v11,int v22,int v33)
{

facet *f;
vertex *v;
int i,k=0;

f=(struct _facet *) malloc(sizeof(struct _facet));

v=tetev1;
while(v!=NULL)
{
if(k==v11)
f->ft[0]=v;
if(k==v22)
f->ft[1]=v;
if(k==v33)
f->ft[2]=v;

k++;
v=v->suiv;
}

f->suivft=NULL;

if(teteft==NULL)
{
teteft=f;
finft=f;
}
else
{
finft->suivft=f;
finft=f;
}

}


//-----------------------------------------------------
void lirefichier()
{
printf("lecture de fichier\n");

char ligne[256],v ;
int lligne,compte,g=0,i,j=0, o=0,k, f1=0,f2=0,v1,v2,v3;
float x1,y1,z1;

FILE *face;

//ouverture de la fichier obj
face = fopen("001_01_00_nhf_r1.wrl","r");
//teste si l'ouverture est échoue
if (face == NULL)
{
printf("erreur de l'ouverture de fichier obj");
exit(1);
}


while (!feof (face)) //tantque non fin de fichier
{
if( (fgets(ligne, 100, face) == NULL))
{
//fin de fichier
break;
}

//trouver la langeur de ligne
lligne = strlen(ligne);

while ((lligne > 0) && ((ligne[lligne - 1] == ' ') ||
(ligne[lligne - 1] == '\n')))
lligne--;

if(lligne>0)//la ligne n'est pas vide
{
i=0;
while (ligne[i] == ' ') i++;

if(((ligne[i]=='[')||(ligne[i]==']'))||((ligne[i]=='{')||(ligne[i]=='}'))||((ligne[i]=='n')||(ligne[i]=='N'))||((ligne[i]=='v')||(ligne[i]=='V')))
{
o=0;f1=0;f2=0;
}
if(o==1)//coordonnee de point
{
j++;

compte = sscanf(ligne, "%f %f %f ", &x1,&y1, &z1);

if(g==0)
{
prfi=x1;
prfs=y1;
g=1;
}

nbsommet++;
sprof=sprof+z1;
if(prfi<x1)prfi=x1;
if(prfs<y1)prfs=y1;
//on ajoute le nouveau vertexe a la liste
creer(x1,y1,z1);

}
if((ligne[i]=='I')&&(ligne[i+7]=='F')&&(ligne[i+8]=='a')&&(ligne[i+9]=='c')&&(ligne[i+11]=='S'))//IndexedFaceSet f indique l'ensemble des vertexe de la face
if(o==0)
f1=1;

if(o==0)//
{
if((f1==1)&&(f2==1))//les facettes
{
compte = sscanf(ligne, "%d %c %d %c %d",&v1,&v,&v2,&v,&v3);

//on ajoute la nouvelle face a la liste
creerlistef(v1,v2,v3);
}
}
if((ligne[i]=='p')&&(ligne[i+1]=='o')&&(ligne[i+2]=='i')&&(ligne[i+3]=='n'))//g indique l'objet
o=1;
if((ligne[i]=='c')&&(ligne[i+1]=='o'))//&&(ligne[i+2]=='O')&&(ligne[i+3]=='r')&&(ligne[i+5]=='I'))//IndexedFaceSet f indique l'ensemble des vertexe de la face
f2=1;
}
}
printf(" fin de lecture de fichier\n");
//fermeture de la fichier vrml
fclose(face);
}

//libérer l'allocation d'espace mémoire
void free()
{
vertex *v,*vv;
facet *f,*ff;

v=tetev1;
while(v!=NULL)
{
vv=v;
v=v->suiv;
free(vv);
}

f=teteft;
while(f!=NULL)
{
ff=f;
f=f->suivft;
free(ff);
}
}
//----------------------------------------------------------
//procedureb d'initialisation du buffer
void initzbuffer()
{
for(int i=0;i<66;i++)
{
for(int j=0;j<74;j++)
{
zbuffer[i][j]=prfi;
}
}
}
//----------------------------------------------------------
//procedure d'affichage
void rendu()
{
printf("debute de rend prfs1=%f\n",prfs1);
int i,langueur=60,largeur=105,index,count[6300];
float x,x1,y,z,moy,profondeur[6300];
vertex *v,*q;
facet *f;
f=teteft;
printf("debute de rendu\n");
q=tetev1;
int k=0;
moy=sprof/nbsommet;

while (f!=NULL)
{

glBegin(GL_POINTS);
for( i=0;i<3 ;i++)
{
//******************
// tracage des arrête
//******************
x=f->ft[i]->v.x;
y=f->ft[i]->v.y;
z=f->ft[i]->v.z;
glVertex3f(x,y,z);
}
printf("\n");

glEnd() ;
f=f->suivft;
}

printf("fin rend\n");
glReadPixels(0,0,74,66,GL_DEPTH_COMPONENT,GL_FLOAT,buffer);
for(int i=0;i<4884;i++)
{
buffer[i];
printf(" depth=%f",buffer[i]);
}
}
//--------------------------------------------------
void redraw()//()
{
//remplace la matrice courante par la matrice identité
glLoadIdentity ();
glTranslatef (30.0f, 52.5f, 0.0f);
glScalef(0.5f,0.5f,0.5f);
rendu();
glFlush ();
}
void reshape(int w,int h)
{
if (h == 0)
h = 1;
glClearColor (0.0,0.0,0.0,0.0);
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

// glViewport() permet de limiter la zone de dessin à une portion de la fenêtre
glViewport (0, 0, (GLsizei)w, (GLsizei)h);

glMatrixMode (GL_PROJECTION);
glLoadIdentity ();
gluPerspective (45.0, (GLfloat)w/(GLfloat)h, 0.1, 1000.0);

glMatrixMode (GL_MODELVIEW);
glLoadIdentity ();

glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LESS);
glDepthMask(GL_TRUE);
//glutPostRedisplay indique que la fenêtre doit être rafraîchie
glutPostRedisplay ();
}

void myinit (void)
{
glShadeModel(GL_SMOOTH);

}

//----------------------------------------------------------
int main(int argc, char* argv[])
{
//lirefichier();
lirefichier();
//glutInitDisplayMode : spécifie le mode d'affichage de la fenêtre.
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGBA | GLUT_DEPTH);
//Définit la taille de la fenêtre à l'écran.
glutInitWindowSize(74,66);
//Définit la position de la fenêtre sur l'écran
glutInitWindowPosition(50,50);
//Crée une fenêtre avec le titre "dessin en fil de fer"
//selon les paramètres définis lors de l'exécution des fonctions précédentes
//La fenêtre n'est affichée qu'ultérieurement lors de l'exécution de glutMainLoop.
glutCreateWindow("dessin en fil de fer");

myinit();

//La fonction glutReshapeFunc établit la fonction de rappel de redimensionnement
//de la fenêtre courante. La fonction de rappel de redimensionnement est déclenchée
//lorsque la fenêtre est refaçonnée
glutReshapeFunc(reshape);

//La fonction glutDisplayFunc établit la fonction de rappel pour la fenêtre courante.
//Quand GLUT détermine que le plan normal de la fenêtre doit être réaffiché,
//la fonction de rappel d'affichage est appelée
glutDisplayFunc(redraw);

//Cette fonction permet d'entrer dans la boucle de GLUT de traitement des événements.
//Cette fonction est appelée seulement une fois dans une application. Dans cette boucle,
//les fonctions de rappel qui ont été enregistrées sont appelées à tour de rôle.
glutMainLoop();

//freeliste();
free();
//============
return 0;
}

Svp aidez-moi pour résoudre mon problème et merci d’avance





Cette discussion est classée dans : ligne, fonction, int, fenêtre, if


Répondre à ce message

Sujets en rapport avec ce message

allocation dynamique [ par ralou ] salut tlm mon prob c est que je veux utiliser une fonction pour creer des tableaus dynamiques (langage C), mais j'arrive pas a comprendre ou a vrai d FONCTION SUR C++ [ par debutanteencplusplus ] SALUT !!! je veux faire une fonction qui teste si un nombre n est ondulant . voila ce que j'ai fait ,mais ça marche pas [color=gray]int est_ondulant Recherche fenetre windows vis a vis du handle d'un processus [ par kickbar ] Bonjour a tous, voila je vien poster ici car je rencontre un probleme. Je réalise une application relativement simple en C sous Dev-C++ 4.9.9.2 pour classe matrice [ par monphp ] slt tt le monde, je suis entrain de réaliser un projet concernant le polymorphisme des matrices et des vecteurs. jé realisé alors une matricecaree qui jeu d'echec C++ [ par CKBT ] bonjour, Je débute en programmation C++, je dois réaliser un pseudo jeu d'echec. Mais j'ai un soucis au niveau de l'echiquier. Je veux utiliser un tab Problème générateur de grille de sudoku en C [ par Dovah ] Bonjour, je suis débutant en programmation, et pour m'entraîner j'ai décidé de créer un programme qui génère aléatoirement une grille de sudoku en C erreur c [ par maha1987 ] Bonjour tout le monde, j'ai ce programme C qui prend des caractères et doit afficher si la chaîne constituée par ces caractères est valide(constituée Convert char** en int sous c [ par clavz40 ] Bonjour a tous, Je développe une petite application en c pour appareil de lecture de code barre dont je récupère les infos. J'avais besoin d'une fon Qsort sur une ligne d'un tableau 2d [ par thespartan ] Bonjour.Jai un tableau des x,y,z de N éléments. J'aimerais trier ce tableau selon sa 3ème ligne par ordre croissant or quand j'appele qsort, il le fai Table de hachage avec patronyme [ par guitoontruant ] Bonjour, Désolé, j'avais d'abord poster dans les discussions libres.Voilà je dois créer une table de hashage de patronymes par le biais de N entrées,


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,716 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales