所以,我开始学习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
1条答案
按热度按时间vdzxcuhz1#
使用库将数据写入图像文件。一个选项是使用STB。STB是一个仅包含头文件的单个文件库。您所要做的就是包含头文件,而无需担心链接。使用函数
stbi_write_bmp
、stbi_write_png
或stbi_write_tga
将像素数据写入图像文件。例如:第一个