作者aada (aada)
看板C_and_CPP
標題[問題] OpenGL是否能顯示浮點數0~1的影像
時間Tue May 4 13:43:27 2010
請問版上的大大,
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
推 Bencrie:把GL_UNSIGNED_BYTE改成GL_FLOAT 05/04 13:48
→ aada:我改了會出錯呢 05/04 14:03
推 VictorTom:你的image有記得一起改成float array嗎?? 05/04 14:05
→ aada:可以了, 改為 float image[512][512]; 05/04 14:10
※ 編輯: 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)
推 VictorTom:記得浮點資料就是clamp在0.0~1.0之間, 超過的GL也不知道 05/04 14:16
→ VictorTom:該如何幫你normalize/scale, 所以應該你要保證在0~1.@@" 05/04 14:17
→ aada:所以說超過1.0的話, 它會當作1嗎 05/04 14:17
→ VictorTom:另外, 即便資料是浮點數, 顯示在畫面上的pixel color一 05/04 14:18
→ VictorTom:樣只有可用bit count的階度, 也就是這case共256階而已. 05/04 14:18
→ aada:嗯嗯, 所以一般在顯示浮點數影像, OpenGL就會轉成8Bit的影像 05/04 14:20
→ aada:來顯示. 05/04 14:20
推 VictorTom:Hm~應該說是你給glDrawPixel()的參數讓GL幫你這麼做的. 05/04 14:22
→ aada:請問是否有函數可以做歸一化的嗎? 05/04 14:22
※ 編輯: aada 來自: 140.122.192.147 (05/04 14:40)
推 VictorTom:我不記得GL有提供normalize的function, 除了它可以替 05/04 16:22
→ VictorTom:vertex attribute的normal自動normalize, 但這和你的東 05/04 16:23
→ VictorTom:西無關, 你想讓glDrawPixel的input data normalize, 基 05/04 16:23
→ VictorTom:本上那不太關GL的事.... 05/04 16:24
→ VictorTom:另外, 要畫成3D影像畫成mesh, 你要自己轉換成vertex的 05/04 16:24
→ VictorTom:data讓GL去畫, 把一張平面浮點資料/灰階影像變成3D的 05/04 16:25
→ VictorTom:data, 基本上這也不太算GL的事, 建模要自己去建@_@" 05/04 16:26