OpenGL(一)绘制圆、五角星、正弦曲线
OpenGL入门之“顶点”:OpenGL规定,一个多边形必须是一个“凸多边形”,即连接多边形上任意两点,其连线都在多边形内部。多边形可以由其边上的端点(这里可称为顶点)来确定。所以“顶点”的概念在图形学中非常重要,定义了顶点数组和顶点的连接方式,就可以组合出各种形态。
OpenGL中顶点连接形式:顶点的连接形式由glBegin函数定义,每种参数对应的连接形式如下:
对OpenGL绘图的初步实践,分别绘制圆、五角星和正弦曲线。
#include <glut.h>
#include "math.h"
#include <iostream>
using namespace std;
int n=3600; //圆绘制次数
float PI=3.1415926f;
float R=0.8f; //半径
void myDisplay(void)
{
//画圆
glClear(GL_COLOR_BUFFER_BIT);
glClearColor(0,0,0,0);
glColor4f(0,0,1,0);
glBegin(GL_POLYGON);
for(int i=0;i<n;i++)
{
glVertex2f(R*cos(2*PI*i/n),R*sin(2*PI*i/n)); //定义顶点
}
glEnd();
glFlush();
cout<<"画圆成功,任意键继续…"<<endl;
system("pause");
//画五角星
glClear(GL_COLOR_BUFFER_BIT);
glClearColor(0,0,0,0);
glColor4f(0,0,1,0);
glBegin(GL_LINE_LOOP);
//以下ABCDE分别是五角星的5个顶点
GLfloat xA=R*cos(90*2*PI/360);
GLfloat yA=R*sin(90*2*PI/360);
GLfloat xB=R*cos(306*2*PI/360);
GLfloat yB=R*sin(306*2*PI/360);
GLfloat xC=R*cos(162*2*PI/360);
GLfloat yC=R*sin(162*2*PI/360);
GLfloat xD=R*cos(18*2*PI/360);
GLfloat yD=R*sin(18*2*PI/360);
GLfloat xE=R*cos(234*2*PI/360);
GLfloat yE=R*sin(234*2*PI/360);
glVertex2f(xA,yA);
glVertex2f(xB,yB);
glVertex2f(xC,yC);
glVertex2f(xD,yD);
glVertex2f(xE,yE);
glEnd();
glFlush();
cout<<"画五角星成功,任意键继续…"<<endl;
system("pause");
//画正弦曲线,画5个,在x方向上压缩
GLfloat x=-1.0;
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_LINES);
glVertex2f(-1.0f,0.0f); //过中心的十字
glVertex2f(1.0f,0.0f);
glVertex2f(0.0f,-1.0f);
glVertex2f(0.0f,1.0f);
glEnd();
glBegin(GL_LINE_STRIP);
for(float x=-5*PI;x<5*PI;x+=0.1f)
{
glVertex2f(x/(5*PI),sin(x));
}
glEnd();
glFlush();
cout<<"正弦线完成"<<endl;
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv); //初始化GLUT
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
glutInitWindowPosition(100, 100);
glutInitWindowSize(400, 400);
glutCreateWindow("My first OpenGL program");
glutDisplayFunc(&myDisplay); //回调函数
glutMainLoop(); //持续显示,当窗口改变会重新绘制图形
return 0;
}
圆:
五角星:
正弦曲线:
1. OpenGL中窗口的坐标是笛卡尔坐标系,原点在窗口的中心点,左右和上下边界坐标分别为-1、1、1、-1。水平方向上是x轴,垂直方向上是y轴。
2. 图像窗口每次改变,都会引发重绘。
3. 绘制这些简单图形的核心是顶点坐标的确定,依序分别绘制,顺序很重要。
OpenGL(一)绘制圆、五角星、正弦曲线的更多相关文章
- OpenGL学习-------绘制简单的几何图形
本次课程所要讲的是绘制简单的几何图形,在实际绘制之前,让我们先熟悉一些概念. 一.点.直线和多边形我们知道数学(具体的说,是几何学)中有点.直线和多边形的概念,但这些概念在计算机中会有所不同.数学上的 ...
- 【AR实验室】OpenGL ES绘制相机(OpenGL ES 1.0版本)
0x00 - 前言 之前做一些移动端的AR应用以及目前看到的一些AR应用,基本上都是这样一个套路:手机背景显示现实场景,然后在该背景上进行图形学绘制.至于图形学绘制时,相机外参的解算使用的是V-SLA ...
- CSharpGL(6)在OpenGL中绘制UI元素
CSharpGL(6)在OpenGL中绘制UI元素 2016-08-13 由于CSharpGL一直在更新,现在这个教程已经不适用最新的代码了.CSharpGL源码中包含10多个独立的Demo,更适合入 ...
- C# Graphic 绘制圆、三角形、椭圆、图片
在form和panel上可以绘制图形,线段,圆,文字,图形等等. 绘制代码必须放在OnPaint()函数里面,因为窗体刷新的时候,都会调用该函数,重新刷新所绘的图. 示例代码在Panel上绘制图形来简 ...
- 使用OpenGL ES绘制3D图形
如果应用定义的顶点不在同一个平面上,并且使用三角形把合适的顶点连接起来,就可以绘制出3D图形了. 使用OpenGL ES绘制3D图形的方法与绘制2D图形的步骤大致相同,只是绘制3D图形需要定义更多的 ...
- CDR绘制绚丽五角星※※
CDR绘制绚丽五角星 1.绘制一个五角星,在多边形工具下拉的第二个就是 2.选中五角星,点击颜色即可.给五角星加上颜色 3.用立体化工具进行延伸. 4.点击图形中心向下拉. 看到了中间的一个长方条了没 ...
- 【Qt for Android】OpenGL ES 绘制彩色立方体
Qt 内置对OpenGL ES的支持.选用Qt进行OpenGL ES的开发是很方便的,很多辅助类都已经具备.从Qt 5.0開始添加了一个QWindow类,该类既能够使用OpenGL绘制3D图形,也能够 ...
- [转]关于OpenGL的绘制上下文
[转]关于OpenGL的绘制上下文 本文转自(http://www.cnblogs.com/Liuwq/p/5444641.html) 什么是绘制上下文(Rendering Context) 初学Op ...
- leaflet 如何绘制圆
方法1(根据指定的半径和中心点去绘制圆) var polygon1 = new L.Circle([34, 108], 120000, { color: 'red', //颜色 fillColor: ...
随机推荐
- hdu 4406 费用流
这题问题就是当前时刻究竟选择哪门课程,易知选择是和分数有关的,而且是一个变化的权值,所以能够用拆点的方式,把从基础分到100分都拆成点.但若这样拆点的话,跑费用流时就必须保证顺序.这样就麻烦了..观察 ...
- php实现合并两个排序的链表(很多情况下新建数组装东西比连东西逻辑快很多)($cur=$cur->next;的理解)
php实现合并两个排序的链表(很多情况下新建数组装东西比连东西逻辑快很多)($cur=$cur->next;的理解) 一.总结 $cur=$cur->next;这句话需要好好理解 指$cu ...
- Win7的ftp功能
ftp作为文件传输协议,在一些特殊情况下用这种文件传输是比较方便的,并且win7本身也支持这个功能,在控制面板--->程序-->打开或关闭Windows功能,安装即可: 然后在管理控制台中 ...
- 利用a标签导出csv文件
原文 简书原文:https://www.jianshu.com/p/a8687610cda3 大纲 1.需求分析 2.通过a标签实现文件导出 3.实现方式 1.需求分析 导出文件,使用最多的方式还是服 ...
- Netty+WebSocket简单实现网页聊天
基于Netty+WebSocket的网页聊天简单实现 一.pom依赖 <dependency> <groupId>io.netty</groupId> ...
- MySQL5.7 四种日志文件
mysql 日志包括:错误日志,二进制日志,通用查询日志,慢日志等 一:通用查询日志: 记录建立的客户端连接和执行的语句 1)show variables like '%verision%'; 显示数 ...
- HTTP协议和HTTPS协议初探
概况 HTTP是hypertext transfer protocol(超文本传输协议)的简写.它是TCP/IP协议的一个应用层协议,用于定义WEB浏览器与WEBserver之间交换数据的过程. HT ...
- 独立博客网站FansUnion.cn运营2年的经验和教训以及未来规划
今天,我把运营了2年的独立博客网站FansUnion给"归零"了. 2012年6月,我成功搭建了自己的博客网站FansUnion.cn,这是由于自己的不懈努力和时代发展成就的 ...
- ios开发事件处理之:三 :寻找最合适的view
1:事件的产生与传递: 2:寻找最合适的view:如何查找最合适的view:需要三步:1:先判断自身是否能接受触摸事件 2:判断触摸点是否在自己身上 3:若前两条都满足,则其会从后往前遍历所有子控件( ...
- ios开发事件处理之 :二:事件的产生与传递
1.事件是怎么样产生与传递的? 当发生一个触摸事件后,系统会将该事件加入到一个由UIApplication管理的事件队列中.(队列是先进先出,而栈是先进后出) UIApplication会从事件队列中 ...