如何用OpenGL将图形保存为图像文件格式

ukdjmx9f  于 2022-11-04  发布在  其他
关注(0)|答案(1)|浏览(397)

所以,我开始学习opengl,我画了一些形状,现在我想保存它,我发现这个代码在一个文档中,但我不知道我将如何让它与我的代码一起工作.这是我的代码:


# include <GL/glut.h>

# include <stdio.h>

void display(void) {

  glClear(GL_COLOR_BUFFER_BIT);

  glColor3f(1.0f, 0.0f, 0.0f);
  glBegin(GL_TRIANGLES);

  glVertex2f(0.1, 0.1);
  glVertex2f(0.3, 0.1);

  glVertex2f(0.2, 0.3);

  glEnd();

  glBegin(GL_POLYGON);

  glColor3f(0.0, 1.0, 0.0);

  glVertex2f(0.3, -0.1);
  glVertex2f(0.3, 0.1);
  glVertex2f(0.1, 0.1);
  glVertex2f(0.1, -0.1);

  glEnd();

  glFlush();
}
int main(int argc, char *argv[]) {

  glutInit(&argc, argv);
  glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
  glutInitWindowPosition(10, 10);
  glutInitWindowSize(920, 920);
  glutCreateWindow("First Raster Shape");
  glutDisplayFunc(display);
  glutMainLoop();

  return 0;
}

我找到的代码和文档:

void savePPM(int start_x,int start_y,int w,int h,char *fname)
{
        FILE *f=fopen(fname,"wb");
        if (!f) return;
        std::vector<unsigned char> out(3*w*h);
        glPixelStorei(GL_PACK_ALIGNMENT,1); /* byte aligned output */
        glReadPixels(start_x,start_y,w,h, GL_RGB,GL_UNSIGNED_BYTE,&out[0]);
        fprintf(f,"P6\n%d %d\n255\n",w,h);
        for (int y=0;y<h;y++) { /* flip image bottom-to-top on output */
                fwrite(&out[3*(h-1-y)*w],1,3*w,f);
        }
        fclose(f);
}

代码保存为ppm格式,我很酷,但我仍然想知道我如何让它与我的代码一起工作。或者有没有其他方法来做它?链接的文档:https://www.cs.uaf.edu/2010/spring/cs481/section/2/lecture/03_30_imagefiles.html

vdzxcuhz

vdzxcuhz1#

使用库将数据写入图像文件。一个选项是使用STB。STB是一个仅包含头文件的单个文件库。您所要做的就是包含头文件,而无需担心链接。使用函数stbi_write_bmpstbi_write_pngstbi_write_tga将像素数据写入图像文件。例如:
第一个

相关问题