WIN10+VS2019+OpenGL实现北斗七星和小恐龙

北斗七星(The Big Dipper)

点图及结果

#include <GL/glut.h>

void myInit(void) {
	glClearColor(0.0, 0.0, 0.0, 0.0);//红、绿、蓝和 alpha 值,指定值范围均为[ 0.0f,1.0f ],背景颜色为灰色
	glColor3f(1.0, 1.0, 1.0);//点的颜色为白色
	glPointSize(5.0);//点的大小
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	gluOrtho2D(0.0, 640.0, 0.0, 480.0);//gluOrtho2D是指屏幕区域对应的模型坐标范围,横向范围是0到640,纵向是0到480
}

void mydisplay() {
	GLint vertices[7][2] = { {20, 10}, {74, 74}, {129, 83}, {194, 101},
								 {239, 67}, {320, 128}, {289, 190} };
	glClear(GL_COLOR_BUFFER_BIT);//指定当前被激活为写操作的颜色缓存
	glBegin(GL_POINTS);  //点图
	glVertex2iv(vertices[0]);
	glVertex2iv(vertices[1]);
	glVertex2iv(vertices[2]);
	glVertex2iv(vertices[3]);
	glVertex2iv(vertices[4]);
	glVertex2iv(vertices[5]);
	glVertex2iv(vertices[6]);
	glEnd();
	glFlush();
}

int main(int argc, char** argv) {
	glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
	glutInitWindowSize(640, 480);
	glutCreateWindow("The Big Dipper");
	glutDisplayFunc(mydisplay);
	myInit();
	glutMainLoop();
}

在这里插入图片描述

线图及结果

#include <GL/glut.h>

void myInit(void) {
	glClearColor(0.0, 0.0, 0.0, 0.0);
	glColor3f(1.0, 1.0, 1.0);
	glPointSize(5.0);
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	gluOrtho2D(0.0, 640.0, 0.0, 480.0);
}

void mydisplay() {
	GLint vertices[7][2] = { {20, 10}, {74, 74}, {129, 83}, {194, 101},
						 {239, 67}, {320, 128}, {289, 190} };
	glClear(GL_COLOR_BUFFER_BIT);
	glBegin(GL_LINE_STRIP);  //线图
	glVertex2iv(vertices[0]);
	glVertex2iv(vertices[1]);
	glVertex2iv(vertices[2]);
	glVertex2iv(vertices[3]);
	glEnd();
	glBegin(GL_LINE_LOOP);
	glVertex2iv(vertices[3]);
	glVertex2iv(vertices[4]);
	glVertex2iv(vertices[5]);
	glVertex2iv(vertices[6]);
	glVertex2iv(vertices[3]);
	glEnd();
	glFlush();
}

int main(int argc, char** argv) {
	glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
	glutInitWindowSize(640, 480);
	glutCreateWindow("The Big Dipper");
	glutDisplayFunc(mydisplay);
	myInit();
	glutMainLoop();
}

在这里插入图片描述

说明

1.gluOrtho2D(-5.0,5.0,-5.0,5.0); 参数分别代表(左下角x坐标,右上角x坐标,左下角y坐标,右上角y坐标)——坐标全相对于窗口左下角--原点),near和far默认为-1和1,此函数决定一个平行六面体,即View Volume!
2.投影也是使用矩阵来实现的。如果需要操作投影矩阵,需要以GL_PROJECTION为参数调用glMatrixMode函数。
glMatrixMode(GL_PROJECTION);
通常,我们需要在进行变换前把当前矩阵设置为单位矩阵。
glLoadIdentity();
3.对于线状图,需要分为两部分,首先将0,1,2,3连线,再将3,4,5,6,3重新连成环,否则无法出现正确的北斗七星结果

小恐龙

小恐龙原图代码及结果

#pragma warning(disable:4996)
#include <stdio.h>
#include <GL/glut.h>

void myInit(void) {
	glClearColor(1.0, 1.0, 1.0, 0.0);
	glColor3f(0.0, 0.0, 0.0);
	glPointSize(3.0);
    //glLineWidth(3.0);//attribute changing function 使线条变粗
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	gluOrtho2D(0.0, 640.0, 0.0, 480.0);
}

void drawPolyLineFile(const char* filename) {
	FILE* ifp;
	int i, j;
	GLint numpolys, numLines, x, y;

	ifp = fopen(filename, "r");
	if (ifp == NULL) {
		printf("Error: can't open file for reading.\n");
		return;
	}

	glClear(GL_COLOR_BUFFER_BIT);

	fscanf_s(ifp, "%d", &numpolys);

	for (j = 0; j < numpolys; j++) {
		fscanf(ifp, "%d", &numLines);
		glBegin(GL_LINE_STRIP);
		for (i = 0; i < numLines; i++) {
			fscanf(ifp, "%d %d", &x, &y);
			//添加颜色要放到glVertex2i前面,否则primitive state无法加上颜色
			//glColor3f(1.0, 0.0, 0.0); //全部设为红色
			//glColor3f(GLfloat(rand() % 10) / 10, (rand() % 10) / 10, (rand() % 10) / 10);  //随机颜色版恐龙
			glVertex2i(x, y);  //the only primitive generating function
		}
		glEnd();
	}
	glFlush();
	fclose(ifp);
}

void mydisplay() {
	drawPolyLineFile("dinosour.txt");
}

int main(int argc, char** argv) {
	glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
	glutInitWindowSize(640, 480);
	glutCreateWindow("Dino");
	glutDisplayFunc(mydisplay);
	myInit();
	glutMainLoop();
}

结果

在这里插入图片描述
随机颜色版恐龙
在这里插入图片描述
线条变粗版小恐龙
在这里插入图片描述

dinosour.txt文件位置

和cpp文件放在同一文件夹下
在这里插入图片描述

dinosour.txt文件内容

21
29
32 435
10 439
4 438
2 433
4 428
6 425
10 420
15 416
21 413
30 408
42 406
47 403
56 398
63 391
71 383
79 369
84 356
87 337
89 316
88 302
86 294
83 278
79 256
78 235
79 220
85 204
94 190
98 183
98 182
9
116 189
105 184
98 172
98 156
93 141
93 132
99 122
104 115
104 114
38
153 116
152 112
153 107
154 93
154 81
152 67
146 56
140 47
136 39
133 30
130 17
128 7
127 3
93 2
93 10
96 16
96 20
97 21
101 24
104 27
105 31
107 36
108 40
109 47
111 51
114 58
118 66
120 71
118 79
117 88
116 97
112 105
107 113
107 118
108 126
112 138
116 146
118 148
7
153 95
158 99
159 103
161 108
161 115
160 121
160 122
7
156 80
167 79
182 76
203 73
220 78
235 79
239 80
43
262 154
259 141
259 123
257 110
255 93
259 86
272 74
287 46
290 41
299 30
305 21
307 15
307 12
300 11
299 9
301 2
303 1
313 5
320 7
307 1
312 0
321 0
325 0
331 0
336 2
336 8
334 18
335 24
331 29
327 39
323 45
317 54
312 63
308 70
301 79
297 86
296 97
300 109
303 120
304 126
307 138
306 148
305 152
5
298 86
304 92
310 104
314 114
314 119
7
255 98
251 100
246 105
242 112
236 122
231 131
233 126
7
271 73
264 74
257 76
244 76
236 80
231 84
230 86
24
242 77
242 70
245 61
246 49
248 39
249 30
248 19
245 12
242 9
241 6
243 1
256 3
259 2
266 3
271 4
274 9
277 16
277 24
277 31
277 41
277 48
278 57
278 62
278 66
24
190 73
191 64
193 51
194 39
191 25
189 17
185 7
184 5
177 4
169 4
166 4
159 5
159 6
162 19
163 25
165 32
165 39
165 47
165 57
162 65
161 70
159 75
158 78
157 80
15
96 157
93 163
88 176
82 184
78 193
75 201
72 212
72 224
72 238
73 254
75 267
78 277
82 286
89 298
89 300
9
33 428
33 428
33 427
35 426
36 425
30 427
27 428
27 428
28 428
16
2 435
5 434
10 432
13 431
16 429
19 427
21 426
22 425
24 424
26 423
27 423
30 422
33 422
34 421
36 420
36 419
77
32 436
55 423
67 415
75 409
86 401
92 395
98 389
105 378
107 372
111 362
112 355
116 345
119 338
121 328
124 317
125 312
125 304
126 294
125 288
124 280
125 277
125 258
124 255
125 241
128 235
135 225
141 218
147 211
155 208
166 205
178 203
194 202
209 203
219 204
232 205
249 206
259 207
284 205
300 198
317 189
333 182
345 170
362 153
392 135
430 118
450 104
477 91
509 75
539 65
567 61
599 60
625 59
635 58
632 54
616 51
602 46
593 46
580 45
565 41
546 38
526 36
502 42
487 48
468 53
452 57
434 63
414 71
397 77
378 82
366 86
352 90
338 92
328 91
319 88
307 86
306 85
301 85
14
318 106
333 107
346 109
359 111
369 104
391 100
411 95
431 87
445 81
458 71
473 63
491 59
497 57
499 56
7
244 109
235 104
221 100
208 96
199 97
190 98
190 98
8
160 116
165 119
171 122
172 127
170 135
168 144
170 149
174 149
4
169 118
174 120
179 124
178 126
8
293 132
294 125
297 115
291 94
287 90
290 84
297 79
297 79
6
144 97
143 83
144 72
141 58
136 52
134 49

问题说明

在直接执行小恐龙代码的时候,会出现C4996错误,具体在使用fopen和fscanf的时候。
解决方案:
1.在文件顶部加一行代码

#pragma warning(disable:4996)

2.在文件顶部加一行代码

#define _CRT_SECURE_NO_WARNINGS

二者任选其一即可

参考链接

VS2015怎么解决scanf函数的C4996错误?

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要在VS2019中使用CMake编译MFC和OpenGL,你需要按照以下步骤进行配置: 1. 首先,在项目的属性中,将项目类型更改为静态库(.lib)或动态链接库(.dll)。这取决于你的需要。 2. 接下来,确保你在项目的头文件中添加了必要的OpenGL头文件引用。这可以通过包含以下代码来完成: ```cpp #include <GL/gl.h> #include <GL/glu.h> ``` 3. 然后,将OpenGL的库文件链接到你的项目中。这可以通过在项目的属性中添加附加库目录和附加依赖项来完成。附加库目录应指向包含OpenGL库文件的目录(.lib文件)。附加依赖项应包含OpenGL库的名称。 4. 接下来是CMake的配置。首先,在项目的根目录下创建一个CMakeLists.txt文件。在该文件中,添加以下内容: ```cmake cmake_minimum_required(VERSION 3.0) project(YourProjectName) find_package(OpenGL REQUIRED) add_executable(YourProjectName YourSourceFiles.cpp) target_link_libraries(YourProjectName OpenGL::GL) ``` 5. 然后,使用CMake来生成你的项目。在命令行中导航到项目根目录,并运行以下命令: ``` cmake . ``` 6. 最后,使用VS2019打开生成的解决方案文件(.sln),并进行编译。 通过按照以上步骤进行配置,你将能够在VS2019中使用CMake编译MFC和OpenGL。请注意,这只是一个基本的配置示例,具体的配置可能因你的项目结构和需求而有所不同。你可能需要根据你的实际情况进行调整和修改。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [VS2019+OpenGL配置:绘制3维图](https://blog.csdn.net/qq_41498261/article/details/109331819)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TonyHsuM

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值