貼圖設定
linker setting
設定
cxcore210
cv210
highhgui210
Search
compiler
opencv include
linker
opencv lib
有錯誤重開就可以了
#include <opencv/highgui.h> ///for cvCvtColor()
#include <opencv/cv.h>
void myInit()
{
quad = gluNewQuadric();
IplImage * img = cvLoadImage("marvel.jpg"); ///OpenCV讀圖
cvCvtColor(img,img, CV_BGR2RGB); ///OpenCV轉色彩 (需要cv.h)
glEnable(GL_TEXTURE_2D); ///1. 開啟貼圖功能
GLuint id; ///準備一個 unsigned int 整數, 叫 貼圖ID
glGenTextures(1, &id); /// 產生Generate 貼圖ID
glBindTexture(GL_TEXTURE_2D, id); ///綁定bind 貼圖ID
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); /// 貼圖參數, 超過包裝的範圖T, 就重覆貼圖
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); /// 貼圖參數, 超過包裝的範圖S, 就重覆貼圖
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); /// 貼圖參數, 放大時的內插, 用最近點
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); /// 貼圖參數, 縮小時的內插, 用最近點
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, img->width, img->height, 0, GL_RGB, GL_UNSIGNED_BYTE, img->imageData);
} ///最後一行最難/最重要, 所貼圖影像的資料都設定好
貼圖
在.obj us...
前面加上g 加名稱
就可以正確的展示模型
2019電腦圖學 Computer Graphics 授課教師: 葉正聖 銘傳大學資訊傳播工程系 每週主題: 程式環境、點線面顏色、移動/旋轉/縮放與矩陣(Matrix)、階層性關節轉動(T-R-T)、做出機器人、打光、貼圖、glu/glut函式、鍵盤、滑鼠、計時器(timer)、讀入3D模型、粒子系統、聲音、特效、投影矩陣、攝影機與運鏡、機器人2.0、期末作品
2019年6月6日 星期四
2019年5月30日 星期四
啦啦啦
2019年5月23日 星期四
啦啦啦啦啦啦啦
glutTimerFunc(3000, timer, 0);
第一個3000是3秒的意思
這是計時器
glutPostRedisplay();
系統重繪畫面
內插法
float nowX=0;
float alpha = (t%33) / 33.0;
nowX = alpha* 1 + (1-alpha)* -1 ;
內插法在程式的寫法
後面都聽不懂好趕
2019年5月16日 星期四
啦啦啦啦啦啦啦啦啦啦
開一個貝殼專案
#include <stdio.h>
FILE * fout=NULL;
int main()
{
fout=fopen("filename.txt","w+");
for(int i=0;i<20;i++){
fprintf(fout,"Hellow World\n");
}
}
寫一個檔案把結果印到檔案內
#include <stdio.h>
FILE * fout2=NULL;
FILE * fin2=NULL;
float angle[20];
int main()
{
fout2=fopen("motion.txt","w+");
for(int i=0;i<20;i++){
fprintf(fout2,"%.2f ",angle[i]);
}
}
加入關節
glutInitWindowSize(600,600);
這行可以開比較大的視窗
2019年5月9日 星期四
啦啦啦啦啦啦啦啦
2019年5月2日 星期四
啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦
小考 TRT

複習TRT

乾坤大挪移

利用滑鼠去控制手臂
int jointID=1;
void motion(int x, int y)
{
if(jointID==1) angle1 = x;
if(jointID==2) angle2 = x;
if(jointID==3) angle3 = x;
if(jointID==4) angle4 = x;
display();
}
void keyboard(unsigned char key, int x, int y)
{
if(key=='1') jointID=1;
if(key=='2') jointID=2;
if(key=='3') jointID=3;
if(key=='4') jointID=4;
}
glutMotionFunc(motion);
glutKeyboardFunc(keyboard);
加關節可以選擇要動哪個關節
float angle[20];
可以用陣列去取代宣告的很多變數
int oldX, oldY;
void mouse(int button, int state, int x, int y)///Now5!!!!
{///當mouse按下去時,要記下!! 要記得要讓它有作用!!
oldX = x; oldY = y;///Now5!!!!
}
void motion(int x, int y)///Now2!!!
{
angle[jointID] += x -oldX;///Now4!!!!///Now5!!!!
oldX = x;///Now5!!!!
///if(jointID==1) angle1 = x;///Now2!!!///Now3!!!
///if(jointID==2) angle2 = x;///Now2!!!///Now3!!!
///if(jointID==3) angle3 = x;///Now2!!!///Now3!!!
///if(jointID==4) angle4 = x;///Now2!!!///Now3!!!
display();///Now2!!!
}
void keyboard(unsigned char key, int x, int y)
{///Now3!!!
/// jointID = key - '0';///雖然可以這樣簡化,但下面易看
if(key=='1') jointID=1;///Now3!!!
if(key=='2') jointID=2;///Now3!!!
if(key=='3') jointID=3;///Now3!!!
if(key=='4') jointID=4;///Now3!!!
}
int main(int argc, char**argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week11 TRT");
glutIdleFunc(display);///Now!!!!
glutDisplayFunc(display);
glutMotionFunc(motion);///Now2!!!
glutMouseFunc(mouse);///Now5!!!!
glutKeyboardFunc(keyboard);///Now3!!!
glutMainLoop();
}
這樣改之後滑鼠按壓就不會再順移了

複習TRT

乾坤大挪移

利用滑鼠去控制手臂
int jointID=1;
void motion(int x, int y)
{
if(jointID==1) angle1 = x;
if(jointID==2) angle2 = x;
if(jointID==3) angle3 = x;
if(jointID==4) angle4 = x;
display();
}
void keyboard(unsigned char key, int x, int y)
{
if(key=='1') jointID=1;
if(key=='2') jointID=2;
if(key=='3') jointID=3;
if(key=='4') jointID=4;
}
glutMotionFunc(motion);
glutKeyboardFunc(keyboard);
加關節可以選擇要動哪個關節
float angle[20];
可以用陣列去取代宣告的很多變數
int oldX, oldY;
void mouse(int button, int state, int x, int y)///Now5!!!!
{///當mouse按下去時,要記下!! 要記得要讓它有作用!!
oldX = x; oldY = y;///Now5!!!!
}
void motion(int x, int y)///Now2!!!
{
angle[jointID] += x -oldX;///Now4!!!!///Now5!!!!
oldX = x;///Now5!!!!
///if(jointID==1) angle1 = x;///Now2!!!///Now3!!!
///if(jointID==2) angle2 = x;///Now2!!!///Now3!!!
///if(jointID==3) angle3 = x;///Now2!!!///Now3!!!
///if(jointID==4) angle4 = x;///Now2!!!///Now3!!!
display();///Now2!!!
}
void keyboard(unsigned char key, int x, int y)
{///Now3!!!
/// jointID = key - '0';///雖然可以這樣簡化,但下面易看
if(key=='1') jointID=1;///Now3!!!
if(key=='2') jointID=2;///Now3!!!
if(key=='3') jointID=3;///Now3!!!
if(key=='4') jointID=4;///Now3!!!
}
int main(int argc, char**argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("week11 TRT");
glutIdleFunc(display);///Now!!!!
glutDisplayFunc(display);
glutMotionFunc(motion);///Now2!!!
glutMouseFunc(mouse);///Now5!!!!
glutKeyboardFunc(keyboard);///Now3!!!
glutMainLoop();
}
這樣改之後滑鼠按壓就不會再順移了
2019年4月25日 星期四
啦啦啦啦啦啦啦啦啦啦
期中考
複習 移動 旋轉 縮放
主題 T-R-T 旋轉 (改變旋轉軸)
主題 glut

這樣會公轉

這樣會自轉
#include <Gl/glut.h>
float angle=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glTranslatef(0,0.5,0);
glutSolidTeapot(0.3);
glPopMatrix();
glPushMatrix();
glTranslatef(0.5,0.625,0);
glRotatef(angle,0,0,1);
glTranslatef(0.6,0,0);
glRotatef(-90,0,1,0);
glutSolidCone(0.2,0.6,30,30);
glPopMatrix();
glutSwapBuffers();
}
void motion(int x,int y)
{
angle=x;
display();
}
int main(int argc,char**argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("week04");
glutDisplayFunc(display);
glutMotionFunc(motion);
glutMainLoop();
}
複習 移動 旋轉 縮放
主題 T-R-T 旋轉 (改變旋轉軸)
主題 glut

這樣會公轉

這樣會自轉
#include <Gl/glut.h>
float angle=0;
void display()
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glTranslatef(0,0.5,0);
glutSolidTeapot(0.3);
glPopMatrix();
glPushMatrix();
glTranslatef(0.5,0.625,0);
glRotatef(angle,0,0,1);
glTranslatef(0.6,0,0);
glRotatef(-90,0,1,0);
glutSolidCone(0.2,0.6,30,30);
glPopMatrix();
glutSwapBuffers();
}
void motion(int x,int y)
{
angle=x;
display();
}
int main(int argc,char**argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_DEPTH);
glutCreateWindow("week04");
glutDisplayFunc(display);
glutMotionFunc(motion);
glutMainLoop();
}
可以做出這樣的效果
滑鼠可以操控圓錐手手
2019年4月11日 星期四
啦啦啦啦
2019年3月28日 星期四
啦啦啦啦啦

改變顏色
基本程式碼
#include <GL/glut.h>
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glutSolidTeapot(0.3);
glutSwapBuffers();
}
int main(int argc,char**argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow("Week06");
glutDisplayFunc(display);
glutMainLoop();
}
加上一些剪貼的就可以做出光影效果
宣告
const GLfloat light_ambient[] = { 0.0f, 0.0f, 0.0f, 1.0f };
const GLfloat light_diffuse[] = { 1.0f, 1.0f, 1.0f, 1.0f };
const GLfloat light_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };
const GLfloat light_position[] = { 2.0f, 5.0f, 5.0f, 0.0f };
const GLfloat mat_ambient[] = { 0.7f, 0.7f, 0.7f, 1.0f };
const GLfloat mat_diffuse[] = { 0.8f, 0.8f, 0.8f, 1.0f };
const GLfloat mat_specular[] = { 1.0f, 1.0f, 1.0f, 1.0f };
const GLfloat high_shininess[] = { 100.0f };
在glutMainLoop();之前加
設定
glClearColor(1,1,1,1);
glEnable(GL_CULL_FACE);
glCullFace(GL_BACK);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LESS);
glEnable(GL_LIGHT0);
glEnable(GL_NORMALIZE);
glEnable(GL_COLOR_MATERIAL);
glEnable(GL_LIGHTING);
glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient);
glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse);
glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);
glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
glMaterialfv(GL_FRONT, GL_SHININESS, high_shininess);
就可以做出
做出3D模型
在notepad++開啟t開頭的那個複製#include "glm.h"
接著尋找glm
搞很久就可以搞出來了
2019年3月21日 星期四
2019年3月14日 星期四
啦啦啦啦啦啦啦啦
2019年3月7日 星期四
2019年2月21日 星期四
喔
去網路上搜尋 freeglut windows
點擊 freeglut Windows Development Libraries - Transmission Zero
下載MinGW版本
解壓縮放桌面
打開資料夾點擊lib
複製libfreeglut.a
下載MinGW版本
解壓縮放桌面
打開資料夾點擊lib
複製libfreeglut.a
貼上後更名為libglut32.a
新增glut專案
檔案放桌面
檔案放桌面
接下來貼上C:\Users\user\Desktop\freeglut
新增OpenGL專案檔案放在桌面
接著按執行
接著按執行
就會有三角形出現開始旋轉
訂閱:
文章 (Atom)





























