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部分 ...
随机推荐
- 使用Redmine的PHP API时,如何判断需求是否为原子需求
使用Redmine的PHP API时,如何判断需求是否为原子需求 使用redmine的PHP接口时,怎样才能判断需求是否为原子需求呢,下面给出具体的做法: /** * 判断是否为原子需求, 即是否依然 ...
- 从锅炉工到AI专家(5)
图像识别基本原理 从上一篇开始,我们终于进入到了TensorFlow机器学习的世界.采用第一个分类算法进行手写数字识别得到了一个91%左右的识别率结果,进展可喜,但成绩尚不能令人满意. 结果不满意的原 ...
- Spring 中 SQL 的存储过程
SimpleJdbcCall 类可以被用于调用一个包含 IN 和 OUT 参数的存储过程.你可以在处理任何一个 RDBMS 时使用这个方法,就像 Apache Derby, DB2, MySQL, M ...
- ASP.NET页面之间的几种传值方法
首先是QueryString方法传值: QueryString是一种非常简单的传值方式,他可以将传送的值显示在浏览器的地址栏中.如果是传递一个或多个安全性要求不高或是结构简单的数值时,可以使用这个方法 ...
- EF架构~FluentValidation实体检验与实体分离了
回到目录 在MVC,EF,LINQ环境里,我们经常会用到DataModel(DO)和ViewModel(VO),可能对于它们的属性校验我们会采用特性的方式,当然这很直观,就连微软的DEMO也是如些,一 ...
- (五)通过Python的select监控多个描述符实现并发连接
概述 本文通过使用select改写之前的服务器程序通过监控多个套接字描述符来实现并发连接并加入了一些机制让程序更加健壮,不过我们所有的实验都是建立在单词发送数据不会超过1024字节,如果超过你需要做特 ...
- Swing——简单的计算器
前言 这是博主学习完Swing后,使用Swing实现的一个简单计算器.做简单的计算器的目的是将最近所学的Swing给应用起来,写博文介绍的目的是记录做这个计算器的思路.下面将分为界面和事件两部分介绍. ...
- 利用Sklearn实现加州房产价格预测,学习运用机器学习的整个流程(包含很多细节注解)
Chapter1_housing_price_predict .caret, .dropup > .btn > .caret { border-top-color: #000 !impor ...
- Spark框架详解
一.引言 作者:Albert陈凯链接:https://www.jianshu.com/p/f3181afec605來源:简书 Introduction 本文主要讨论 Apache Spark 的设计与 ...
- Odd-e CSD Course Day 3
Mocking 在提到Mocking時,其實有提到為什麼我們需要 Mocking from: Odd-e CSD course 可以透過上圖來了解這個概念,當我們需要用到 Mock 時,其實是因為我們 ...