1.

glBegin(GL_TRANGLES);

........

glend();

2.多边形的环绕方向:逆时针和顺时针的正反面

GLFront(GL_CCW)和GLFront(GL_CW);

3.三角形带

glBegin(GL_TRANGLE_STRIP);

.......

glend();

4.三角形扇

glBegin(GL_TRANGLE_FAN);

.......

glend();

例子:

// TRANGLE.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h"
#include<GL\glut.h>
#include<math.h>
#define PI 3.14
GLfloat Range=100.0f ;
bool DEPTH_TEST=false;
bool CULL_FACE=false;
bool OUTLINE_BACK=false;
static GLfloat xRot=0.0f;
static GLfloat yRot=0.0f;
bool STOP_DEPTHTEST=false;
void Init()
{
glClearColor(0.0f,0.0f,0.0f,1.0f); glFrontFace(GL_CW); //单调着色
glShadeModel(GL_FLAT);
}
void ChangeSize(int w,int h)
{
if (h==)
{
h=;
}
glViewport(,,w,h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
if (w<=h)
{
glOrtho(-Range,Range,-Range*h/w,Range*h/w,-Range,Range);
}
else
{
glOrtho(-Range*w/h,Range*w/h,-Range,Range,-Range,Range);
}
glMatrixMode(GL_MODELVIEW);
glLoadIdentity(); }
void MyMenu(int value)
{
switch (value)
{
case :
DEPTH_TEST=!DEPTH_TEST;
break;
case :
CULL_FACE=!CULL_FACE;
break;
case :
OUTLINE_BACK=!OUTLINE_BACK;
break;
case :
STOP_DEPTHTEST=true;
default:
break;
}
}
void MyspecialKey(int key,int x,int y)
{
if (key==GLUT_KEY_LEFT)
{
yRot-=5.0f;
}
if (key==GLUT_KEY_RIGHT)
{
yRot+=5.0f;
}
if (key==GLUT_KEY_UP)
{
xRot-=5.0f;
}
if (key==GLUT_KEY_DOWN)
{
xRot+=5.0f;
}
if (xRot>355.0f)
{
xRot=0.0f;
}
if (xRot<=-5.0f)
{
xRot=355.0f;
}
if (yRot>355.0f)
{
yRot=0.0f;
}
if (yRot<=-5.0f)
{
yRot=355.0f;
} glutPostRedisplay();
}
void Mydisplay()
{
GLint color=;
GLfloat angle=0.0f;
GLfloat x,y;
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
if (DEPTH_TEST)
{
glEnable(GL_DEPTH_TEST);
}
else
{
glDisable(GL_DEPTH_TEST);
} if (CULL_FACE)
{
glEnable(GL_CULL_FACE);
glCullFace(GL_BACK);
}
else
{
glDisable(GL_CULL_FACE);
} if (STOP_DEPTHTEST)
{
glDisable(GL_DEPTH_TEST);
}
if (OUTLINE_BACK)
{
glPolygonMode(GL_BACK,GL_LINE);
}
else
{
glPolygonMode(GL_BACK,GL_FILL);
} glPushMatrix();
glRotatef(xRot,1.0f,0.0f,0.0f);
glRotatef(yRot,0.0f,1.0f,0.0f); glBegin(GL_TRIANGLE_FAN);
glVertex3f(0.0f,0.0f,75.0f);
for (angle = ;angle<PI*; angle+=(PI/))
{
x=50.0f*cos(angle);
y=50.0f*sin(angle);
if ((color%)==)
{
glColor3f(0.0f,1.0f,0.0f);
}
else
{
glColor3f(1.0f,0.0f,0.0f);
}
color++;
glVertex3f(x,y,0.0f);
}
glEnd();
glBegin(GL_TRIANGLE_FAN);
glVertex3f(0.0f,0.0f,0.0f);
for (angle = ;angle<PI*; angle+=(PI/))
{
x=50.0f*cos(angle);
y=50.0f*sin(angle);
if ((color%)==)
{
glColor3f(0.0f,1.0f,0.0f);
}
else
{
glColor3f(1.0f,0.0f,0.0f);
}
color++;
glVertex3f(x,y,0.0f);
}
glEnd(); glPopMatrix();
glutSwapBuffers(); }
int main(int argc,char ** argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_RGB|GLUT_DOUBLE|GLUT_DEPTH);
glutInitWindowPosition(,);
glutInitWindowSize(,);
glutCreateWindow("Trangle"); Init(); glutDisplayFunc(Mydisplay);
glutReshapeFunc(ChangeSize); glutCreateMenu(MyMenu);
glutAddMenuEntry("Depth Test",);
glutAddMenuEntry("CullFace",);
glutAddMenuEntry("Outline Back",);
glutAddMenuEntry("STOP DEPTHTEST",);
glutAttachMenu(GLUT_RIGHT_BUTTON); glutSpecialFunc(MyspecialKey);
glutMainLoop(); }

1.深度测试

2.隐藏面消除

3.线框模式:glpoloygonModel(GLenum face,GL_LINE/GL_FILL);

4.着色模式 glshademodel(GL_FLAT)和glshademodel(GL_SMOOTH);

绘制图形与3D增强技巧(三)----三角形图元TRANGLE的更多相关文章

  1. 绘制图形与3D增强技巧(二)----直线图元

    一. glBegin(GL_LINES); glend(); 二.线带和线环 glBegin(GL_LINE_STRIP); glend(); glBegin(GL_LINE_LOOP); glend ...

  2. 绘制图形与3D增强技巧(五)----多边形图元的使用及其他

    1.注意多边形图元中的多边形只能是平面的,而且必须为凸多边形,且多边形的边不能弯曲 2.细分和边界,可以人为设置边界边和非边界边 glEdgeFlag(true)//接下来所有点均为边界边起点 glE ...

  3. 绘制图形与3D增强技巧(四)----多边形图元及其点画模式

    1.四边形图元 glBegin(GL_QUADS); glend(); 2.通用多边形 glBegin(GL_POLYGONS); glend(); 3.多边形点画模式 glenable(GL_POL ...

  4. 绘制图形与3D增强技巧(二)----直线图元之点画

    一.直线的点画模式:即并不完全填充所有像素来画一条直线,而是用点画的形式,间隔地画一条直线 首先启用点画模式: glEnable(GL_LINE_STIPPLE); 然后自定义创建自己的点画模式 gl ...

  5. 绘制图形与3D增强技巧(一)----点图元

    1.图元 1.点图元 glBegin(GL_POINTS); glend(); 程序:点图元的应用 #include "stdafx.h" #include<stdio.h& ...

  6. 在Android中使用OpenGL ES进行开发第(三)节:绘制图形

    一.前期基础知识储备笔者计划写三篇文章来详细分析OpenGL ES基础的同时也是入门关键的三个点: ①OpenGL ES是什么?与OpenGL的关系是什么?——概念部分 ②使用OpenGLES绘制2D ...

  7. 3D引擎为什么使用三角形绘制曲面

    这个问题是我第一次接触3D开发就有的疑问,最近在看<游戏引擎架构>(Game Engine Architecture),在书中找到了答案. 三角网格(Triangle Mesh),游戏开发 ...

  8. OpenGL学习进程(8)第六课:点、边和图形(三)绘制图形

    本节是OpenGL学习的第六个课时,下面介绍OpenGL图形的相关知识:     (1)多边形的概念: 多边形是由多条线段首尾相连而形成的闭合区域.OpenGL规定,一个多边形必须是一个“凸多边形”. ...

  9. OpenGL学习进程(4)第二课:绘制图形

    本节是OpenGL学习的第二个课时,下面介绍如何用点和线来绘制图形:     (1)用点的坐标来绘制矩形: #include <GL/glut.h> void display(void) ...

随机推荐

  1. python中的字符串操作

    #!/usr/bin/python # -*- coding: UTF-8 -*- ''' str.capitalize() ''' str = 'this is a string example' ...

  2. 039医疗项目-模块四:采购单模块—采购单的创建-----------Dao层,service层,Acion层

    我们根据数据库里面的表格:生成对应的Mapper接口文件和...Mapperxml文件: YYCGD:采购单模板表. YYCGD2014:采购单动态生成表,由存储过程生成. YYCGDMX:采购单明细 ...

  3. CSS3 perspecitve属性

    M M .div1 { position: relative; height: 150px; width: 150px; margin: 0px; padding:2px; border: 1px s ...

  4. 关于div标签的title属性一闪一闪不正常显示的原因

    弹出了chrome的开发工具就会出现以上问题.

  5. 多线程处理中Future的妙用

    java 中Future是一个未来对象,里面保存这线程处理结果,它像一个提货凭证,拿着它你可以随时去提取结果.在两种情况下,离开Future几乎很难办.一种情况是拆分订单,比如你的应用收到一个批量订单 ...

  6. GitHub 上一份很受欢迎的前端代码优化指南-强烈推荐收藏

    看到一份很受欢迎的前端代码指南,根据自己的理解进行了翻译,但能力有限,对一些JS代码理解不了,如有错误,望斧正. HTML 语义化标签 HTML5 提供了很多语义化元素,更好地帮助描述内容.希望你能从 ...

  7. [Codevs 1421]秋静叶&秋穣子(最大-最小博弈)

    题目:http://codevs.cn/problem/1421/ 分析:有向树上的最大-最小博弈 先手与后手的策略不同: 先手A:让对方取得尽量少的前提下,自己取得尽量大 后手B:让自己取得尽量多的 ...

  8. operating expense & captial expenditure

    营运成本(营业成本, operating expense, OPEX) 指的是运行企业的持续性.消耗性的支出,与之对照的是资本支出(captial expenditure, CAPEX).例如:购买影 ...

  9. DataGridView 绑定List集合后实现自定义排序

    这里只贴主要代码,dataList是已添加数据的全局变量,绑定数据源 datagridview1.DataSource = dataList,以下是核心代码. 实现点击列表头实现自定义排序 priva ...

  10. wsdl中含ref="s:schema"时处理的

    dos窗口,在生成客户端代码的时候,出现了下图所示的错误: java是通过JAXB解析wsdl文件的,出现这种错误的原因是: 是JAXB目前还不支持ref 这种元素的解析 s:schema是types ...