認識圖形程式
glSolidCone >球glSolidTorus >圓錐
glSolidSphere >圓環
每個都可以控制移動方向大小

自定義圖形
畫出個長方形
#include <GL/glut.h>void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glColor3f(1,0,0); 顏色
glScalef(0.5,0.2,0.2); 縮放大小
glutSolidCube(1); 變出一個方塊
glPopMatrix();
glutSwapBuffers();
}
int main(int argc, char**argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week 09");
glutDisplayFunc(display);
glutMainLoop();
}
變成簡單的程式 在加個黃色長方形
#include <GL/glut.h>
void myCube() 自己加個函式
{
glPushMatrix();
glScalef(0.5,0.2,0.2);
glutSolidCube(1);
glPopMatrix();
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glColor3f(1,0,0);
myCube(); 呼叫自己設的函式
glTranslatef(0.4,0.1,0); 第二個方塊設完條件在呼叫方塊
glColor3f(1,1,0);
myCube(); 呼叫方塊
glPopMatrix();
glutSwapBuffers();
}
int main(int argc, char**argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week 09");
glutDisplayFunc(display);
glutMainLoop();
}
圖形轉動
#include <GL/glut.h>
void myCube()
{
glPushMatrix();
glColor3f(1,0,0); 顏色改來這所以每次都是紅色長方形
glScalef(0.5,0.2,0.2);
glutSolidCube(1);
glPopMatrix();
}
float angle=0; 轉動變數角度
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glRotatef(angle, 0,0,1); 轉動
myCube();
glPopMatrix();
angle++; 每次轉動增加
glutSwapBuffers();
}
int main(int argc, char**argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week 09");
glutIdleFunc(display); 有閒置的時候重新再做動作 (Idle閒置)
glutDisplayFunc(display);
glutMainLoop();
}
選擇原點做旋轉
#include <GL/glut.h>
void myCube()
{
glPushMatrix();
glColor3f(1,0,0);
glScalef(0.5,0.2,0.2);
glutSolidCube(1);
glPopMatrix();
}
float angle=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glRotatef(angle, 0,0,1);
glTranslatef(0.5,0,0); 可以選擇轉動的點(例如是0就是中心,0.5就是物體為
myCube(); 中心正0.5的點為中心旋轉
glPopMatrix();
angle++;
glutSwapBuffers();
}
int main(int argc, char**argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week 09");
glutIdleFunc(display);
glutDisplayFunc(display);
glutMainLoop();
}

void myCube()
{
glPushMatrix();
glColor3f(1,0,0);
glScalef(0.5,0.2,0.2);
glutSolidCube(1);
glPopMatrix();
}
float angle=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3f(0,1,0);
glutSolidCube(0.6); 新增一個綠色方塊(身體)
glPushMatrix();
glTranslatef(0.3,0.3,0); 先把手臂掛到右上角的移動
glRotatef(angle, 0,0,1);
glTranslatef(0.22,0,0); 後面的移動前面接著Rotate所以這個移動是轉動中心位置
myCube();
glPopMatrix();
angle++;
glutSwapBuffers();
}
int main(int argc, char**argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week 09");
glutIdleFunc(display);
glutDisplayFunc(display);
glutMainLoop();
}

進階手臂旋轉 TRT
#include <GL/glut.h>void myCube()
{
glPushMatrix();
glColor3f(1,0,0);
glScalef(0.5,0.2,0.2);
glutSolidCube(1);
glPopMatrix();
}
float angle=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glColor3f(0,1,0);
glutSolidCube(0.6); 新增一個綠色方塊(身體)
glPushMatrix();
glTranslatef(0.3,0.3,0); 先把手臂掛到右上角的移動
glRotatef(angle, 0,0,1);
glTranslatef(0.22,0,0); 後面的移動前面接著Rotate所以這個移動是轉動中心位置
myCube();
glPopMatrix();
angle++;
glutSwapBuffers();
}
int main(int argc, char**argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week 09");
glutIdleFunc(display);
glutDisplayFunc(display);
glutMainLoop();
}




沒有留言:
張貼留言