Jump to content
  • Advertisement
Sign in to follow this  
arthas84

OpenGL 3d texture! HELP! S.O.S

This topic is 3987 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Hi! The program I wrote, should read the values of a volume ( the array “volumevalues” is an example of 1x1x3 volume) map it into 3 poligons, blend them, and put the result in an array. It should simulate a radiography.. I have a problem, the program compiles, and runs.. but after blend the 3 slices, in the array result there aren't color values, but only an alpha value ( that i'm not sure is right..). and maybe i must center the texel coordinates( if anyone can tell me..)Please Help! #include <cstdio> #include <cstdlib> using namespace std; // -------------------------------------------- // Include #include <gl\glew.h> #include <gl\glut.h> #include <gl\gl.h> #include <gl\glu.h> #include <windows.h> //trasform alpha from double to char and in the range 0-255 char DoubleToChar(double alpha){ return (char)(alpha*255.0); } int main(int argc, char **argv) { //Volume values: is a simple 1x1x3 poligon along z unsigned char VolumeValues[12]={1,0,0,1,2,0,0,0,3,0,0,0}; VolumeValues[3]=DoubleToChar(1.0); VolumeValues[7]=DoubleToChar(1.0/2.0); VolumeValues[11]=DoubleToChar(1.0/3.0); unsigned char result[12]; //array for the result // inizialize glut glutInit (&argc, argv); glutCreateWindow("radiographic simulation"); glewInit(); // create the texture GLuint tex; glGenTextures (1, &tex); glBindTexture(GL_TEXTURE_3D,tex); // target is a 3d texture // sets texture parameters glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_S, GL_CLAMP); glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_T, GL_CLAMP); /*void glTexImage3D (GLenum target,GLint level,GLint internalformat,GLsizei width,GLsizei height,GLsizei depth,GLint border,GLenum format,GLenum type,const GLvoid * pixels)*/ // allocate graphioc memory glTexImage3D(GL_TEXTURE_3D,0,GL_RGBA,1,1,3,0,GL_RGBA,GL_UNSIGNED_BYTE,VolumeValues); GLenum errCode; const GLubyte *errString; if ((errCode = glGetError()) != GL_NO_ERROR) { errString = gluErrorString(errCode); fprintf (stderr, "OpenGL Error: %s\n", errString); } /* void gluOrtho2D(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top); The clipping region is a rectangle with the lower-left corner at (left, bottom) and the upper-right corner at (right, top). void glViewport(GLint x, GLint y, GLsizei width, GLsizei height); Defines a pixel rectangle in the window into which the final image is mapped. The (x, y) parameter specifies the lower-left corner of the viewport, and width and height are the size of the viewport rectangle.*/ //viewport transform for 1:1 pixel=texel=data mapping glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluOrtho2D(0.0,1,0.0,1); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glViewport(0,0,1,1); glClear(GL_COLOR_BUFFER_BIT); glPushMatrix(); glEnable(GL_TEXTURE_3D); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); float z= ((float)1)/3; float y =((float)2)/3; glBegin(GL_QUADS); glTexCoord3f(0.0,0.0,0.0); glVertex2f(0,0); glTexCoord3f(0.0,1.0,0.0); glVertex2f(0,1); glTexCoord3f(1.0,1.0,0.0); glVertex2f(1,1); glTexCoord3f(1.0,0.0,0.0); glVertex2f(1,0); glTexCoord3f(0.0,0.0,z); glVertex2f(0,0); glTexCoord3f(0.0,1.0,z); glVertex2f(0,1); glTexCoord3f(1.0,1.0,z); glVertex2f(1,1); glTexCoord3f(1.0,0.0,z); glVertex2f(1,0); glTexCoord3f(0.0,0.0,y); glVertex2f(0,0); glTexCoord3f(0.0,1.0,y); glVertex2f(0,1); glTexCoord3f(1.0,1.0,y); glVertex2f(1,1); glTexCoord3f(1.0,0.0,y); glVertex2f(1,0); glEnd(); glPopMatrix(); /*void glReadBuffer(GLenum mode): specifies a color buffer as the source for subsequent read and copy image commands*/ /*void glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels);*/ //reads data from the frame buffer and write them in the result glReadBuffer(GL_FRONT); glReadPixels(0,0,1,1,GL_RGBA,GL_BYTE,result); // print out results printf("Data before roundtrip:\n"); for (int i=0; i<12; i++) printf("%d\n",VolumeValues); printf("Data after roundtrip:\n"); for (int i=0; i<12; i++) printf("%d\n",result); getchar(); return 0; the output is: data before roundtrip: 1 0 0 255 2 0 0 127 3 0 0 85 data after roundtrip: 0 0 0 127 204 204 204 204 204 204 204 204

Share this post


Link to post
Share on other sites
Advertisement
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!