読者です 読者をやめる 読者になる 読者になる

glutで画像を表示したぞ。

ppm形式(raw)の画像を用意して、それをglutで表示する。
座標とかはやってない。
高さx幅xRGBのサイズのarrayを用意して、画像を読み込み、glDrawPixelsを実行するだけ。

コンパイル方法。(オプションが多いね。)

gcc a.c -lglut -lGL

コード

#include<GL/glut.h>
#include<stdio.h>
#include<stdlib.h>

unsigned char image[400][640][3];

int ppm_read(char *filename, unsigned char *pimage){
  FILE *fp;
  if((fp=fopen(filename,"rb"))==NULL){
     printf("ERROR:%s\n",filename);
     exit(-1);
  }
  fscanf(fp,"P6\n640 480\n255\n");
  fread(pimage,sizeof(char),640*400*3,fp);
  fclose(fp);
  return 0;
}


void disp(){
    glClear(GL_COLOR_BUFFER_BIT);
    glDrawPixels(640, 400, GL_RGB, GL_UNSIGNED_BYTE, &image[0][0][0]); 
    glFlush();
}

void resize(){

}

void keyboard(unsigned char key,int x,int y){

}

void mouse(int button,int state,int x,int y){

}

void motion(int x,int y){
    
}


void init(){
    glClearColor(0.0, 0.0, 1.0, 1.0);
    ppm_read("a.ppm",&image[0][0][0]);
}

int main(int argc,char *argv[]){
    glutInit(&argc,argv);
    glutCreateWindow("TITLE NAME");
    glutInitDisplayMode(GLUT_RGBA);
 
    glutDisplayFunc(disp);
    glutKeyboardFunc(keyboard);
    glutReshapeFunc(resize);
    glutMouseFunc(mouse);
    glutMotionFunc(motion);
 
    init();
    glutMainLoop();
    return 0;
}