畫小小兵
#include <GL/glut.h>
#include <stdio.h>
//Drawing funciton
void draw(void)
{
FILE *f;
float w, h, c;
float r, g, b;
float i, j, x, y;
//Background color,GL_DEPTH_BUFFER_BIT 為必須
glClearColor(0,0,0,1);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
//Read pixel file,minion.txt是圖片的pixel檔
//不要把讀檔function寫在draw()裡面,會造成效能下降
f = fopen("minion.txt", "r");
//Read width, height, channel
fscanf(f, "%f %f %f", &w, &h, &c);
//Set point size,每一個點放成10倍大,避免縮放window的時候造成破圖
glPointSize(10.0f);
//Begin drawing,這邊一個點就畫一個pixel,所以使用GL_POINTS
glBegin(GL_POINTS);
for(i=0; i<w; i++){
for(j=0; j<h; j++){
//Read r, g, b,效能下降主因
fscanf(f, "%f %f %f", &r, &g, &b);
//Geometric transformation
x = -(i-(w/2.0))/(w/2.0);
y = (j-(h/2.0))/(h/2.0);
//Draw(in python, read as bgr)
glColor3f(b/255.0, g/255.0, r/255.0);
glVertex3f(y, x, 0);
}
}
//End drawing
glEnd();
fclose(f);
//Draw order
glutSwapBuffers();
}
//Main program
int main(int argc, char **argv)
{
glutInit(&argc, argv);
//Simple buffer
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE| GLUT_DEPTH);
glutInitWindowPosition(50,25);
glutInitWindowSize(300, 300);
glutCreateWindow("minion");
//Call to the drawing function
glutDisplayFunc(draw);
glutMainLoop();
return 0;
}
結果:
-------------------------------------------------------------------------------------------------------------------
畫足球
- 下載並安裝3D exploration軟體 -> link
- 下載模型檔(05/04 -> examples -> data) -> link
- 將足球模型檔匯入3D exploration (直接拖曳即可,.obj和.mtl都要)

- 點 File -> Save

- 存成.cpp檔

- 選擇Sample App,點ok,就會產生一個可以畫出足球模型的cpp程式碼

- 新增一個GLUT project,把步驟(6)的程式碼複製貼上到main.cpp
- 將會產生錯誤的部分先註解掉,從 SetDCPixelFormat()函式下宣告 lpPalette 開始,到最後一個 if 結束

- 編譯並執行
結果:


沒有留言:
張貼留言