一.
打開glut 專案
打出以下程式碼
1-1
///
#include <GL/glut.h>
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glRectf(0.3, 0.5, -0.3, -0.5);///座標
glutSwapBuffers();
}
int main(int argc, char**argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutInitWindowSize(700, 700);///視窗大小
glutCreateWindow("week13 rect TRT");
glutDisplayFunc(display);
glutMainLoop();
}
///
跑出以下結果
畫面顯示出一格長方形,使用座標畫出來,且視窗大小也有調整
1-2
///
#include <GL/glut.h>
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glColor3f(1, 1, 1);
glRectf(0.3, 0.5, -0.3, -0.5);///身體座標
glPushMatrix();
///glTranslatef(x, y, z);(3)把手臂接回身體
///glRotatef(angle, 0, 0, 1);(2)對Z軸旋轉
///glTranslatef(x2, y2, z2);(1)手臂旋轉中心放中心
glColor3f(1, 0, 0);///紅色
glRectf(0.3, 0.5, 0.7, 0.3);
glPopMatrix();
glutSwapBuffers();
}
int main(int argc, char**argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutInitWindowSize(700, 700);///視窗大小
glutCreateWindow("week13 rect TRT");
glutDisplayFunc(display);
glutMainLoop();
}
///
在畫出一個紅色長方形,並把他接回白色長方形
1-3
///
#include <GL/glut.h>
float angle=45;
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glColor3f(1, 1, 1);
glRectf(0.3, 0.5, -0.3, -0.5);///身體座標
glPushMatrix();
///glTranslatef(x, y, z);(3)把手臂接回身體
glRotatef(angle, 0, 0, 1);///(2)對Z軸旋轉
glTranslatef(-0.3, -0.4, 0);///(1)手臂旋轉中心放中心
glColor3f(1, 0, 0);///紅色
glRectf(0.3, 0.5, 0.7, 0.3);
glPopMatrix();
glutSwapBuffers();
}
int main(int argc, char**argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutInitWindowSize(700, 700);///視窗大小
glutCreateWindow("week13 rect TRT");
glutDisplayFunc(display);
glutMainLoop();
}
///
把紅色長方形接回正中心,且讓它旋轉
1-4
///
#include <GL/glut.h>
float angle=45;
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glColor3f(1, 1, 1);
glRectf(0.3, 0.5, -0.3, -0.5);///身體座標
glPushMatrix();
glTranslatef(0.3, 0.4, 0);///(3)把手臂接回身體
glRotatef(angle, 0, 0, 1);///(2)對Z軸旋轉
glTranslatef(-0.3, -0.4, 0);///(1)手臂旋轉中心放中心
glColor3f(1, 0, 0);///紅色
glRectf(0.3, 0.5, 0.7, 0.3);
glPopMatrix();
glutSwapBuffers();
}
int main(int argc, char**argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutInitWindowSize(700, 700);///視窗大小
glutCreateWindow("week13 rect TRT");
glutDisplayFunc(display);
glutMainLoop();
}
///
把它像手臂一樣接回來(調整座標))
二.
2-1
///
#include <GL/glut.h>
float angle=45, oldX= 0;
void mouse(int button, int state, int x, int y){
oldX =x;
}
void motion(int x, int y ){
angle += (x-oldX);
oldX = x;
glutPostRedisplay();///讓GLUT重畫
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glColor3f(1, 1, 1);
glRectf(0.3, 0.5, -0.3, -0.5);///身體座標
glPushMatrix();
glTranslatef(0.3, 0.4, 0);///(3)把手臂接回身體
glRotatef(angle, 0, 0, 1);///(2)對Z軸旋轉
glTranslatef(-0.3, -0.4, 0);///(1)手臂旋轉中心放中心
glColor3f(1, 0, 0);///紅色
glRectf(0.3, 0.5, 0.7, 0.3);
glPopMatrix();
glutSwapBuffers();
}
int main(int argc, char**argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutInitWindowSize(700, 700);///視窗大小
glutCreateWindow("week13 rect TRT");
glutMouseFunc(mouse);
glutMotionFunc(motion);
glutDisplayFunc(display);
glutMainLoop();
}
///
打出上列程式碼,讓紅色手臂可以用滑鼠操控
2-2
開啟新的GLUT專案,把剛剛的程式碼貼上去
#include <GL/glut.h>
float angle=0, oldX= 0;
void mouse(int button, int state, int x, int y){
oldX =x;
}
void motion(int x, int y ){
angle += (x-oldX);
oldX = x;
glutPostRedisplay();///讓GLUT重畫
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glColor3f(1, 1, 1);
glRectf(0.3, 0.5, -0.3, -0.5);///身體座標
glPushMatrix();
glTranslatef(0.3, 0.4, 0);///(3)把手臂接回身體
glRotatef(angle, 0, 0, 1);///(2)對Z軸旋轉
glTranslatef(-0.3, -0.4, 0);///(1)手臂旋轉中心放中心
glColor3f(1, 0, 0);///紅色
glRectf(0.3, 0.5, 0.7, 0.3);
glPushMatrix();
///glTranslatef(x, y,z);
///glRotatef(angle, 0, 0, 1);
///glTranslatef(x2, y2, z2);
glColor3f(0, 1, 0);///綠色
glRectf(0.7, 0.5, 1.0, 0.3);///下手臂
glPopMatrix();
glPopMatrix();
glutSwapBuffers();
}
int main(int argc, char**argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutInitWindowSize(700, 700);///視窗大小
glutCreateWindow("week13 rect TRT");
glutMouseFunc(mouse);
glutMotionFunc(motion);
glutDisplayFunc(display);
glutMainLoop();
}
///
2-3
調整綠色手臂的Z軸,讓它放到中心旋轉,同時先把紅色手臂Z軸旋轉註解掉
///
#include <GL/glut.h>
float angle=0, oldX= 0;
void mouse(int button, int state, int x, int y){
oldX =x;
}
void motion(int x, int y ){
angle += (x-oldX);
oldX = x;
glutPostRedisplay();///讓GLUT重畫
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glColor3f(1, 1, 1);
glRectf(0.3, 0.5, -0.3, -0.5);///身體座標
glPushMatrix();
glTranslatef(0.3, 0.4, 0);///(3)把手臂接回身體
///glRotatef(angle, 0, 0, 1);///(2)對Z軸旋轉
glTranslatef(-0.3, -0.4, 0);///(1)手臂旋轉中心放中心
glColor3f(1, 0, 0);///紅色
glRectf(0.3, 0.5, 0.7, 0.3);
glPushMatrix();
///glTranslatef(x, y,z);
glRotatef(angle, 0, 0, 1);///(2)對Z軸旋轉
glTranslatef(-0.7, -0.4, 0);///(1)手臂旋轉中心放中心
glColor3f(0, 1, 0);///綠色
glRectf(0.7, 0.5, 1.0, 0.3);///下手臂
glPopMatrix();
glPopMatrix();
glutSwapBuffers();
}
int main(int argc, char**argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutInitWindowSize(700, 700);///視窗大小
glutCreateWindow("week13 rect TRT");
glutMouseFunc(mouse);
glutMotionFunc(motion);
glutDisplayFunc(display);
glutMainLoop();
}
///
2-4
把綠色手臂接回去,同時把紅色手臂的旋轉的註解刪掉
///
#include <GL/glut.h>
float angle=0, oldX= 0;
void mouse(int button, int state, int x, int y){
oldX =x;
}
void motion(int x, int y ){
angle += (x-oldX);
oldX = x;
glutPostRedisplay();///讓GLUT重畫
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glColor3f(1, 1, 1);
glRectf(0.3, 0.5, -0.3, -0.5);///身體座標
glPushMatrix();
glTranslatef(0.3, 0.4, 0);///(3)把手臂接回身體
glRotatef(angle, 0, 0, 1);///(2)對Z軸旋轉
glTranslatef(-0.3, -0.4, 0);///(1)手臂旋轉中心放中心
glColor3f(1, 0, 0);///紅色
glRectf(0.3, 0.5, 0.7, 0.3);
glPushMatrix();
glTranslatef(0.7, 0.4, 0);///(3)把手軸接回去
glRotatef(angle, 0, 0, 1);///(2)對Z軸旋轉
glTranslatef(-0.7, -0.4, 0);///(1)手臂旋轉中心放中心
glColor3f(0, 1, 0);///綠色
glRectf(0.7, 0.5, 1.0, 0.3);///下手臂
glPopMatrix();
glPopMatrix();
glutSwapBuffers();
}
int main(int argc, char**argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutInitWindowSize(700, 700);///視窗大小
glutCreateWindow("week13 rect TRT");
glutMouseFunc(mouse);
glutMotionFunc(motion);
glutDisplayFunc(display);
glutMainLoop();
}
///
2-5
把紅色跟綠色手臂作複製且鏡像,作出第二條完整的手臂
///
#include <GL/glut.h>
float angle=0, oldX= 0;
void mouse(int button, int state, int x, int y){
oldX =x;
}
void motion(int x, int y ){
angle += (x-oldX);
oldX = x;
glutPostRedisplay();///讓GLUT重畫
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glColor3f(1, 1, 1);
glRectf(0.3, 0.5, -0.3, -0.5);///身體座標
glPushMatrix();///右半邊
glTranslatef(0.3, 0.4, 0);///(3)把手臂接回身體
glRotatef(angle, 0, 0, 1);///(2)對Z軸旋轉
glTranslatef(-0.3, -0.4, 0);///(1)手臂旋轉中心放中心
glColor3f(1, 0, 0);///紅色
glRectf(0.3, 0.5, 0.7, 0.3);
glPushMatrix();
glTranslatef(0.7, 0.4, 0);///(3)把手軸接回去
glRotatef(angle, 0, 0, 1);///(2)對Z軸旋轉
glTranslatef(-0.7, -0.4, 0);///(1)手臂旋轉中心放中心
glColor3f(0, 1, 0);///綠色
glRectf(0.7, 0.5, 1.0, 0.3);///下手臂
glPopMatrix();
glPopMatrix();
glPushMatrix();///左半邊
glTranslatef(-0.3, 0.4, 0);///(3)把手臂接回身體
glRotatef(angle, 0, 0, 1);///(2)對Z軸旋轉
glTranslatef(+0.3, -0.4, 0);///(1)手臂旋轉中心放中心
glColor3f(1, 0, 0);///紅色
glRectf(-0.3, 0.5, -0.7, 0.3);
glPushMatrix();
glTranslatef(-0.7, 0.4, 0);///(3)把手軸接回去
glRotatef(angle, 0, 0, 1);///(2)對Z軸旋轉
glTranslatef(+0.7, -0.4, 0);///(1)手臂旋轉中心放中心
glColor3f(0, 1, 0);///綠色
glRectf(-0.7, 0.5, -1.0, 0.3);///下手臂
glPopMatrix();
glPopMatrix();
glutSwapBuffers();
}
int main(int argc, char**argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutInitWindowSize(700, 700);///視窗大小
glutCreateWindow("week13 rect TRT");
glutMouseFunc(mouse);
glutMotionFunc(motion);
glutDisplayFunc(display);
glutMainLoop();
}
///
三.
3-1
為了讓關節有更多角度,對angle作陣列
///
#include <GL/glut.h>
float angle[20], oldX= 0;
int angleID=0;///0、1、2、3號關節
void keyboard(unsigned char key, int x, int y){
if( key=='0') angleID=0;
if( key=='1') angleID=1;
if( key=='2') angleID=2;
if( key=='3') angleID=3;
}
void mouse(int button, int state, int x, int y){
oldX =x;
}
void motion(int x, int y ){
angle[angleID] += (x-oldX);
oldX = x;
glutPostRedisplay();///讓GLUT重畫
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glColor3f(1, 1, 1);
glRectf(0.3, 0.5, -0.3, -0.5);///身體座標
glPushMatrix();///右半邊
glTranslatef(0.3, 0.4, 0);///(3)把手臂接回身體
glRotatef(angle[0], 0, 0, 1);///(2)對Z軸旋轉
glTranslatef(-0.3, -0.4, 0);///(1)手臂旋轉中心放中心
glColor3f(1, 0, 0);///紅色
glRectf(0.3, 0.5, 0.7, 0.3);
glPushMatrix();
glTranslatef(0.7, 0.4, 0);///(3)把手軸接回去
glRotatef(angle[1], 0, 0, 1);///(2)對Z軸旋轉
glTranslatef(-0.7, -0.4, 0);///(1)手臂旋轉中心放中心
glColor3f(0, 1, 0);///綠色
glRectf(0.7, 0.5, 1.0, 0.3);///下手臂
glPopMatrix();
glPopMatrix();
glPushMatrix();///左半邊
glTranslatef(-0.3, 0.4, 0);///(3)把手臂接回身體
glRotatef(angle[2], 0, 0, 1);///(2)對Z軸旋轉
glTranslatef(0.3, -0.4, 0);///(1)手臂旋轉中心放中心
glColor3f(1, 0, 0);///紅色
glRectf(-0.3, 0.5, -0.7, 0.3);
glPushMatrix();
glTranslatef(-0.7, 0.4, 0);///(3)把手軸接回去
glRotatef(angle[3], 0, 0, 1);///(2)對Z軸旋轉
glTranslatef(0.7, -0.4, 0);///(1)手臂旋轉中心放中心
glColor3f(0, 1, 0);///綠色
glRectf(-0.7, 0.5, -1.0, 0.3);///下手臂
glPopMatrix();
glPopMatrix();
glutSwapBuffers();
}
int main(int argc, char**argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutInitWindowSize(700, 700);///視窗大小
glutCreateWindow("week13 rect TRT");
glutKeyboardFunc(keyboard);
glutMouseFunc(mouse);
glutMotionFunc(motion);
glutDisplayFunc(display);
glutMainLoop();
}
///
沒有留言:
張貼留言