OpenGL实例:三角形
OpenGL实例:三角形
作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/
更多请查看:计算机图形学
1. 三角形的旋转
#include <GL/glut.h>
typedef GLfloat point2d[]; // a point data type
void triangle(point2d a, point2d b, point2d c) // display a triangle
{
glBegin(GL_TRIANGLES);
glVertex2fv(a);
glVertex2fv(b);
glVertex2fv(c);
glEnd();
}
void display(void)
{
point2d v[] = { {-1.0, -0.58}, {1.0, -0.58}, {0.0, 1.15} }; //initial triangle vertices
glClear(GL_COLOR_BUFFER_BIT); // Clear display window
glColor3f(0.0, 0.0, 1.0); // Set fill color to blue
glLoadIdentity();//应该放在此处,保证每次显示正确
glViewport(, , , ); // Set left viewport
triangle(v[], v[], v[]);
glColor3f(1.0, 0.0, 0.0); // Set fill color to red
glViewport(, , , ); // Set right viewport
glRotatef(90.0, 0.0, 0.0, 1.0); // Rotate about z axis
triangle(v[], v[], v[]); // Display blue triangle
glFlush();
}
void init()
{
glMatrixMode(GL_PROJECTION);
//glLoadIdentity();//如果放在此处,会导致第一次显示正确,再次刷新时图形旋转
gluOrtho2D(-2.0, 2.0, -2.0, 2.0);
glMatrixMode(GL_MODELVIEW);
glClearColor(1.0, 1.0, 1.0, 1.0);
}
void main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(, );
glutCreateWindow("Triangle");
glutDisplayFunc(display);
init();
glutMainLoop();
}

参考网址:Opengl编程实例-红蓝三角形 - 图形学与可视化 - CSDN博客
2. Sierpinski gasket
方法1:非递归
#include <cstdlib>
#include <gl\glut.h>
class GLintPoint
{
public:
GLint x;
GLint y;
GLintPoint(GLint a, GLint b) {
x = a;
y = b;
}
};
void myInit(void)
{
glClearColor(0.0, 0.0, 0.0, 0.0);
glColor3f(1.0, 0.0, 0.0);
glPointSize(2.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0.0, 600.0, 0.0, 600.0);
}
void drawDot(GLint x, GLint y) {
glBegin(GL_POINTS);
glVertex2i(x, y);
glEnd();
}
void myDisplay() {
glClear(GL_COLOR_BUFFER_BIT);
GLintPoint T[] = { GLintPoint(, ), GLintPoint(, ), GLintPoint(, ) };
int index = rand() % ;
GLintPoint point = T[index];
drawDot(point.x, point.y);
for (int i = ; i < ; i++) {
index = rand() % ;
point.x = (point.x + T[index].x) / ;
point.y = (point.y + T[index].y) / ;
drawDot(point.x, point.y);
}
glFlush();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
glutInitWindowPosition(, );
glutInitWindowSize(, );
glutCreateWindow("Sierphiski gasket");
glutDisplayFunc(&myDisplay);
myInit();
glutMainLoop();
return ;
}

方法2:递归
#include <GL/glut.h>
#include<stdlib.h>
/* initial triangle */
GLfloat v[][] = { {10.0, 10.0}, {600.0, 10.0}, {300.0, 600.0} };
int n;
void triangle(GLfloat *a, GLfloat *b, GLfloat *c)
/* display one triangle */
{
glVertex2fv(a);
glVertex2fv(b);
glVertex2fv(c);
}
void divide_triangle(GLfloat *a, GLfloat *b, GLfloat *c, int m)
{
/* triangle subdivision using vertex numbers */
GLfloat v0[], v1[], v2[];
int j;
if (m > )
{
for (j = ; j < ; j++) v0[j] = (a[j] + b[j]) / ;
for (j = ; j < ; j++) v1[j] = (a[j] + c[j]) / ;
for (j = ; j < ; j++) v2[j] = (b[j] + c[j]) / ;
divide_triangle(a, v0, v1, m - );
divide_triangle(c, v1, v2, m - );
divide_triangle(b, v2, v0, m - );
}
else triangle(a, b, c); /* draw triangle at end of recursion */
}
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_TRIANGLES);
divide_triangle(v[], v[], v[], n);
glEnd();
glFlush();
}
void myinit()
{
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0.0, 600.0, 0.0, 600.0);
glMatrixMode(GL_MODELVIEW);
glClearColor(0.0, 0.0, 0.0, 0.0);
glColor3f(1.0, 0.0, 0.0);
}
void main(int argc, char **argv)
{
n = ;
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(, );
glutCreateWindow("Sierpinski Gasket");
glutDisplayFunc(display);
myinit();
glutMainLoop(); }

OpenGL实例:三角形的更多相关文章
- OpenGL实例:几何变换
OpenGL实例:几何变换 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 更多请查看:计算机图形学 1. 平移 #include <GL/glu ...
- OpenGL 用三角形模拟生成球面
在看OpenGL红皮书,看到生成球体这节,讲了很多,总感觉不如自己动手写一些代码来的实在,用OpenGL中三角形模拟球形生成.主要要点,模型视图变换,多边形表面环绕一致性,矩阵堆栈.先贴上代码. 虽然 ...
- OpenGL实例:纹理映射
OpenGL实例:纹理映射 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 更多请查看:计算机图形学 1. 介绍 用于指定一维.二维和三维纹理的函数分别 ...
- 【OpenGL】三角形
步骤 初始化顶点数组对象VAO 分配顶点缓冲对象VBO 将顶点数据载入缓冲对象中 glBufferData() 链接顶点属性 glVertexAttribPointer(指定了顶点着色器的变量与我们存 ...
- OpenGL(3)-三角形
写在前面 从这节开始,会接触到很多基本概念,原书我也是读了很多遍,一遍一遍去理解其中的意思,以及他们之间的关系. 概念 顶点数组对象:VAO 顶点缓冲对象:VBO 索引缓冲对象:EBO|IBO Ope ...
- opengl绘制三角形
顶点数组对象:Vertex Array Object,VAO 顶点缓冲对象:Vertex Buffer Object,VBO 索引缓冲对象:Element Buffer Object,EBO或Inde ...
- 1.opengl绘制三角形
顶点数组对象:Vertex Array Object,VAO,用于存储顶点状态配置信息,每当界面刷新时,则通过VAO进行绘制. 顶点缓冲对象:Vertex Buffer Object,VBO,通过VB ...
- OpenGL2-绘制三角形
代码下载 /*** 该例子展示如何使用OpenGL绘制三角形* 为什么说绘制三角形呢 ?三维空间里面,我们看到的机会大多数* 漂亮的模型,建筑,任务,机会都是有三角形网络组成.可以说三角形* 是组成三 ...
- OpenGL绘制自由落体小球
OpenGL绘制自由落体小球 一. 程序运行的软硬件环境 本次设计在window10系统下进行,运用C++进行编写,在CodeBlocks环境下使用OpenGL进行设计. 所需环境配置分为2部分 ...
随机推荐
- BBS论坛(三十二)
32.帖子排序功能完成 (1)front_index.html <ul class="post-group-head"> {% if current_sort==1 % ...
- Echarts图标自适应问题(已解决)
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- 浅谈Web开发中的定时任务
曾经做过Windows server下的定时任务的业务,最近又做了一些Linux下使用Crontab做的定时任务的业务,觉得有必要进行一次小结,于是有了如下这篇文章. Windows Server下 ...
- 《HelloGitHub月刊》第 07 期
最近工作上的事比较多,<HelloGitHub>月刊第07期拖到月底才发. 本期月刊对logo和月刊的排版进行了优化,不知道大家的反馈如何,还望大家多多反馈,让<HelloGitHu ...
- AVL树和平衡二叉树 平衡因子 右旋转LL 左旋转RR LR RL
前言 今天要介绍几种高级数据结构AVL树,介绍之前AVL,会先说明平衡二叉树,并将树的学习路线进行总结,并介绍维持平衡的方法:右旋转.左旋转. 一.树学习路线 1.路线总结 总结了一下树的学习路线,如 ...
- 从无到有-在create-react-app基础上接入react-router、redux-saga
搭建项目框架 新建项目 执行如下代码,用create-react-app来建立项目的基础框架,然后安装需要用到的依赖. $ npx create-react-app my-test-project $ ...
- spring原理案例-基本项目搭建 02 spring jar包详解 spring jar包的用途
Spring4 Jar包详解 SpringJava Spring AOP: Spring的面向切面编程,提供AOP(面向切面编程)的实现 Spring Aspects: Spring提供的对Aspec ...
- CentOS 7 源码编译安装 NodeJS
1.安装 gcc.gcc-c++ yum -y install gcc gcc-c++ kernel-devel 2.下载源码 wget https://nodejs.org/dist/v8.11.3 ...
- Linux学习笔记之Django项目部署(CentOS)----进阶篇
一.引入 当我们开发好了一个Django项目之后是需要部署到服务器上的,这样才能正式使用这个项目.之前用了一个运行.sh文件的方法让项目得以在后台运行,其实随着学习的深入,这种方法其实是有点low的, ...
- Laravel5.5 邮件驱动使用 SMTP 驱动实现邮件发送
laravel5.5 邮件驱动 Laravel 支持多种邮件驱动,包括 smtp.Mailgun.Maildrill.Amazon SES.mail 和 sendmail.Mailgun . Mail ...