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实例:三角形的更多相关文章

  1. OpenGL实例:几何变换

    OpenGL实例:几何变换 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 更多请查看:计算机图形学 1. 平移 #include <GL/glu ...

  2. OpenGL 用三角形模拟生成球面

    在看OpenGL红皮书,看到生成球体这节,讲了很多,总感觉不如自己动手写一些代码来的实在,用OpenGL中三角形模拟球形生成.主要要点,模型视图变换,多边形表面环绕一致性,矩阵堆栈.先贴上代码. 虽然 ...

  3. OpenGL实例:纹理映射

    OpenGL实例:纹理映射 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 更多请查看:计算机图形学 1. 介绍 用于指定一维.二维和三维纹理的函数分别 ...

  4. 【OpenGL】三角形

    步骤 初始化顶点数组对象VAO 分配顶点缓冲对象VBO 将顶点数据载入缓冲对象中 glBufferData() 链接顶点属性 glVertexAttribPointer(指定了顶点着色器的变量与我们存 ...

  5. OpenGL(3)-三角形

    写在前面 从这节开始,会接触到很多基本概念,原书我也是读了很多遍,一遍一遍去理解其中的意思,以及他们之间的关系. 概念 顶点数组对象:VAO 顶点缓冲对象:VBO 索引缓冲对象:EBO|IBO Ope ...

  6. opengl绘制三角形

    顶点数组对象:Vertex Array Object,VAO 顶点缓冲对象:Vertex Buffer Object,VBO 索引缓冲对象:Element Buffer Object,EBO或Inde ...

  7. 1.opengl绘制三角形

    顶点数组对象:Vertex Array Object,VAO,用于存储顶点状态配置信息,每当界面刷新时,则通过VAO进行绘制. 顶点缓冲对象:Vertex Buffer Object,VBO,通过VB ...

  8. OpenGL2-绘制三角形

    代码下载 /*** 该例子展示如何使用OpenGL绘制三角形* 为什么说绘制三角形呢 ?三维空间里面,我们看到的机会大多数* 漂亮的模型,建筑,任务,机会都是有三角形网络组成.可以说三角形* 是组成三 ...

  9. OpenGL绘制自由落体小球

    OpenGL绘制自由落体小球 一.    程序运行的软硬件环境 本次设计在window10系统下进行,运用C++进行编写,在CodeBlocks环境下使用OpenGL进行设计. 所需环境配置分为2部分 ...

随机推荐

  1. vue + hbuilder 开发备忘录

    踩过的坑: axios 安卓低版本兼容性处理 阻止表单中,button默认事件,出现刷新问题. 设置滚动条的位置 vue 数据和对象数据变化 dom结构不变 android低版本 白屏问题 你是不是用 ...

  2. SVN客户端安装与使用

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6623148.html  一:SVN客户端下载与安装 下载网址:https://tortoisesvn.net/ ...

  3. 封装cookie设置和获取的简易方法

    (function() { var tool = { expires: "expires", // 过期时间expires path: "path", // 路 ...

  4. IntelliJ IDEA部署tomcat时Edit Configuration Deployment无artifact选项

    IntelliJ IDEA,IntelliJ Idea创建web项目之后在配置web项目时,选择Edit Configration部署Tomcat,Deployment里点击添加无artifact选项 ...

  5. Flask 启动报错 error: [Errno 10053]

    首先这不是 Flask 库的异常,该报错经常出现在 Python2 中. 问题所在:Python2 中 SocketServer 模块的问题. 解决办法: 不要用自带的 Server,通过 gunic ...

  6. 用PMML实现机器学习模型的跨平台上线

    在机器学习用于产品的时候,我们经常会遇到跨平台的问题.比如我们用Python基于一系列的机器学习库训练了一个模型,但是有时候其他的产品和项目想把这个模型集成进去,但是这些产品很多只支持某些特定的生产环 ...

  7. nginx普通配置/负载均衡配置/ssl/https配置

    1.nginx普通配置 server { listen ; server_name jqlin.lynch.com; access_log /var/log/nginx/main.log main; ...

  8. leetcode — validate-binary-search-tree

    import apple.laf.JRSUIUtils; /** * Source : https://oj.leetcode.com/problems/validate-binary-search- ...

  9. leetcode — word-search

    import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** * Source : https://o ...

  10. 基于hashicorp/raft的分布式一致性实战教学

    本文由云+社区发表 作者:Super 导语:hashicorp/raft是raft算法的一种比较流行的golang实现,基于它能够比较方便的构建具有强一致性的分布式系统.本文通过实现一个简单的分布式缓 ...