【OpenGL】十五、OpenGL 绘制三角形 ( 绘制 GL_TRIANGLE_FAN 三角形扇 )
文章目录
- 一、绘制 GL_TRIANGLE_FAN 三角形
- 1、绘制 3 个点的情况
- 2、绘制 4 个点的情况
- 3、绘制 5 个点的情况
- 4、绘制 6 个点的情况
- 二、相关资源
一、绘制 GL_TRIANGLE_FAN 三角形
GL_TRIANGLE_FAN 的绘制规则是 , 以第 111 个点作为顶点 , 第 1,2,31,2,31,2,3 个点组成三角形 , 第 1,3,41,3,41,3,4 个点组成第二个三角形 , 第 1,4,51,4,51,4,5 个点组成第三个三角形 ;
1、绘制 3 个点的情况
在 glBegin 和 glEnd 之间放置 333 个点 , 则绘制 1,2,31,2,31,2,3 个点 ;
代码示例 :
// 只显示正面 , 不显示背面//glEnable(GL_CULL_FACE);// 设置顺时针方向 CW : Clock Wind 顺时针方向// 默认是 GL_CCW : Counter Clock Wind 逆时针方向 //glFrontFace(GL_CW);// 主消息循环:while (GetMessage(&msg, nullptr, 0, 0)){if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)){TranslateMessage(&msg);DispatchMessage(&msg);}// 渲染场景// 清除缓冲区 , // 使用之前设置的 glClearColor(1.0, 0.0, 0.0, 1.0) 擦除颜色缓冲区// 红色背景glClear(GL_COLOR_BUFFER_BIT);// 设置当前的绘制颜色 , 4 个 unsigned byte // 每个颜色的分量占一个字节// 参数数据是 R 红色 G 绿色 B 蓝色 A 透明度// 下面设置的含义是白色, 绘制点的时候, 每次都使用白色绘制glColor4ub(255, 255, 255, 255);// 设置线的宽度 glLineWidth(2.0f);//glBegin(GL_POINTS); // 绘制点//glBegin(GL_LINES); // 绘制线//glBegin(GL_LINE_STRIP);// 绘制前后连接的点组成的线//glBegin(GL_LINE_LOOP); // 绘制前后连接的点组成的线 , 并且收尾相连//glBegin(GL_TRIANGLES); // 绘制多个三角形//glBegin(GL_TRIANGLE_STRIP); // 绘制 GL_TRIANGLE_STRIP 三角形// 绘制三角形面glBegin(GL_TRIANGLE_FAN);// 1. 设置白色 , glVertex3f (GLfloat x, GLfloat y, GLfloat z)glColor4ub(255, 255, 255, 255);glVertex3f(0.0f, 0.0f, -10.0f);// 2. 设置绿色 glColor4ub(0, 255, 0, 255);glVertex3f(-5.0f, -2.0f, -10.0f);// 3. 设置蓝色glColor4ub(0, 0, 255, 255);glVertex3f(-3.0f, -2.0f, -10.0f);// 1. 2. 3. 这三个点会绘制一个三角形 // 绘制三角形结束glEnd();// 将后缓冲区绘制到前台SwapBuffers(dc);}
绘制效果 :
2、绘制 4 个点的情况
在 glBegin 和 glEnd 之间放置 444 个点 , 则 1,2,31,2,31,2,3 绘制一个三角形 , 1,3,41,3,41,3,4 绘制一个三角形 ;
代码示例 :
// 只显示正面 , 不显示背面//glEnable(GL_CULL_FACE);// 设置顺时针方向 CW : Clock Wind 顺时针方向// 默认是 GL_CCW : Counter Clock Wind 逆时针方向 //glFrontFace(GL_CW);// 主消息循环:while (GetMessage(&msg, nullptr, 0, 0)){if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)){TranslateMessage(&msg);DispatchMessage(&msg);}// 渲染场景// 清除缓冲区 , // 使用之前设置的 glClearColor(1.0, 0.0, 0.0, 1.0) 擦除颜色缓冲区// 红色背景glClear(GL_COLOR_BUFFER_BIT);// 设置当前的绘制颜色 , 4 个 unsigned byte // 每个颜色的分量占一个字节// 参数数据是 R 红色 G 绿色 B 蓝色 A 透明度// 下面设置的含义是白色, 绘制点的时候, 每次都使用白色绘制glColor4ub(255, 255, 255, 255);// 设置线的宽度 glLineWidth(2.0f);//glBegin(GL_POINTS); // 绘制点//glBegin(GL_LINES); // 绘制线//glBegin(GL_LINE_STRIP);// 绘制前后连接的点组成的线//glBegin(GL_LINE_LOOP); // 绘制前后连接的点组成的线 , 并且收尾相连//glBegin(GL_TRIANGLES); // 绘制多个三角形//glBegin(GL_TRIANGLE_STRIP); // 绘制 GL_TRIANGLE_STRIP 三角形// 绘制三角形面glBegin(GL_TRIANGLE_FAN);// 1. 设置白色 , glVertex3f (GLfloat x, GLfloat y, GLfloat z)glColor4ub(255, 255, 255, 255);glVertex3f(0.0f, 0.0f, -10.0f);// 2. 设置绿色 glColor4ub(0, 255, 0, 255);glVertex3f(-5.0f, -2.0f, -10.0f);// 3. 设置蓝色glColor4ub(0, 0, 255, 255);glVertex3f(-3.0f, -2.0f, -10.0f);// 1. 2. 3. 这三个点会绘制一个三角形 // 4. 设置白色 glColor4ub(255, 255, 255, 255);glVertex3f(-1.0f, -2.0f, -10.0f);// 1. 3. 4. 这三个点会绘制一个三角形// 绘制三角形结束glEnd();// 将后缓冲区绘制到前台SwapBuffers(dc);}
绘制效果 :
3、绘制 5 个点的情况
在 glBegin 和 glEnd 之间放置 555 个点 , 则 1,2,31,2,31,2,3 绘制一个三角形 , 1,3,41,3,41,3,4 绘制一个三角形 , 1,4,51,4,51,4,5 绘制一个三角形 ;
代码示例 :
// 只显示正面 , 不显示背面//glEnable(GL_CULL_FACE);// 设置顺时针方向 CW : Clock Wind 顺时针方向// 默认是 GL_CCW : Counter Clock Wind 逆时针方向 //glFrontFace(GL_CW);// 主消息循环:while (GetMessage(&msg, nullptr, 0, 0)){if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)){TranslateMessage(&msg);DispatchMessage(&msg);}// 渲染场景// 清除缓冲区 , // 使用之前设置的 glClearColor(1.0, 0.0, 0.0, 1.0) 擦除颜色缓冲区// 红色背景glClear(GL_COLOR_BUFFER_BIT);// 设置当前的绘制颜色 , 4 个 unsigned byte // 每个颜色的分量占一个字节// 参数数据是 R 红色 G 绿色 B 蓝色 A 透明度// 下面设置的含义是白色, 绘制点的时候, 每次都使用白色绘制glColor4ub(255, 255, 255, 255);// 设置线的宽度 glLineWidth(2.0f);//glBegin(GL_POINTS); // 绘制点//glBegin(GL_LINES); // 绘制线//glBegin(GL_LINE_STRIP);// 绘制前后连接的点组成的线//glBegin(GL_LINE_LOOP); // 绘制前后连接的点组成的线 , 并且收尾相连//glBegin(GL_TRIANGLES); // 绘制多个三角形//glBegin(GL_TRIANGLE_STRIP); // 绘制 GL_TRIANGLE_STRIP 三角形// 绘制三角形面glBegin(GL_TRIANGLE_FAN);// 1. 设置白色 , glVertex3f (GLfloat x, GLfloat y, GLfloat z)glColor4ub(255, 255, 255, 255);glVertex3f(0.0f, 0.0f, -10.0f);// 2. 设置绿色 glColor4ub(0, 255, 0, 255);glVertex3f(-5.0f, -2.0f, -10.0f);// 3. 设置蓝色glColor4ub(0, 0, 255, 255);glVertex3f(-3.0f, -2.0f, -10.0f);// 1. 2. 3. 这三个点会绘制一个三角形 // 4. 设置白色 glColor4ub(255, 255, 255, 255);glVertex3f(-1.0f, -2.0f, -10.0f);// 1. 3. 4. 这三个点会绘制一个三角形// 5. 设置绿色 glColor4ub(0, 255, 0, 255);glVertex3f(1.0f, -2.0f, -10.0f);// 1. 3. 5. 这三个点会绘制一个三角形// 绘制三角形结束glEnd();// 将后缓冲区绘制到前台SwapBuffers(dc);}
运行效果 :
4、绘制 6 个点的情况
在 glBegin 和 glEnd 之间放置 666 个点 , 则 1,2,31,2,31,2,3 绘制一个三角形 , 1,3,41,3,41,3,4 绘制一个三角形 , 1,4,51,4,51,4,5 绘制一个三角形 , 1,5,61,5,61,5,6 绘制一个三角形 ;
代码示例 :
// 渲染场景// 清除缓冲区 , // 使用之前设置的 glClearColor(1.0, 0.0, 0.0, 1.0) 擦除颜色缓冲区// 红色背景glClear(GL_COLOR_BUFFER_BIT);// 设置当前的绘制颜色 , 4 个 unsigned byte // 每个颜色的分量占一个字节// 参数数据是 R 红色 G 绿色 B 蓝色 A 透明度// 下面设置的含义是白色, 绘制点的时候, 每次都使用白色绘制glColor4ub(255, 255, 255, 255);// 设置线的宽度 glLineWidth(2.0f);//glBegin(GL_POINTS); // 绘制点//glBegin(GL_LINES); // 绘制线//glBegin(GL_LINE_STRIP);// 绘制前后连接的点组成的线//glBegin(GL_LINE_LOOP); // 绘制前后连接的点组成的线 , 并且收尾相连//glBegin(GL_TRIANGLES); // 绘制多个三角形//glBegin(GL_TRIANGLE_STRIP); // 绘制 GL_TRIANGLE_STRIP 三角形// 绘制三角形面glBegin(GL_TRIANGLE_FAN);// 1. 设置白色 , glVertex3f (GLfloat x, GLfloat y, GLfloat z)glColor4ub(255, 255, 255, 255);glVertex3f(0.0f, 0.0f, -10.0f);// 2. 设置绿色 glColor4ub(0, 255, 0, 255);glVertex3f(-5.0f, -2.0f, -10.0f);// 3. 设置蓝色glColor4ub(0, 0, 255, 255);glVertex3f(-3.0f, -2.0f, -10.0f);// 1. 2. 3. 这三个点会绘制一个三角形 // 4. 设置白色 glColor4ub(255, 255, 255, 255);glVertex3f(-1.0f, -2.0f, -10.0f);// 1. 3. 4. 这三个点会绘制一个三角形// 5. 设置绿色 glColor4ub(0, 255, 0, 255);glVertex3f(1.0f, -2.0f, -10.0f);// 1. 4. 5. 这三个点会绘制一个三角形// 6. 设置蓝色glColor4ub(0, 0, 255, 255);glVertex3f(3.0f, -2.0f, -10.0f);// 1. 5. 6. 这三个点会绘制一个三角形// 绘制三角形结束glEnd();// 将后缓冲区绘制到前台SwapBuffers(dc);}
绘制效果 :
二、相关资源
GitHub 地址 : https://github.com/han1202012/OpenGL
( GitHub 源码始终都会随着后续博客的进度更新覆盖 , 可能没有本博客的相关源码 , 推荐下载博客源码快照 ) ;
博客源码快照 : https://download.csdn.net/download/han1202012/14777770
【OpenGL】十五、OpenGL 绘制三角形 ( 绘制 GL_TRIANGLE_FAN 三角形扇 )相关推荐
- 【Python学习系列二十五】数据结构-有向图绘制
1.场景:从文件中读取节点.有向边,然后绘制. 2.参考代码: # -*- coding: utf-8 -*-import networkx as nx import matplotlib.pyplo ...
- PyQT5 (二十五) 绘图API: 绘制不同类型的直线 的案例drawLine()
绘图API: 绘制不同类型的直线 的案例 import math import sys from PyQt5.QtCore import Qt, QRegExp, QDir from PyQt5.Qt ...
- 【OpenGL】十四、OpenGL 绘制三角形 ( 绘制 GL_TRIANGLE_STRIP 三角形 | GL_TRIANGLE_STRIP 三角形绘制分析 )
文章目录 一.绘制 GL_TRIANGLE_STRIP 三角形 二.GL_TRIANGLE_STRIP 三角形绘制分析 三.相关资源 一.绘制 GL_TRIANGLE_STRIP 三角形 该模式绘制首 ...
- WIN32 opengl三角形绘制
#include "stdafx.h" #include "Win32Project1.h" #include "glut.h"#defin ...
- 【OpenGL】十八、OpenGL 绘制多边形 ( 绘制 GL_POLYGON 模式多边形 )
文章目录 一.绘制 GL_POLYGON 模式多边形 二.多边形绘制顺序分析 三.相关资源 一.绘制 GL_POLYGON 模式多边形 使用 glBegin(GL_POLYGON) 设置绘制多边形 , ...
- 【OpenGL】十九、OpenGL 绘制模式 ( 绘制线框模式 | 绘制点模式 )
文章目录 一.绘制线框模式 二.绘制点模式 三.绘制点模式 ( 圆点 ) 四.相关资源 一.绘制线框模式 使用 glPolygonMode(GL_FRONT, GL_LINE) 设置当前的绘制模式是线 ...
- 【OpenGL】十六、OpenGL 绘制四边形 ( 绘制 GL_QUADS 四边形 )
文章目录 一.绘制 GL_QUADS 四边形 二.绘制多个四边形 三.相关资源 一.绘制 GL_QUADS 四边形 四边形绘制时 , 在 glBegin 方法中传入 GL_QUADS 参数 , 其绘制 ...
- 现代OpenGL教程(一):绘制三角形(imgui+OpenGL3.3)
前言:imgui 是一个开源的GUI框架,自带的例子里面直接集成了glfw+gl3w环境,本例使用的版本是imgui v1.61,下载地址:https://github.com/ocornut/img ...
- 【OpenGL】十三、OpenGL 绘制三角形 ( 绘制单个三角形 | 三角形绘制顺序 | 绘制多个三角形 )
文章目录 一.绘制三角形 二.三角形绘制顺序 1.绘制正面 2.三个点逆时针方向排列 3.三个点顺时针方向排列 4.设置点的正面方向 三.绘制多个三角形 四.相关资源 一.绘制三角形 三角形绘制即绘制 ...
最新文章
- Nignx平滑升级(1.8.0-1.8.1)
- Unity3D游戏开发初探—1.跨平台的游戏引擎让.NET程序员新生
- 用公众号获取 任意公众号文章列表 软件还是免费
- 【dfs】无穷迷宫(jzoj 3924)
- word之八大文本替换技巧
- PL/SQL Developer 导入外部文件数据
- vue之神奇的动态按钮
- Linux下C++可视化调试神器vgdb
- Matlab函数——dct2
- 在.net中序列化读写xml方法的总结
- 基于案例学SQL优化-全套视频教程免费下载
- Python可视化库
- java如何运行_如何运行java程序
- 语义表示——神经网络与深度学习
- 计算机在化学中论文3000字,化学论文范文3000字_化学论文发表
- [NPUCTF2020]碰上彩虹,吃定彩虹
- 【路科V0】systemVerilog基础3——字符串类型
- 单片机实现模块化编程:思维+实例+系统教程(实用程度令人发指)
- oracle dul 12.2.0.2.4 测试
- 牛客-判断一个链表是否为回文结构
热门文章
- 浏览器根据什么来判定脚本失控?
- TP5 行为Behavior用法说明
- beego07----web博客
- 2017/05/07 java 基础 随笔
- 有36个人,36块砖,每人搬了一次,正好搬完。 其中男每人每次搬4块,女每人每次搬3块,小孩两人每次搬一块。问 男、女、小孩各多少人?...
- sql语句的进化--原始篇
- 12 Useful Tips for Machine Learning (转载)
- 2011.8.2号面试
- ASP.NET操作Word文档(转)
- Fastcgi 协议解析及 getpost 使用实例