[問題] OpenGL是否能顯示浮點數0~1的影像

看板C_and_CPP (C/C++)作者 (aada)時間16年前 (2010/05/04 13:43), 編輯推噓5(5015)
留言20則, 3人參與, 最新討論串1/1
請問版上的大大, 1. 是否能夠使用OpenGL來顯示我的浮點數0~1的影像, 我目前只能先將資料*255用灰度去顯示, 不洗得要怎麼改成浮點數顯示, 請版上大大指點一下, 下面是我的程式 ( 已經可以顯示浮點數影像 ) 2. m 如果沒有規一化的影像是否能用呢,謝謝 3. 請問我是否能將這資料畫成3D的影像呢 就如同MATLAB中的mesh = = = = = = = = = = = = = = = = = = #include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> #include <time.h> #include <GL/glut.h> #include <GL/gl.h> #include <GL/glu.h> #define Width 512 #define Height 512 float image[512][512]; // 讀記事本影像 void Image_read( float *input ) { char filename[] = "A512_2.txt"; FILE *fp1; fp1= fopen(filename, "r"); for( int i=0; i<Width*Height; i++) { fscanf( fp1,"%f",&input[i] ); } fclose(fp1); } // 顯示影像 void display( void ) { glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); glLoadIdentity(); glDrawPixels(512,512, GL_LUMINANCE, GL_FLOAT, image); glFlush(); } // ================= Main ================= // int main(int argc, char *argv[]) { int kk; float *input; input = (float*) fftw_malloc( sizeof(float)*Width*Height ); Image_read( input ); 把讀入的檔案都入顯示的變數中 for( int i=0; i<Width; i++) { for( int j=0; j<Height; j++) { image[i][j] = input[i*Width+j]; } } glutInit( &argc, argv ); glutInitDisplayMode( GLUT_RGBA | GLUT_SINGLE | GLUT_DEPTH ); glutInitWindowSize( Width, Height ); glutInitWindowPosition ( 100, 100); glutCreateWindow("Hello"); glClearColor(0.0, 0.0, 0.0, 1.0); glutDisplayFunc(display); glutMainLoop(); return 0; } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.122.192.147

05/04 13:48, , 1F
把GL_UNSIGNED_BYTE改成GL_FLOAT
05/04 13:48, 1F

05/04 14:03, , 2F
我改了會出錯呢
05/04 14:03, 2F

05/04 14:05, , 3F
你的image有記得一起改成float array嗎??
05/04 14:05, 3F

05/04 14:10, , 4F
可以了, 改為 float image[512][512];
05/04 14:10, 4F
※ 編輯: aada 來自: 140.122.192.147 (05/04 14:11) ※ 編輯: aada 來自: 140.122.192.147 (05/04 14:14) ※ 編輯: aada 來自: 140.122.192.147 (05/04 14:14)

05/04 14:16, , 5F
記得浮點資料就是clamp在0.0~1.0之間, 超過的GL也不知道
05/04 14:16, 5F

05/04 14:17, , 6F
該如何幫你normalize/scale, 所以應該你要保證在0~1.@@"
05/04 14:17, 6F

05/04 14:17, , 7F
所以說超過1.0的話, 它會當作1嗎
05/04 14:17, 7F

05/04 14:18, , 8F
另外, 即便資料是浮點數, 顯示在畫面上的pixel color一
05/04 14:18, 8F

05/04 14:18, , 9F
樣只有可用bit count的階度, 也就是這case共256階而已.
05/04 14:18, 9F

05/04 14:20, , 10F
嗯嗯, 所以一般在顯示浮點數影像, OpenGL就會轉成8Bit的影像
05/04 14:20, 10F

05/04 14:20, , 11F
來顯示.
05/04 14:20, 11F

05/04 14:22, , 12F
Hm~應該說是你給glDrawPixel()的參數讓GL幫你這麼做的.
05/04 14:22, 12F

05/04 14:22, , 13F
請問是否有函數可以做歸一化的嗎?
05/04 14:22, 13F
※ 編輯: aada 來自: 140.122.192.147 (05/04 14:40)

05/04 16:22, , 14F
我不記得GL有提供normalize的function, 除了它可以替
05/04 16:22, 14F

05/04 16:23, , 15F
vertex attribute的normal自動normalize, 但這和你的東
05/04 16:23, 15F

05/04 16:23, , 16F
西無關, 你想讓glDrawPixel的input data normalize, 基
05/04 16:23, 16F

05/04 16:24, , 17F
本上那不太關GL的事....
05/04 16:24, 17F

05/04 16:24, , 18F
另外, 要畫成3D影像畫成mesh, 你要自己轉換成vertex的
05/04 16:24, 18F

05/04 16:25, , 19F
data讓GL去畫, 把一張平面浮點資料/灰階影像變成3D的
05/04 16:25, 19F

05/04 16:26, , 20F
data, 基本上這也不太算GL的事, 建模要自己去建@_@"
05/04 16:26, 20F
文章代碼(AID): #1BtxG5LR (C_and_CPP)
文章代碼(AID): #1BtxG5LR (C_and_CPP)