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

1.图元

  1.点图元

   glBegin(GL_POINTS);

   glend();

程序:点图元的应用

#include "stdafx.h"
#include<stdio.h>
#include<GL\glut.h>
#include<math.h>
#define PI 3.14

GLfloat xRot=0.0f;
GLfloat yRot=0.0f;
void Init()
{
    glClearColor(0.0,0.0,0.0,0.0);

}
void ChangeSize(int w,int h)
{
    glViewport(0,0,w,h);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    GLfloat aspect=w/h;
    if (w<=h)
    {
        glOrtho(-100.0,100.0,-100.0/aspect,100.0/aspect,-100.0,100.0);
    }
    else
    {
        glOrtho(-100.0*aspect,100.0*aspect,-100.0,100.0,-100.0,100.0);
    }
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();

}

void Mydisplay()
{
    GLfloat x,y,angle,z=-50.0f;
    GLfloat sizes[2];
    GLfloat step;
    GLfloat CurPointSize;
    glGetFloatv(GL_POINT_SIZE_RANGE,sizes);
    glGetFloatv(GL_POINT_SIZE_GRANULARITY,&step);
    CurPointSize=sizes[0];
    glColor3f(0.0f,1.0f,0.0f);
    glClear(GL_COLOR_BUFFER_BIT);
    glPushMatrix();
    glRotatef(xRot,1.0,0.0,0.0);
    glRotatef(yRot,0.0,1.0,0.0);

    for (angle = 0.0f; angle <2*PI*3; angle+=0.1f)
    {
        x=50.0f*cos(angle);
        y=50.0f*sin(angle);
        glBegin(GL_POINTS);
        glVertex3f(x,y,z);
        glEnd();
        z+=0.5f;
        CurPointSize+=step;
    }

    glPopMatrix();
    glutSwapBuffers();

}
void Mykeys(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();

}
int main(int argc,char ** argv)
{

    glutInit(&argc,argv);
    glutInitDisplayMode(GLUT_RGB|GLUT_DOUBLE);

    glutInitWindowPosition(500,500);
    glutInitWindowSize(800,800);
    glutCreateWindow("Points");

    Init();
    glutDisplayFunc(Mydisplay);
    glutReshapeFunc(ChangeSize);
    glutSpecialFunc(Mykeys);
    glutMainLoop();

}

知识点:

1.键盘响应函数

2.矩阵堆栈

3.矩阵初始化

4.点图元的大小:glpointsize();

5.获得点图元的大小范围和增量大小

  GLfloat sizes[2];

  GLfloat step;

  glGetFloatv(GL_POINT_SIZE_RANGE,sizes);

  glGetFloatv(GL_POINT_SIZE_GRANULARITY,&step);

时间: 2024-10-09 09:42:24

绘制图形与3D增强技巧(一)----点图元的相关文章

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

1.注意多边形图元中的多边形只能是平面的,而且必须为凸多边形,且多边形的边不能弯曲 2.细分和边界,可以人为设置边界边和非边界边 glEdgeFlag(true)//接下来所有点均为边界边起点 glEdgeFlag(false)//接下来所有点均为非边界边起点 3.操纵深度缓冲区 glutinitdispalymode(GLUT_DEPTH);//开辟深度缓冲区 glenable(GL_DEPTH_TEST);//启用深度测试:即使未启用,深度值仍然写入深度缓冲区,只不过不进行测试 glDept

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

1.四边形图元 glBegin(GL_QUADS); glend(); 2.通用多边形 glBegin(GL_POLYGONS); glend(); 3.多边形点画模式 glenable(GL_POLYGON_STIPPLE); glPolygonStipple(pBitmp); 其中pBitmap为一块指定了数据区域的指针, #include "stdafx.h" // PStipple.cpp // OpenGL SuperBible // Demonstrates OpenGL

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

一.直线的点画模式:即并不完全填充所有像素来画一条直线,而是用点画的形式,间隔地画一条直线 首先启用点画模式: glEnable(GL_LINE_STIPPLE); 然后自定义创建自己的点画模式 glLineStipple(GLlint factor,GLushort pattern); 其中第一个参数factor为乘法因子,第二个参数pattern为自定义的点画模式:一个16位的值,每个位表示线段的一部分状态为打开或者关闭,采用16进制,例如:0x5555 直线点画的实例程序: // STIP

绘制图形与3D增强技巧(三)----三角形图元TRANGLE

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 "std

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

一. glBegin(GL_LINES); glend(); 二.线带和线环 glBegin(GL_LINE_STRIP); glend(); glBegin(GL_LINE_LOOP); glend(); 三.设置直线宽度 glLineWidth(GLfloat width); 四.获得直线宽度范围和增量 GLfloat sizes[2]; GLfloat add; glGetFloatv(GL_LINE_WIDTH_RANGE,sizes); glGetFloatv(GL_LINE_WIDT

【UWP通用应用开发】编辑文本、绘制图形、3D透视效果及绘制时钟实战

编辑文本及键盘输入 相信大家都会使用TextBox,但如果要让文本在TextBox中换行该怎么做呢?将TextWrapping属性设置为Wrap,将AcceptsReturn属性设置为True就好咯. PasswordBox很明显就是一个密码框了,和其他的控件相比其有2个特殊之处,一个是其可以用MaxLength来控制最大的长度,一个是用PasswordChanged来捕捉密码的改名.显然比如QQ密码的MaxLength就是16位了,而PasswordChanged可以用来监测比如用户设置的密码

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

本节是OpenGL学习的第二个课时,下面介绍如何用点和线来绘制图形:     (1)用点的坐标来绘制矩形: #include <GL/glut.h> void display(void) { // clear all pixels glClear(GL_COLOR_BUFFER_BIT); // draw yellow polygon (rectangle) with corners at glColor3f(1.0, 1.0, 0.0); glBegin(GL_POLYGON); //绘制开

html5 Canvas绘制图形入门详解

html5,这个应该就不需要多作介绍了,只要是开发人员应该都不会陌生.html5是「新兴」的网页技术标准,目前,除IE8及其以下版本的IE浏览器之外,几乎所有主流浏览器(FireFox.Chrome.Opera.Safari.IE9+)都已经开始支持html5了.除此之外,在移动浏览器市场上,众多的移动浏览器也纷纷展开关于「html5的支持能力以及性能表现」的军备竞赛.html作为革命性的网页技术标准,再加上众多浏览器厂商或组织的鼎力支持,可以想见,html5将会成为未来网页技术的领头羊. ht

图表控件TeeChart干货分享(绘制2D、3D实时曲线---C++示例源代码--网络首发)

最近接手了一个项目,其中涉及到MFC和实时曲线显示的问题,由于我之前从未接触过此类技术,现学现搞,把其间用到的觉得对初学者有用的东西,总结一下. 尤其是关于TeeChart控件部分,网上资料零碎,且很多不全面,代码难以使用.我苦寻数周在外国一些网站上寻到了一些有用的信息,把相关的可运行的代码示例贴在文中,希望能帮到后来者. MFC部分: 一. 分割窗体 新建一个单文档的MFC工程(注意在向导中设置窗口最大化和分割窗口支持). 新建两个对话框,用于分割窗口 [注意]对话框的样式(Style)属性改