《图形学》实验一:钻石图案
开发环境:
VC++6.0,OpenGL
实验内容:
绘制钻石图案。将一圆周进行n等分,然后将所有的等分用直线连接,构成图案。
实验结果:
代码:
1 #include <windows.h> 2 #include <gl/gl.h> 3 #include <stdio.h> 4 5 #define PI acos(-1.0) 6 7 //存储n边形的n个点坐标 8 float px[1000] = {0}; 9 float py[1000] = {0}; 10 int n; //n边形 11 12 void GetAllPoint(int n) //得到n边形n个点的坐标 13 { 14 float x,y; 15 float r = 0.8; //半径 16 float si = 2*PI/n; //360°/n 17 float angle = si/2; //开始度数 18 int pnum = 0; 19 while(angle<=2*PI){ 20 x = r*cos(angle); 21 y = r*sin(angle); 22 px[pnum] = x; 23 py[pnum++] = y; 24 angle = angle+si; 25 } 26 } 27 28 void ShowPic1(int n) //画出n边形的外边框 29 { 30 int i; 31 float x,y; 32 for(i=0;i<n;i++){ 33 x = px[i]; 34 y = py[i]; 35 glVertex2f(x,y); 36 } 37 } 38 39 void ShowPic2(int n) //画出n边形的中间连线 40 { 41 int i,j; 42 float x0,y0,x,y; 43 for(i=0;i<n;i++){ 44 x0 = px[i]; 45 y0 = py[i]; 46 for(j=0;j<n;j++){ 47 if(i==j) 48 continue; 49 glVertex2f(x0,y0); 50 x = px[j]; 51 y = py[j]; 52 glVertex2f(x,y); 53 } 54 } 55 } 56 57 LRESULT CALLBACK WindowProc(HWND, UINT, WPARAM, LPARAM); 58 void EnableOpenGL(HWND hwnd, HDC*, HGLRC*); 59 void DisableOpenGL(HWND, HDC, HGLRC); 60 61 int WINAPI WinMain(HINSTANCE hInstance, 62 HINSTANCE hPrevInstance, 63 LPSTR lpCmdLine, 64 int nCmdShow) 65 { 66 WNDCLASSEX wcex; 67 HWND hwnd; 68 HDC hDC; 69 HGLRC hRC; 70 MSG msg; 71 BOOL bQuit = FALSE; 72 float theta = 0.0f; 73 74 printf("请输入n (n边形):\n"); 75 scanf("%d",&n); 76 77 GetAllPoint(n); //获取多边形全部的点 78 79 /* register window class */ 80 wcex.cbSize = sizeof(WNDCLASSEX); 81 wcex.style = CS_OWNDC; 82 wcex.lpfnWndProc = WindowProc; 83 wcex.cbClsExtra = 0; 84 wcex.cbWndExtra = 0; 85 wcex.hInstance = hInstance; 86 wcex.hIcon = LoadIcon(NULL, IDI_APPLICATION); 87 wcex.hCursor = LoadCursor(NULL, IDC_ARROW); 88 wcex.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); 89 wcex.lpszMenuName = NULL; 90 wcex.lpszClassName = "GLSample"; 91 wcex.hIconSm = LoadIcon(NULL, IDI_APPLICATION);; 92 93 94 if (!RegisterClassEx(&wcex)) 95 return 0; 96 97 /* create main window */ 98 hwnd = CreateWindowEx(0, 99 "GLSample", 100 "钻石图案", 101 WS_OVERLAPPEDWINDOW, 102 CW_USEDEFAULT, 103 CW_USEDEFAULT, 104 700, 105 700, 106 NULL, 107 NULL, 108 hInstance, 109 NULL); 110 111 ShowWindow(hwnd, nCmdShow); 112 113 /* enable OpenGL for the window */ 114 EnableOpenGL(hwnd, &hDC, &hRC); 115 116 /* program main loop */ 117 while (!bQuit) 118 { 119 /* check for messages */ 120 if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) 121 { 122 /* handle or dispatch messages */ 123 if (msg.message == WM_QUIT) 124 { 125 bQuit = TRUE; 126 } 127 else 128 { 129 TranslateMessage(&msg); 130 DispatchMessage(&msg); 131 } 132 } 133 else 134 { 135 /* OpenGL animation code goes here */ 136 137 glClearColor(0.0f, 0.0f, 0.0f, 0.0f); 138 glClear(GL_COLOR_BUFFER_BIT); 139 140 //glPushMatrix(); 141 //glRotatef(theta, 0.0f, 0.0f, 1.0f); 142 143 glBegin(GL_LINE_STRIP); 144 glColor3f(1.0f, 0.0f, 0.0f); //设置画笔颜色 145 ShowPic1(n); //输出n边形的外边框 146 glEnd(); 147 148 //printf("%d\n",pnum); 149 150 glBegin(GL_LINES); 151 ShowPic2(n); //画出n边形的中间连线 152 glEnd(); 153 154 glPopMatrix(); 155 156 SwapBuffers(hDC); 157 158 theta += 1.0f; 159 Sleep (1); 160 } 161 } 162 163 /* shutdown OpenGL */ 164 DisableOpenGL(hwnd, hDC, hRC); 165 166 /* destroy the window explicitly */ 167 DestroyWindow(hwnd); 168 169 return msg.wParam; 170 } 171 172 LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) 173 { 174 switch (uMsg) 175 { 176 case WM_CLOSE: 177 PostQuitMessage(0); 178 break; 179 180 case WM_DESTROY: 181 return 0; 182 183 case WM_KEYDOWN: 184 { 185 switch (wParam) 186 { 187 case VK_ESCAPE: 188 PostQuitMessage(0); 189 break; 190 } 191 } 192 break; 193 194 default: 195 return DefWindowProc(hwnd, uMsg, wParam, lParam); 196 } 197 198 return 0; 199 } 200 201 void EnableOpenGL(HWND hwnd, HDC* hDC, HGLRC* hRC) 202 { 203 PIXELFORMATDESCRIPTOR pfd; 204 205 int iFormat; 206 207 /* get the device context (DC) */ 208 *hDC = GetDC(hwnd); 209 210 /* set the pixel format for the DC */ 211 ZeroMemory(&pfd, sizeof(pfd)); 212 213 pfd.nSize = sizeof(pfd); 214 pfd.nVersion = 1; 215 pfd.dwFlags = PFD_DRAW_TO_WINDOW | 216 PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER; 217 pfd.iPixelType = PFD_TYPE_RGBA; 218 pfd.cColorBits = 24; 219 pfd.cDepthBits = 16; 220 pfd.iLayerType = PFD_MAIN_PLANE; 221 222 iFormat = ChoosePixelFormat(*hDC, &pfd); 223 224 SetPixelFormat(*hDC, iFormat, &pfd); 225 226 /* create and enable the render context (RC) */ 227 *hRC = wglCreateContext(*hDC); 228 229 wglMakeCurrent(*hDC, *hRC); 230 } 231 232 void DisableOpenGL (HWND hwnd, HDC hDC, HGLRC hRC) 233 { 234 wglMakeCurrent(NULL, NULL); 235 wglDeleteContext(hRC); 236 ReleaseDC(hwnd, hDC); 237 }
Freecode : www.cnblogs.com/yym2013
转载于:https://www.cnblogs.com/yym2013/p/4619195.html
《图形学》实验一:钻石图案相关推荐
- 计算机图形学——绘制钻石图案
要求:绘制钻石图案.将一圆周进行n等分,然后将所有的等分用直线连接,构成图案. n=8 q =2*p/n X=2*r*cos(q) Y=r*sin(q) #include <GL/glut.h& ...
- 计算机图形学实验一(二维图形绘制)
计算机图形学实验一(二维图形绘制) 一.实验内容 二.实验环境 三.问题分析 四.算法设计 五.源代码 六.程序运行结果 一.实验内容 (1)绘制金刚石图案 金刚石图案的成图规则是:把一个圆周等分成n ...
- 计算机图形学课程设计html源码,孔令德的计算机图形学实验及课程设计(VC++版)...
[实例简介] 计算机图形学实验及课程设计,是太原工业学院孔令德教授编写的关于计算机图形学这门课程相关的18个实验及5个课程设计.案例由浅入深,具有很强的操作性和实际意义. 本资源给出实验的ppt课件以 ...
- 计算机图形学实验报告孔令德,计算机图形学实验及课程设计.ppt
文档介绍: 计算机图形学实验及课程设计 孔令德 2012年春于太原 计算机图形学安验环境 实验任务书 实验目的与要求 实验目的:巩固学生对计算机图形学的直线扫描转换原理. 有效边表填充原理.三维*** ...
- 华北电力大学计算机图形学实验报告,华北电力大学计算机图形学实验报告分析.doc...
华北电力大学计算机图形学实验报告分析 科 技 学 院 课程设计(综合实验)报告 ( 2013 -- 2014 年度第 2 学期) 实验名称 OpenGL基本图元绘制实验 课程名称 计算机图形学 | | ...
- 计算机图形学直线扫描转论文,计算机图形学实验报告-实验1直线段扫描转换.doc...
PAGE 32 PAGE 7 计算机图形学 实验报告 班级 计算机工硕班 学号 2011220456 姓名 王泽晶 实验一:直线段扫描转换 实验目的 通过本次试验,学生可以掌握直线段的扫描转换算法及其 ...
- 计算机图形学画圆vc代码,计算机图形学实验--完整版-带结果--vc++实现.doc
计算机图形学实验--完整版-带结果--vc实现 计算机图形学实验报告 信息学院计算机专业 20081060183 周建明 综括: 利用计算机编程语言绘制图形,主要实现以下内容: (1).中点算法生成任 ...
- 如何用计算机画立方体,画立方体-计算机图形学实验.doc
画立方体-计算机图形学实验.doc (8页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.90 积分 计算机图形学实验--画立方体(通过视向变换等)具 ...
- 计算机图形学真实感显示代码,计算机图形学实验 - 真实感图形场景的生成
<计算机图形学实验 - 真实感图形场景的生成>由会员分享,可在线阅读,更多相关<计算机图形学实验 - 真实感图形场景的生成(4页珍藏版)>请在人人文库网上搜索. 1.计算机图形 ...
最新文章
- MySQL中的RAND()函数使用详解
- JADAK收购RFID方案商SkyeTek,增强竞争力
- 什么?Spring Boot CommandLineRunner 有坑!?
- 软件工程python就业方向-月薪2万+的Python Web岗,学到什么程度能找到工作?
- SpringCloud Config Server搭建
- 一张图搞懂容器所有操作 - 每天5分钟玩转 Docker 容器技术(26)
- php send helo/ehlo first错误,phpmailer发送邮件提示SMTP server error怎么回事?
- C#LeetCode刷题之#40-组合总和 II(Combination Sum II)
- python 制作聊天程序-python实现点对点聊天程序
- Thinkphp精仿韩都衣舍商城网站源码
- 深入浅出GAMP算法(上): 因子图与消息传递算法
- wamp php 安装redis,wamp下redis安装及配置
- Java for循环的几种用法详解(转载)
- 设计模式(五):利用原型模式复制几个葫芦娃
- Gradle项目在IDEA中运行时提示:Unnecessarily replacing a task that does not exist is not supported. Use create
- clickhouse表引擎-合并树系列
- 十一届蓝桥杯省赛C语言B组——B: 既约分数
- Tensorflow 2.* 网络训练(二) fit(x, y, batch_size, epochs, verbose, validation_split, initial_epoch... )
- 精品收藏:GitHub人工智能AI开源项目
- Linux pstack命令
热门文章
- java异常看不懂_报错了 看不懂求解
- 出现身份验证错误 要求的函数不受支持_学习使用Kotlin创建Android应用程序第3部分:身份验证登录...
- pythonseleniumide使用_selenium第二课(脚本录制seleniumIDE的使用)
- 如何获取集合里面的下标_集合上下极限公式的理解
- ionic 页面传值问题
- qt5 linux apt get,Ubuntu 14.04下安装并配置Qt5.7.0
- python中dumps和dump区别_python json.dumps() json.dump()的区别
- php模板引擎smarty,[PHP]模板引擎Smarty介绍
- python查找客户总金额_该程序查找需要支付给所有表现良好的Python的最低金额
- dragon编译linux,在Linux系统中安装Alibaba Dragonwell8的方法