1. Trang chủ
  2. » Công Nghệ Thông Tin

tài liệu tổng hợp đồ họa máy tính bài tập open gl

34 534 3
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 34
Dung lượng 273,4 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Quan sát trong không gian ba chi u ..... Trong pane trái, ch n cây con linker và ch n Input.. Hãy nh p các dòng sau ây vào tr ng Additional Dependencies trong pane ph i.. Bây gi Visual

Trang 2

M C L C

Cài t OpenGL 3

Bài I H th ng h a máy tính 4

Bài II Các thu t toán c s v h a hai chi u 8

Bài III Thu c tính hình v 13

Bài IV Bi n i hình h c hai ba chi u 16

Bài V Quan sát trong không gian ba chi u 18

Bài VI Mô hình hóa b m t v t th 21

Bài VII Lo i b m t khu t 25

Bài VIII Chi u sáng và tô bóng 32

Trang 3

dvduc-2007/08

2

Trang 4

Cài t OpenGL

I Visual C/C++ 6.0

th c hành c các bài t p trong tài li u này, ta c n ph i cài t Visual C/C++ 6.0 và các th

vi n OpenGL Vi c cài t chúng lên máy tính c th c hi n nh h ng d n sau ây:

1 Cài t Microsoft Visual Studio 6.0 n u ch a có nó trong máy tính.

2 Cài t OpenGL

a Ki m tra xem OpenGL v1.1 software runtime có s n trong WinXP, Windows 2000,

Windows 98, Windows 95 (OSR2) và Windows NT hay ch a?

b N u ch a có, hãy download t Internet theo a ch :http://download.microsoft.com/download/win95upg/info/1/W95/EN-US/Opengl95.exe

c Ch y t p Opengl95.exe v a t i v có OpenGL Libraries và header files sau ây:

opengl32.lib glu32.lib gl.h glu.h

3 Cài t GLUT

a Hãy download t Internet: http://www.xmission.com/~nate/glut/glut-3.7.6-bin.zip

b Cài t theo h ng d n trong t p readme, và sao chép các t p nh ch d n sau:

glut32.dll vào %WinDir%\System, ví d : C:\windows\system

glut32.lib vào $(MSDevDir)\ \ \VC98\lib, ví d : C:\Program Files\Microsoft Visual Studio\VC98\Lib

glut.h vào $(MSDevDir)\ \ \VC98\include\GL, ví d : C:\Program Files\Microsoft Visual Studio\VC98\Include\gl

Phát tri n ch ng trình ng d ng b ng Visual C++ và OpenGL

a Kh i ng Visual C++ b ng th c n File-New-Projects t o d án m i Win32

Console Application.

b Ch n An empty project trong màn hình ti p theo.

c Chuy n n th c n Project-Settings trong IDE Ch n Link tab và chèn opengl32.lib,

glu32.lib, glut32.lib, và n u project s d ng GLUI thì g p c glui32.lib Các t p th vi n

này c n có có trong danh m c Microsoft Visual Studio\VC98\lib hay trong danh m c c a

project hi n hành

d Ki m tra vi c cài t b ng cách nh p m t ch ng trình n gi n GLUT nh ví d 1.1

e Chú ý r ng ta c n chèn các l nh #include <GL/glut.h> và #include <GL/gl.h> vào u

ch ng trình

f D ch và ch y th ch ng trình

g S a l i n u có

N u xu t hi n thông báo l i unexpected end of file while looking for precompiled header

directive , hãy t t thu c tính precompiled headers b ng cách ch n Projects -> Settings,

chuy n n C++ tab, ch n Precompiled Headers t Category listbox, sau ó ch n phím radio "Not using precompiled headers"

II Microsoft Visual Studio NET

1 Th c hi n cài t OpenGL t ng t nh trên ây

2 S a i Project Properties:

a Ch n th c n Project ( Project > * Properties) c a Visual Studio m trang h p tho i

b Ch n combo box Configuration , ch n All Configuration

c Trong pane trái, ch n cây con linker và ch n Input Hãy nh p các dòng sau ây vào

tr ng Additional Dependencies trong pane ph i

d Bây gi Visual Studio bi t tìm GLUT âu Nh n phím OK

Trang 6

void myKeyboard(unsigned char c, int x, int y) {

void main(int argc, char **argv) {

Trang 7

glFlush();

} void myMouse(int button, int state, int x, int y) {

glVertex2i(x, y);

glEnd();

} glFlush();

} void myInit(void) {

glutInit(&argc, argv);

glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);

glutInitWindowSize(640,480);

glutInitWindowPosition(100,150);

Trang 9

float savex, savey;

const int n = 50; // number of segments making up arc float angle = 0;

float angleInc = 360.0 * PI / (180 * n); // angle increment in radians savex = point.x;

Trang 10

drawCircle(point, 100.0);

glFlush();

} void myReshape(int w, int h) { // window is reshaped

glViewport (0, 0, w, h); // update the viewport glMatrixMode(GL_PROJECTION);

int dx, dy, incrE, incrNE, d, x, y;

dx=x1-x0;

dy=y1-y0;

d=2*dy-dx; //dstart incrE=2*dy; //DE incrNE=2*(dy-dx); //DNE x=x0; y=y0;

drawPoint(x,y);

while(x<x1)

{ if(d<=0) // select E

{ d+=incrE;

Trang 11

{ // select NE d+=incrNE;

x++; y++;

} drawPoint(x,y);

} }

glViewport (0, 0, w, h); // update the viewport glMatrixMode(GL_PROJECTION);

const int screenHeight = 480;

const int screenWidth = 640;

int startflag = 1;

class GLintPoint { public:

GLint x, y;

};

Trang 12

void drawLine(GLint x1, GLint y1, GLint x2, GLint y2) {

static GLintPoint List[2];

glClear(GL_COLOR_BUFFER_BIT);

glFlush();

} void main(int argc, char** argv) {

Trang 14

Bài III Thu c tính hình v

Trang 15

GLubyte mask[]={ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x03, 0x80, 0x01, 0xC0, 0x06, 0xC0, 0x03, 0x60, 0x04, 0x60, 0x06, 0x20, 0x04, 0x30, 0x0C, 0x20, 0x04, 0x18, 0x18, 0x20, 0x04, 0x0C, 0x30, 0x20, 0x04, 0x06, 0x60, 0x20, 0x44, 0x03, 0xC0, 0x22, 0x44, 0x01, 0x80, 0x22, 0x44, 0x01, 0x80, 0x22, 0x44, 0x01, 0x80, 0x22, 0x44, 0x01, 0x80, 0x22, 0x44, 0x01, 0x80, 0x22, 0x44, 0x01, 0x80, 0x22, 0x66, 0x01, 0x80, 0x66, 0x33, 0x01, 0x80, 0xCC, 0x19, 0x81, 0x81, 0x98, 0x0C, 0xC1, 0x83, 0x30, 0x07, 0xe1, 0x87, 0xe0, 0x03, 0x3f, 0xfc, 0xc0, 0x03, 0x31, 0x8c, 0xc0, 0x03, 0x33, 0xcc, 0xc0, 0x06, 0x64, 0x26, 0x60, 0x0c, 0xcc, 0x33, 0x30, 0x18, 0xcc, 0x33, 0x18, 0x10, 0xc4, 0x23, 0x08, 0x10, 0x63, 0xC6, 0x08, 0x10, 0x30, 0x0c, 0x08, 0x10, 0x18, 0x18, 0x08, 0x10, 0x00, 0x00, 0x08};

Trang 16

Bài t p 3.1

V hình khép kín v i các m u tônh sau:

Trang 17

glPopMatrix(); // restore the old matrix glFlush();

} void main(int argc, char** argv) {

Trang 18

} void myDisplay(void) {

Cho tam giác A(3, 1), B(1, 3), C(3,3)

1 Hãy xác nh t a m i c a các nh tam giác sau khi xoay m t góc 900 ng c chi u kim

ng h xung quanh i m P(2, 2)

2 Phóng to tam giác lên hai l n, gi nguyên v trí c a i m C Tính t a các nh tam giác sau khi bi n hình

Trang 19

glClearColor (0.0, 0.0, 0.0, 0.0);

} void myInit(void) {

glClear(GL_COLOR_BUFFER_BIT);

glutWireCube(1); // Ve lap phuong glFlush();

} void main(int argc, char** argv) {

glClearColor (0.0, 0.0, 0.0, 0.0);

}

Trang 20

void myInit(void) {

V l p ph ng trong kh i quan sát ph i c nh t ng quát (Frustum)

#include <GL/glut.h> // GLUT

#include <GL/glu.h> // GLU

#include <GL/gl.h> // OpenGL void init(void)

{ glClearColor (1.0, 1.0, 1.0, 0.0);

} void myDisplay(void) {

Trang 21

dvduc-2007/08

20

glFlush ();

} void myReshape(int w, int h) {

glViewport (0, 0, (GLsizei) w, (GLsizei) h);

glutInit(&argc, argv); // OpenGL initializations glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);

glutInitWindowSize(400, 400); // create a 400x400 window glutInitWindowPosition(0, 0); // in the upper left glutCreateWindow("Thi du 5.3"); // create the window glutDisplayFunc(myDisplay); // setup callbacks glutReshapeFunc(myReshape);

init();

glutMainLoop(); // start it running return 0; // ANSI C expects this }

Trang 22

Bài VI Mô hình hóa ba chi u

Thí d 6.1

V ng cong Bézier v i 4 i m i u khi n nh sau:

{ -4.0, -4.0, 0.0}, { -2.0, 4.0, 0.0},{2.0, -4.0, 0.0}, {4.0, 4.0,0.0}

#include <GL/glut.h> // GLUT

#include <GL/glu.h> // GLU

#include <GL/gl.h> // OpenGL

#include <stdlib.h>

GLfloat ctrlpoints[4][3] = {

{ -4.0, -4.0, 0.0}, { -2.0, 4.0, 0.0}, {2.0, -4.0, 0.0}, {4.0, 4.0, 0.0}};

void init(void) {

glEnd();

glFlush();

} void reshape(int w, int h) {

glViewport(0, 0, (GLsizei) w, (GLsizei) h);

glLoadIdentity();

}

Trang 23

V m t cong Bézier v i t p i u khi n cho tr c.

void display(void) {

for (i = 0; i <= 30; i++) glEvalCoord2f((GLfloat)i/30.0, (GLfloat)j/8.0);

glEnd();

glBegin(GL_LINE_STRIP);

for (i = 0; i <= 30; i++) glEvalCoord2f((GLfloat)j/8.0, (GLfloat)i/30.0);

glEnd();

} glPopMatrix ();

glFlush();

}

Trang 24

void init(void){

glViewport(0, 0, (GLsizei) w, (GLsizei) h);

glMatrixMode(GL_PROJECTION);

glLoadIdentity();

if (w <= h) glOrtho(

else glOrtho(

glMatrixMode(GL_MODELVIEW);

glLoadIdentity();

} int main(in{

)1(3) t t

)1(

3t t

glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4, &

4.0*(GLfloat)h/(GLfloat)w, 4.0*(GLfloat)h/(GLfloat)w, 4.0*(GLfloat)w/(GLfloat)h, 4.0*(GLfloat)w/(GLfloat)h,

glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);

3

V V V V t

glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4, &ctrlpoints[0][0][0]);

4.0*(GLfloat)h/(GLfloat)w, 4.0*(GLfloat)h/(GLfloat)w, 4.0*(GLfloat)w/(GLfloat)h, 4.0*(GLfloat)w/(GLfloat)h, -4.0, 4.0,

glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);

Trang 25

M t ng cong Bézier b c 3 có b n i m i u khi n P0=(2, 2, 0), P1=(4, 2, 2), P2=(8, 6, 4),

P3=(12, 0, 0) Gi s R(t) là ng cong Bézier b c hai liên t c c p C1 t i P3 c a ng cong trên

ng th i gi s R0, R1 và R2 là các i m i u khi n c a ng cong này Hãy xác nh R0 và R1

3 2 1 0 2 2

2 '

3)23(3)143(3)1(3)(

V V V V t t

t t

t t

t Q

)(

3 0

033)0(' )(

3 3

300)1(

G F E D Q

C D D

C B A P

Trang 26

Bài VII Lo i b m t khu t

glClearColor (1.0, 1.0, 1.0, 0.0);

} void myDisplay(void) {

Trang 27

#include <GL/glut.h> // GLUT

#include <GL/glu.h> // GLU

#include <GL/gl.h> // OpenGL

#include <stdio.h>

#include <math.h>

int a[3]={1.0,1.0,1.0}, b[3]={1.0,-1.0,1.0}, c[3]={-1.0,-1.0,1.0}, d[3]={-1.0,1.0,1.0}, e[3]={1.0,1.0,-1.0}, f[3]={1.0,-1.0,-1.0}, g[3]={-1.0,-1.0,-1.0}, h[3]={-1.0,1.0,-1.0};

float angle_x=0.0;

float angle_y=0.0;

void drawcube(void) { glClear(GL_COLOR_BUFFER_BIT);

Trang 28

glViewport (0, 0, (GLsizei) w, (GLsizei) h);

Trang 29

glutInit(&argc, argv);

glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);

glutInitWindowSize(400, 400); // create a 400x400 window glutInitWindowPosition(0, 0); // in the upper left glutCreateWindow("Thi Du 7.2"); // create the window glutDisplayFunc(myDisplay); // setup callbacks glutKeyboardFunc(keyboard);

glutReshapeFunc(myReshape);

glutMainLoop(); // start it running return 0; // ANSI C expects this }

Thí d 7.3

V và tô màu kh i a di nv i các nh cho tr c và b sung các phím x, y xoay kh i a di n

#include <GL/glut.h> // GLUT

#include <GL/glu.h> // GLU

#include <GL/gl.h> // OpenGL

#include <stdio.h>

#include <math.h>

int a[3]={0.0,0.0,0.0}, b[3]={1.0,-1.0,1.0}, c[3]={-1.0,-1.0,1.0}, d[3]={-1.0,1.0,1.0}, e[3]={1.0,1.0,-1.0}, f[3]={1.0,-1.0,-1.0}, g[3]={-1.0,-1.0,-1.0}, h[3]={-1.0,1.0,-1.0};

float angle_x=0.0;

float angle_y=0.0;

void drawcube(void) { glClear(GL_COLOR_BUFFER_BIT);

glMatrixMode(GL_MODELVIEW);

glRotatef(angle_y, 0.0, 1.0, 0.0);

glRotatef(angle_x, 1.0, 0.0, 0.0);

// - glColor3f(1.0, 0.0, 0.0);//red glBegin(GL_POLYGON);

glVertex3iv(d);

glVertex3iv(h);

Trang 30

glVertex3iv(g);

glVertex3iv(c);

glEnd();

glColor3f(0.0, 1.0, 0.0); // green glBegin(GL_POLYGON);

Trang 31

dvduc-2007/08

30

{ glClearColor(1., 1., 1., 1.0);

glViewport (0, 0, (GLsizei) w, (GLsizei) h);

glutInit(&argc, argv);

glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB| GLUT_DEPTH);

glutInitWindowSize(400, 400); // create a 400x400 window glutInitWindowPosition(0, 0); // in the upper left glutCreateWindow("Thi Du 7.3"); // create the window glutDisplayFunc(myDisplay); // setup callbacks

Trang 32

glutReshapeFunc(myReshape);

glutMainLoop(); // start it running return 0; // ANSI C expects this}

Bài t p 7.1

V và tô màu hình chóp cha={1.0,0.0,0.0}, b={0.0,0.0,

B sung phím x, y v

Bài t p 7.2

V và tô màu hình chóp cha={

p 7.2

à tô màu hình chóp cha={2.0,0.0,0.0}, b={0.0,0.0,

l p ph ng v i kích thsung phím x, y và z

à z xoay hình chóp

à tô màu hình chóp ch nh t v i các nh nh.0,0.0,0.0}, b={0.0,0.0,-

nh t v i các nh nh-2.0}, c={-2.0,0.0,

Trang 33

#include <GL/glut.h> // GLUT

#include <GL/glu.h> // GLU

#include <GL/gl.h> // OpenGL void init(void)

glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);

glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);

glLightfv(GL_LIGHT0, GL_POSITION, light_position);

glEnable(GL_LIGHTING);

glEnable(GL_LIGHT0);

glEnable(GL_DEPTH_TEST);

} void display(void) {

glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glutSolidSphere (1.0, 20, 16);

glFlush ();

} void reshape (int w, int h) {

glViewport (0, 0, (GLsizei) w, (GLsizei) h);

glMatrixMode (GL_PROJECTION);

glLoadIdentity();

if (w <= h) glOrtho(-1.5, 1.5, -1.5*(GLfloat)h/(GLfloat)w, 1.5*(GLfloat)h/(GLfloat)w, -10.0, 10.0); else

glOrtho (-1.5*(GLfloat)w/(GLfloat)h,1.5*(GLfloat)w/(GLfloat)h, -1.5, 1.5, -10.0, 10.0); glMatrixMode(GL_MODELVIEW);

glLoadIdentity();

} int main(int argc, char** argv) {

Ngày đăng: 23/10/2014, 22:02

HÌNH ẢNH LIÊN QUAN

Hình chóp. - tài liệu tổng hợp đồ họa máy tính bài tập open gl
Hình ch óp (Trang 32)

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w