*Step01:下載範例
至 https://jsyeh.org/3dcg10 下載 [data] & [win32]
下載完後解壓縮,將data資料夾放入windows資料夾中
點開會長這樣,就可以執行Transformation.exe檔了
*Step02:
CodeBlocks開新GLUT專案(記得先去lib複製libfreeglut.a修改檔名成libglut32.a)
複製茶壺程式碼
#include <GL/glut.h>
void display()
{
glutSolidTeapot(0.3);
glutSwapBuffers(); //交換顯示
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH); //設定顯示模式
glutCreateWindow("week03"); //視窗名稱
glutDisplayFunc(display); //顯示的函式
glutMainLoop(); //主要迴圈最後
}
*Step03:貼出漂亮的程式碼
用 GitHub Gist功能,新增程式並儲存,會照副檔名(.c .cpp .java .cs .py .html .javascript .css) 的文法來變色
再使用 Embedded JavaScript 的方式,,便能把那一行程式,用 HTML模式,插到部落格裡,注意前後順序
<script src="https://gist.github.com/annie91annie91/79422c3dcf6f866daec0707602c860a2.js"></script>
*Step04:讓茶壺移動
#include <GL/glut.h>
void display()
{
glPushMatrix(); //備份矩陣
glTranslatef(0.5,0.5,0); //改變矩陣
glutSolidTeapot(0.3);
glPopMatrix(); //還原矩陣
glutSwapBuffers();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH); //設定顯示模式
glutCreateWindow("week03"); //視窗名稱
glutDisplayFunc(display); //顯示的函式
glutMainLoop(); //主要迴圈最後
}
void display()
{
glPushMatrix(); //備份矩陣
glTranslatef(0.5,0.5,0); //改變矩陣
glutSolidTeapot(0.3);
glPopMatrix(); //還原矩陣
glutSwapBuffers();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH); //設定顯示模式
glutCreateWindow("week03"); //視窗名稱
glutDisplayFunc(display); //顯示的函式
glutMainLoop(); //主要迴圈最後
}
*Step05:用滑鼠控制茶壺移動
#include <GL/glut.h>
float X=0,Y=0,Z=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix(); //備份矩陣
glTranslatef(X,Y,Z); //改變矩陣
glutSolidTeapot(0.3);
glPopMatrix(); //還原矩陣
glutSwapBuffers();
}
void mouse(int button,int state,int x,int y)
{
X=(x-150)/150.0;
Y=-(y-150)/150.0;
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH); //設定顯示模式
glutCreateWindow("week03"); //視窗名稱
glutMouseFunc(mouse);
glutDisplayFunc(display); //顯示的函式
glutMainLoop(); //主要迴圈最後
}
*Step06:用滑鼠製圖
#include <GL/glut.h>
#include <stdio.h>
float X=0,Y=0,Z=0;
void display()
{
//留下glClear()清背景,glutSwapBuffers
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glBegin(GL_POLYGON);
glVertex2f(-0.01,-0.49);
glVertex2f(-0.53,-0.27);
glVertex2f(-0.63,0.25);
glVertex2f(-0.40,0.53);
glVertex2f(-0.17,0.58); 這裡可以自己改
glVertex2f(0.04,0.57);
glVertex2f(0.40,0.46);
glVertex2f(0.71,-0.08);
glVertex2f(0.54,-0.40);
glVertex2f(0.13,-0.53);
glVertex2f(-0.13,-0.53);
glEnd();
glutSwapBuffers();
}
void mouse(int button,int state,int x,int y)
{
X=(x-150)/150.0;
Y=-(y-150)/150.0;
if(state==GLUT_DOWN) printf(" glVertex2f(%.2f,%.2f);\n",X,Y);
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH); //設定顯示模式
glutCreateWindow("week03"); //視窗名稱
glutMouseFunc(mouse);
glutDisplayFunc(display); //顯示的函式
glutMainLoop(); //主要迴圈最後
}
沒有留言:
張貼留言