Điểm: Tập các điểm ba chiều nhằm biểu diễn đối tượng.
typedef struct tagPoint3D { double x, y, z;
} Point3D;
Wireframe: tập các điểm ba chiều và cạnh nối giữa
các điểm nhằm biểu diễn đối tượng.
Sử dụng mảng, DSLK hoặc tập hợp để lưu trữ các điểm và cạnh của đối tượng .
typedef struct tagEdge3D { int idEdge;
Point3D end1, end2; //hai đỉnh của cạnh data edgeProperties; //tính chất của cạnh } Edge3D;
typedef struct tagWirreFrame { //có thể chứa thêm các mặt. int numVertices, numVerEdges; //số đỉnh, số cạnh
Point3D arrPoints[]; //mảng chứa tập đỉnh Edge3D arrEdges[]; //mảng chứa tập cạnh }
One Possible Data Structure:
Point3D = record x, y, z : real; end ; Figure = array (1..8, 1..8) of Point3D; Map = array (1..8, 1..8) of boolean;
Map(i, j) = true if i, j connected else Map(i, J) = false Example Map(1, 4) = true but Map(1, 8) = false
31
for I in 1..8 loop for J in 1..8 loop if Map (I,J) then Draw line between point I and point J
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt( eyeX, eyeY, eyeZ, lookX, lookY, lookZ,
upX, upY, upZ);
eye[XYZ]: vị trí camera trong toạ độ thực.
look[XYZ]: điểm nhìn của camera.
up[XYZ]: vector xác định trục đứng của camera.
Tạo ma trận nhằm biến đổi điểm trong thế giới thực vào hệ toạ độ camera.
Camera at origin.
Nhìn theo hướng -Z (âm Z).
33
void SetUpViewing() {
// The viewport isn’t a matrix, it’s just state... glViewport( 0, 0, window_width, window_height ); // Set up camera->screen transformation first glMatrixMode( GL_PROJECTION );
glLoadIdentity();
gluPerspective( 60, 1, 1, 1000 ); // fov, aspect, near, far
// Set up the model->camera transformation glMatrixMode( GL_MODELVIEW );
gluLookAt( 3, 3, 2, // eye point
0, 0, 0, // look at point 0, 0, 1 ); // up vector
glRotatef( theta, 0, 0, 1 ); // rotate the model glScalef( zoom, zoom, zoom ); // scale the model }
Mô hình kinh điển trong đồ họa 3 chiều (tương tự như ảnh Lena trong xử lý ảnh). Do Martin Newell xây dựng 1975.
Dữ liệu là tập các tọa độ 3 chiều.
35
1. Thực hành: cài đặt hiển thị điểm, line, polyline với OpenGL. Sử dụng GLUT với Console Application hoặc Windows Application.