sách gpt4 ăn đã đi

opengl vẽ cờ đỏ năm sao

In lại Tác giả: qq735679552 Thời gian cập nhật: 29-09-2022 22:32:09 28 4
mua khóa gpt4 giày nike

CFSDN nhấn mạnh vào giá trị tạo ra nguồn mở và chúng tôi cam kết xây dựng nền tảng chia sẻ tài nguyên để mọi nhân viên CNTT có thể tìm thấy thế giới tuyệt vời của bạn tại đây.

Bài blog OpenGL vẽ cờ đỏ năm sao này của CFSDN được tác giả sưu tầm và biên soạn. Nếu các bạn quan tâm tới bài viết này thì nhớ like nhé.

Ví dụ trong bài viết chia sẻ code cụ thể để vẽ cờ đỏ năm sao trong opengl để các bạn tham khảo.

Dụng cụ và thiết bị chính.

Visual Studio C++2015 。

Thư viện opengl môi trường Windows 10.

Các bước vận hành.

1. Các thông số khác nhau của cờ đỏ năm sao.

1) Cờ màu đỏ, hình chữ nhật, tỉ lệ chiều dài và chiều cao là 3:2. 2) Thông số vị trí của năm ngôi sao: ·Để thuận tiện cho việc xác định vị trí của năm ngôi sao, trước tiên hãy chia bề mặt cờ thành bốn hình chữ nhật bằng nhau, chia hình chữ nhật phía trên bên trái thành mười phần bằng nhau lên xuống và chia bên trái và thành mười lăm phần bằng nhau. Như được hiển thị bên dưới:

opengl vẽ cờ đỏ năm sao

·Tâm điểm của ngôi sao lớn năm cánh nằm ở năm điểm phía trên và năm điểm phía dưới, năm điểm ở bên trái và mười điểm ở bên phải của hình chữ nhật. Cách vẽ là: lấy điểm này làm tâm đường tròn và chia bán kính thành ba phần bằng nhau để vẽ đường tròn. Trên đường tròn này, xác định năm điểm cách đều, một trong số đó phải nằm ngay phía trên đường tròn. Sau đó nối hai trong số năm điểm cách nhau sao cho chúng tạo thành một đường thẳng. Đường viền bên ngoài được hình thành bởi năm đường thẳng này chính là ngôi sao năm cánh lớn cần thiết. Một trong những ngôi sao năm cánh hướng lên trên.

·Tâm điểm của bốn ngôi sao năm cánh nhỏ, điểm đầu tiên là hai điểm trên và dưới tám, mười và năm điểm tính từ bên trái và bên phải của hình chữ nhật, điểm thứ hai là bốn điểm tính từ trên xuống và sáu điểm tính từ phía dưới, bên trái mười hai điểm và bên phải ba điểm, và điểm thứ ba ở trên cùng Bảy điểm dưới 3, bên trái mười hai điểm và ba điểm ở bên phải. Điểm thứ tư ở trên chín điểm dưới 1, bên trái mười hai điểm. năm điểm bên phải. Cách vẽ là: lấy bốn điểm trên làm tâm đường tròn, chia bán kính thành các phần bằng nhau và lần lượt vẽ bốn đường tròn. Xác định năm điểm cách đều nhau trên mỗi đường tròn, trong đó có một điểm nằm trên đường nối tâm ngôi sao năm cánh lớn với tâm của bốn đường tròn trên. Sau đó sử dụng phương pháp tương tự để tạo thành ngôi sao năm cánh lớn để tạo thành ngôi sao năm cánh nhỏ. Mỗi ngôi sao trong số bốn ngôi sao năm cánh nhỏ có một đầu hướng về tâm của ngôi sao năm cánh lớn.

2. Vẽ một ngôi sao năm cánh lớn.

opengl vẽ cờ đỏ năm sao

Vì glut không thể vẽ đa giác lõm dựa trên các đỉnh nên tôi chỉ có thể tháo rời đồ họa và vẽ từng bước một. Phương pháp tôi áp dụng là phân tách ngôi sao năm cánh thành 10 hình tam giác, lấy điểm trung tâm của ngôi sao năm cánh làm đỉnh, để tôi có thể sử dụng kiểu nguyên thủy hình học GL_TRIANGLE_FAN (chuỗi tam giác nối thành hình quạt) cho làm đầy. Đối với mỗi ngôi sao năm cánh, chỉ có hai thông số chúng ta phải biết, điểm trung tâm và một đỉnh bên ngoài.

opengl vẽ cờ đỏ năm sao

Lưu ý trong quá trình vẽ liên tục các hình tam giác, trọng tâm là tìm tọa độ điểm B dựa vào điểm A hoặc ngược lại, khi đó theo định lý sin ta tìm được độ dài cạnh b, theo góc giữa hai cạnh. BC và trục x và góc 36°, ta thu được tọa độ của điểm A. Sau đó, có thể lấy được tọa độ của hai điểm còn lại của mỗi tam giác và vẽ được một ngôi sao năm cánh.

3. Vẽ một ngôi sao năm cánh nhỏ.

Một đỉnh của ngôi sao năm cánh nhỏ phải nằm trên đường nối ngôi sao năm cánh nhỏ và ngôi sao năm cánh lớn. Sau khi xác định được đỉnh này thì có thể vẽ theo phương pháp vẽ ngôi sao năm cánh lớn. ngôi sao. Theo đường nối tâm của các ngôi sao năm cánh lớn và nhỏ, đồng thời chúng ta cũng biết được bán kính đường tròn ngoại tiếp của ngôi sao năm cánh nhỏ, chúng ta dễ dàng tìm được tọa độ các góc của đỉnh.

4. Đồ họa sẽ không bị biến dạng khi kích thước cửa sổ thay đổi.

Nếu phần này không được xem xét, cờ đỏ năm sao sẽ giãn ra và biến dạng khi cửa sổ được thu nhỏ lại. Vì vậy, các hàm glutReshapeFunc và glOrtho đã được thêm vào. glutReshapFunc được sử dụng để chỉ định chức năng vẽ lại để thay đổi kích thước cửa sổ. glOrtho tạo khối xem song song trực giao. Hàm ChangeSize là một thao tác được thực hiện khi kích thước cửa sổ thay đổi.

Mã này như sau:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#include "gl/glut.h"
#include
hằng số GLfloat PI = 3,1415926f; //Định nghĩa số pi
vô hiệu DrawStar(GLfloat px, GLfloat py, GLfloat vx, GLfloat vy, số nguyên lá cờ) //Vị trí và tọa độ đỉnh ngoài của ngôi sao năm cánh
{
  glBegin(GL_TRIANGLE_FAN); // Vẽ một chuỗi các hình tam giác
  GLfloat vtx[12], vty[12]; //1 điểm trung tâm, 10 đỉnh, đỉnh đầu và đỉnh cuối giống nhau, trong đó chỉ số lẻ là đỉnh ngoài và chỉ số chẵn là đỉnh trong
  vtx[0] = px; //Điểm trung tâm đã biết
  vty[0] = py;
  vtx[1] = vx; // Đỉnh ngoài đầu tiên được biết
  vty[1] = bạn;
  Chiều dài GLfloat1 = vuông ((px - vx)*(px - vx) + (py - vy)*(py - vy)); // Độ dài từ tâm tới đỉnh ngoài
  Chiều dài GLfloat2 = chiều dài1* tội lỗi (0,1*PI) / tội lỗi (126.0 / 180 * PI);
  //Tính tất cả các đỉnh còn lại
  gấp đôi nhiệt = vì mục đích ((vty[1] - vty[0]) / (vtx[1] - vtx[0])); //Góc giữa đường thẳng nối đỉnh với điểm giữa và trục x
  nếu như (lá cờ)
  init = init - PI;
  ( số nguyên tôi = 2; tôi < 12; tôi++) {
  init = init - 0,2*PI;
  nếu như (tôi % 2 == 0) { //đỉnh bên trong
  vtx[i] = chiều dài2* cos (init) + vtx[0];
  vty[i] = chiều dài2* tội lỗi (khởi tạo) + vty[0];
  }
  khác { //đỉnh ngoài
  vtx[i] = chiều dài1* cos (init) + vtx[0];
  vty[i] = chiều dài1* tội lỗi (khởi tạo) + vty[0];
  }
  }
  ( số nguyên tôi = 0; tôi < 12; tôi++) // Đặt đỉnh
  glVertex3f(vtx[i], vty[i], 0,5);
  glEnd();
}
vô hiệu trưng bày()
{
  glXóa(GL_COLOR_BUFFER_BIT); //Hoàn thành nhiệm vụ xóa cửa sổ
  //vẽ cờ đỏ
  glColor3f(1, 0, 0); //Xác định màu sử dụng khi vẽ đối tượng: đỏ
  glBegin(GL_QUADS);
  glVertex3f(-0,75, 0,5, 0,5); //Hình chữ nhật 0,5 nằm trên mặt phẳng z=0,5 là giá trị tương đối
  glVertex3f(0,75, 0,5, 0,5);
  glVertex3f(0,75, -0,5, 0,5);
  glVertex3f(-0,75, -0,5, 0,5);
  glEnd();
  //vẽ ngôi sao
  glColor3f(1.0, 1.0, 0.0); //Đặt màu thành màu vàng
  GLfloat px[5] = { -1,5 / 3,-0,75 / 3,-0,75 / 5,-0,75 / 5,-0,75 / 3 };
  GLfloat py[5] = { 0,25,0,4,0,3,0,15,0,05 };
  GLfloat vx[5] = { -1,5 / 3 };
  GLfloat vy[5] = {0,4}; // Điểm trung tâm của năm sao và các đỉnh được chỉ định
  //Tính các đỉnh của 4 ngôi sao còn lại
  ( số nguyên tôi = 1; tôi < 5; tôi++) {
  vx[i] = px[i]-0,05* cos ( vì mục đích ((py[0] - py[i]) / (px[0] - px[i])));
  vy[i] = py[i]-0,05* tội lỗi ( vì mục đích ((py[0] - py[i]) / (px[0] - px[i])));
  }
  //vẽ tranh
  DrawStar(px[0], py[0], vx[0], vy[0], 0);
  DrawStar(px[1], py[1], vx[1], vy[1], 1);
  DrawStar(px[2], py[2], vx[2], vy[2], 1);
  DrawStar(px[3], py[3], vx[3], vy[3], 1);
  DrawStar(px[4], py[4], vx[4], vy[4], 1);
  trao đổi bộ đệm // hoán đổi bộ đệm
}
vô hiệu thay đổiKích thước(GLsizei w, GLsizei h)
{
  nếu như (h == 0)
  h = 1;
  glViewport(0, 0, w, h);
  glMatrixMode(GL_PROJECTION);
  Tải xuống
  số nguyên dis = w < h ? w : h;
  glViewport(0, 0, dis, dis);
  glTrực tiếp(-1,5, 1,5, -1,5, 1,5, -1,5, 1,5);
  nếu như (w <= chiều cao)
  glOrtho(-1.0, 1.0, 1.0,1.0* h / w, 1.0, -1.0);
  khác
  glOrtho(-1.0, 1.0 * w / h, 1.0, 1.0, 1.0, -1.0);
 
  glMatrixMode(GL_MODELVIEW);
  Tải xuống
}
số nguyên chủ yếu ( số nguyên đối số, char *argv[])
{
  glutInit(&argc,argv); //Khởi tạo thư viện hàm glut
  glutInitDisplayMode(GLUT_RGB|GLUT_DOUBLE); // Chỉ định chế độ hiển thị cửa sổ Bộ đệm kép chế độ RGB sẽ được tạo bởi hàm glutCreateWindow
  glutInitWindowPosition(10, 10); //Xác định vị trí cửa sổ, vị trí một góc của cửa sổ so với toàn bộ màn hình
  glutInitWindowSize(400,400); // Chỉ định kích thước cửa sổ, đây chỉ là lời nhắc nhở và có thể bị che bởi các cửa sổ khác.
  glutCreateWindow( "Ứng dụng GLUT đơn giản" ); //Mở cửa sổ cài đặt này sẽ không được hiển thị trước khi vào glutMainLoop.
 
  glOrtho(1.0, 1.0, 1.0, 1.0, 1.0, -1.0);
  glutReshapeFunc(thay đổi kích thước); // Đăng ký hàm gọi lại khi kích thước cửa sổ thay đổi
  glXóa(GL_COLOR_BUFFER_BIT); //Hoàn thành nhiệm vụ xóa cửa sổ
  glutDisplayFunc(hiển thị); //Hàm gọi lại liên quan đến đăng ký, chỉ định hàm được gọi khi nội dung cửa sổ cần vẽ lại
  glutMainLoop(); //Vào vòng xử lý sự kiện GLUT và không bao giờ quay lại
 
  trở lại 0;
}

Kết quả thí nghiệm:

opengl vẽ cờ đỏ năm sao

Trên đây là toàn bộ nội dung bài viết này hi vọng nó sẽ giúp ích cho việc học của mọi người và cũng mong mọi người ủng hộ mình.

Liên kết gốc: https://blog.csdn.net/sinat_31601333/article/details/52725068.

Cuối cùng, bài viết về cách vẽ cờ đỏ năm sao bằng opengl kết thúc tại đây. Nếu bạn muốn biết thêm về cách vẽ cờ đỏ năm sao bằng opengl, vui lòng tìm kiếm bài viết CFSDN hoặc tiếp tục duyệt qua các bài viết liên quan. ủng hộ blog của tôi trong tương lai! .

28 4 0
qq735679552
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress