【要求】

实现自己的三角形线框显示算法,能够将三角形的各个顶点经过坐标变换后变换到屏幕坐标,并以连线的方式将三角形的各个边显示出来。要求连线不使用Windows API,而是利用自己的2D Line算法,例如:2DDA算法。

方法1  DDA算法

理论学习 参考博客  博客1   博客2

代码(创建glut工程)

#include<windows.h>
#include<bits/stdc++.h>
#include <GL/glut.h>
using namespace std;
struct node
{float x,y,z;
};
vector<node> G;vector<node> Get_Point()
{vector<node> G;G.push_back({0, 0, 0});G.push_back({0.1, 0.1, 0.1});G.push_back({0.2, 0.2, 0.2});return G;
}void Display(void)
{glClear(GL_COLOR_BUFFER_BIT);glPointSize(2.0f);glBegin(GL_POINTS);//    printf("%d\n", G.size());
//    G = Get_Point();for(int i = 0; i < G.size(); ++i){cout<<G[i].x<<" "<<G[i].y<<" "<<G[i].z<<endl;glVertex3f(G[i].x/100, G[i].y/100, G[i].z/100);}glEnd();glFlush();
}void init(int argc,char* argv[])
{glutInit(&argc,argv);glutInitDisplayMode(GLUT_RGB);glutInitWindowPosition(100,100);glutInitWindowSize(1000,1000);glutCreateWindow("Three Window");
}inline int round(const float a) {return int (a + 0.5);}
void lineDDA(int x0,int y0,int xEnd,int yEnd){int dx = xEnd - x0, dy = yEnd - y0,steps, k ;float xIncrement, yIncrement,x = x0,y = y0;steps = max(fabs(dx), fabs(dy));xIncrement = float (dx) / float (steps);yIncrement = float (dy) / float (steps);cout<<"xIncrement: "<<xIncrement<<" yIncrement: "<<yIncrement<<endl;int id = 1;G.push_back({round(x), round(y), ++id});for(k = 0;k<steps;k++){x += xIncrement;y += yIncrement;G.push_back({round(x), round(y), ++id});}
}int main(int argc,char* argv[])
{init(argc, argv);
//    lineDDA(10, 10, 75, 75);lineDDA(0, 0, 10, 10);lineDDA(0, 0, 0, 10);lineDDA(0, 10, 10, 10);glutDisplayFunc(&Display);glutMainLoop();return 0;
}

方法2 调用windows的API (创建glut工程)

#include<windows.h>
#include <GL\glut.h>void init(){//貌似是坐标变换glClearColor(1.0, 1.0, 1.0, 0.0);glMatrixMode(GL_PROJECTION);gluOrtho2D(0.0,200.0,0.0,150.0);
}void drawLine(){glClear(GL_COLOR_BUFFER_BIT);glColor3f(0.0,0.4,0.2);int point1[] = { 50, 100 };int point2[] = { 50, 200 };int point3[] = { 200, 100 };glBegin(GL_LINES);glVertex2i(10, 10);glVertex2i(75, 75);glEnd();glBegin(GL_LINES);glVertex2i(75, 75);glVertex2i(75, 10);glEnd();glBegin(GL_LINES);glVertex2i(75, 10);glVertex2i(10, 10);glEnd();glFlush();
}int main(int argc, char** argv)
{glutInit(&argc,argv);glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);glutInitWindowPosition(100,100);glutInitWindowSize(400, 400);glutCreateWindow("三角形");init();glutDisplayFunc(&drawLine);glutMainLoop();return 0;
}

其他

用glfw画各种图形

参考官网代码:官网  

主体代码就是在这个位置写

#include<GLFW/glfw3.h>
#include<math.h>const float Pi = acos(-1);
const float R = 0.5f;
const int n = 100;int main(void)
{GLFWwindow* window;/* Initialize the library */if (!glfwInit())return -1;/* Create a windowed mode window and its OpenGL context */window = glfwCreateWindow(640, 480, "Hello World", NULL, NULL);if (!window){glfwTerminate();return -1;}/* Make the window's context current */glfwMakeContextCurrent(window);/* Loop until the user closes the window */while (!glfwWindowShouldClose(window)){/* Render here */glClear(GL_COLOR_BUFFER_BIT);//画三角形/*glBegin(GL_TRIANGLES);glVertex2d(0, 0.5f);glVertex2d(0.5f, -0.5f);glVertex2d(-0.5f, -0.5f);glEnd();*//*画圆*/glBegin(GL_LINE_LOOP);for (int i = 0; i < n; ++i) {glVertex2d(R*sin(2.0*Pi / n * i), R*cos(2.0*Pi / n * i));}glEnd();/* Swap front and back buffers */glfwSwapBuffers(window);/* Poll for and process events */glfwPollEvents();}glfwTerminate();return 0;
}

计算机图形学 画三角形、圆等(入门代码)相关推荐

  1. 计算机图形学·画图板

    计算机图形学·画图板 愿你走过半生,归来仍少年 作者:风之丘@YaoMZ 版本:1.0 时间:2018.5.15 文件 编辑 颜色 线条 形状 工具 填充 裁剪 反混淆 变换 投影 帮助 软件介绍及说 ...

  2. OpenGL画三角形 圆 五角星 菱形

    不开心,想玩,当家的不许我玩,还说你要玩就玩,那我不管你了,哭哭TAT 用OPenGL原有的画三角形,正方形,点的函数来作图. 画圆是用化曲为直的思想,把圆分为很多分,越分的多越细,越像圆. 画菱形和 ...

  3. 控制台上画三角形圆和直线

    基于C语言的. #include<stdio.h> #include<stdlib.h> #include<tchar.h> #include<windows ...

  4. 计算机图形学--中点椭圆算法原理及代码实现

    目录 椭圆的几何特性: 算法原理: 代码实现: 说明,我们这里讨论的椭圆都是对称轴平行于坐标轴的椭圆,对于其他方程较为复杂的椭圆我们不做讨论. 椭圆的几何特性: 首先我们考虑椭圆的几何特性.椭圆是抽对 ...

  5. c语言计算机图形来画八分画圆,计算机图形学:中点画圆算法

    在平面解析几何中,圆的方程可以描述为(x – x0)2 + (y – y0)2 = R2,其中(x0, y0)是圆心坐标,R是圆的半径,特别的,当(x0, y0)就是坐标中心点时,圆方程可以简化为x2 ...

  6. 【计算机图形学】中点画圆算法和Bresenham画圆算法

    在平面解析几何中,圆的方程可以描述为(x – x0)2 + (y – y0)2 = R2,其中(x0, y0)是圆心坐标,R是圆的半径,特别的,当(x0, y0)就是坐标中心点时,圆方程可以简化为x2 ...

  7. 用JavaScript玩转计算机图形学(一)光线追踪入门

    系列简介 记得小时候读过一本关于计算机图形学(computer graphics, CG)的入门书,从此就爱上了CG.本系列希望,采用很多人认识的JavaScript语言去分享CG,令更多人有机会接触 ...

  8. 计算机图形学 顶点定义_在计算机图形学中定义一个圆

    计算机图形学 顶点定义 After studying the implementation of lines in computer graphics, we will now be dealing ...

  9. 计算机图形学画圆vc代码,计算机图形学实验--完整版-带结果--vc++实现.doc

    计算机图形学实验--完整版-带结果--vc实现 计算机图形学实验报告 信息学院计算机专业 20081060183 周建明 综括: 利用计算机编程语言绘制图形,主要实现以下内容: (1).中点算法生成任 ...

最新文章

  1. HDU 4300 Clairewd’s message
  2. Xshell Linux常用命令及vim与权限修改等常见问题
  3. 收集53个程序员段子
  4. java 中的正则表达式_Java中的正则表达式–软介绍
  5. VC连接mysql数据库错误:libmysql.lib : fatal error LNK1113: invalid machine 解决方法
  6. Centos7 +Django的安装
  7. 向日葵 监控 android,就是如此简单!向日葵远程控制Android手机版教程
  8. oracle打cve补丁,Oracle多个产品高危漏洞补丁安全预警
  9. 大话functional编程语言
  10. ztree去掉文字前面的文件夹图标
  11. nginx+geoip2实现地区限制
  12. c语言中puts的作用,c语言中puts的用法
  13. 第六章 XML 拨号方案
  14. Loss和神经网络训练
  15. 复数/复频域计算器介绍(解方程组)
  16. MYSQL彻底卸载(步步图解)
  17. python 均线斜率怎么计算_高频交易算法研发心得--均线算法
  18. js 数组遍历符合条件跳出循环体_Js数组遍历方法对比总结
  19. 西瓜书第四章阅读笔记
  20. 最老程序员创业札记:全文检索、数据挖掘、推荐引擎应用28

热门文章

  1. 谷歌人工智能算法RankBrain运行原理解析
  2. 我终于面进阿里了,阿里实习offer五面经验与总结
  3. 看图识“字”(15)-站点图
  4. 计算机二级选择题知识点汇总
  5. python读取文件并按属性取值
  6. 情人节礼物:抖音表白程序Python版 之无法拒绝的爱附完整源代码
  7. (36)RuntimeError: Given groups=4, weight of size [4, 1, 11, 11], expected input xxxxxxxxx
  8. 深入tornado中的ioLoop
  9. 中标麒麟龙芯mysql配置_minio中标麒麟+龙芯环境适配问题汇总
  10. Java实现简单队列