动态圆锥

代码如下:

#include <windows.h>
//#include <GLUT/glut.h>
#include <GL/glut.h>
#include <math.h>
#include <iostream>
using namespace std;

#define GL_PI 3.1415f

void RenderScene()
{
    static GLfloat xRot = 0,yRot = 0;
    GLfloat x,y,angle;
    int iPivot = 1;
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    GLboolean bCull = true;
    GLboolean bDepth = true;
    GLboolean bOutline = true;
    if(bCull)              //启动剔除标志  
        glEnable(GL_CULL_FACE);
    else
        glDisable(GL_CULL_FACE);

    if(bDepth)              //启用深度测试标志
        glEnable(GL_DEPTH_TEST);
    else
        glDisable(GL_DEPTH_TEST);

    if(bOutline)            //启用多边形模式标志
        glPolygonMode(GL_BACK,GL_LINE);
    else
        glPolygonMode(GL_BACK,GL_FILL);

    glPushMatrix();
    glRotatef(45.0f,1.0f,0.0f,0.0f);
    glRotatef(45.0f,0.0f,1.0f,0.0f);

    glRotatef(xRot,1.0f,0.0f,0.0f);
    glRotatef(yRot,0.0f,1.0f,0.0f);

    glFrontFace(GL_CW);

    glBegin(GL_TRIANGLE_FAN);

        glVertex3f(0.0f,0.0f,75.0f);

        for(angle = 0.0f;angle < (2.0*GL_PI);angle += (GL_PI)/8.0)
        {
            x = 50.0f*sin(angle);
            y = 50.0f*cos(angle);

            if((iPivot %2)==0)
                glColor3f(0.0f,0.0f,1.0f);
            else
                glColor3f(1.0f,0.0f,0.0f);

            iPivot++;
            glVertex2f(x,y);
        }
    glEnd();

    //glFrontFace(GL_CCW|GL_CW);
    glBegin(GL_TRIANGLE_FAN);

    glVertex2f(0.0f,0.0f);

    for(angle = 0.0f;angle < (2.0f*GL_PI);angle += (GL_PI)/8.0f)
    {
        x = 50.0f*sin(angle);
        y = 50.0f*cos(angle);

        if((iPivot %2)==0)
            glColor3f(0.0f,0.0f,1.0f);
        else
            glColor3f(1.0f,0.0f,0.0f);

        iPivot++;
        glVertex2f(x,y);
    }
    glEnd();

    if(xRot < 360)
        xRot += 5.0f;
    else
        xRot = 0.0f;

    if(yRot < 360)
        yRot += 5.0f;
    else
        yRot = 0;
    glPopMatrix();
    glutSwapBuffers();
}
void TimerFunction(int value)
{
    glutPostRedisplay();
    glutTimerFunc(33,TimerFunction,1);
}
void ChangeSize(GLsizei w,GLsizei h)
{
    if(h==0)
        h = 1;

    GLfloat aspectRatio = (GLfloat)w/(GLfloat)h;

    glViewport(0,0,w,h);

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();

    if(w<=h)
        glOrtho(-100,100,-100/aspectRatio,100/aspectRatio,100.0,-100.0);
    else
        glOrtho(-100*aspectRatio,100*aspectRatio,-100,100,100.0,-100.0);

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();

}

void SetupRC()
{
    glClearColor(0.0f,0.0f,0.0f,1.0f);
    glColor3f(1.0f,0.0f,0.0f);
    glShadeModel(GL_FLAT);
    glFrontFace(GL_CW);
}

int main(int argc, char *argv[])
{
   glutInit(&argc,argv);
   glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH);
   glutInitWindowSize(800,600);
   glutCreateWindow("Simple");

   glutDisplayFunc(RenderScene);
   glutReshapeFunc(ChangeSize);
   glutTimerFunc(33,TimerFunction,1);

   SetupRC();
   glutMainLoop();
   return 0;
}
时间: 2024-10-09 11:00:16

动态圆锥的相关文章

几何画板怎样动态生成圆锥

利用几何画板的动画效果可演示动态生态圆锥的过程,通过演示,让学生更加理解圆锥的形成过程,体会到动手实践在解决数学问题中的重要性. 利用几何画板动态生成圆锥的制作过程如下: 一.作一个虚线椭圆 二.作一个实线半椭圆 三.作圆锥的中截面 过A点作BF的垂线,在垂线上任取一个点I,连接BI和FI,得到圆锥的中截面:选中B1,调节椭圆,使其有较好的视觉效果. 四.动态生成圆锥 用鼠标选中椭圆轨迹,在其上任取一点J,连接IJ,即为动态母线:选中IJ,单击[度量]|[长度]|,得到IJ的长度:选中IJ和IJ

怎样动态演示椭圆的画法?

根据椭圆的定义,可以知道画椭圆的方法有很多,那么要怎么演示动态画椭圆呢?这就需要借助专业的画图软件几何画板了,下面就来学习具体绘制方法. 几何画板是一个优秀的专业学科平台软件,代表了当代专业工具平台类教学软件的发展方向.比如在学习椭圆圆锥曲线知识时,如果仅依靠黑板教学,是没法动态演示椭圆的,只能按照椭圆数据按部就班的绘图,但是如果利用几何画板,就可以动态演示画椭圆过程,而且还可以对椭圆的高度进行控制,下面就一起学习画动态画椭圆的方法. 几何画板软件免费获取地址:http://www.jihehu

c语言动态链表的创建

创建动态连链表就是将一个个节点连接起来 (1)动态生成节点 (2)输入节点数据 (3)将节点链在一起 例: typedef struct Data { char num[20]; char name[10]; char sex; float english; float chinese; float math; }; typedef struct Node { struct Data data;//结构体类型//结构体嵌套 struct Node* next;//结构体指针型 }node,*Pn

JS获取图片的缩略图,并且动态的加载多张图片

找了好多资料也没有找到该死的ie的解决办法,最后放弃了ie <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>js获取缩略图</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <st

C# 动态生成WebService,无需添加引用

C#项目调用WebService是很常见的现象,但一旦修改链接地址就需要重新更新引用很是麻烦,这里跟大家分享一个通过地址,无需添加引用动态生成Webservice的小方法 方法类: 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.ServiceModel; 6 using System.ServiceModel.Channels

将Excel导入DataGridView 中的"select * from [Sheet1$]"中[ ]里面表单名的动态获取

Sheet1$是Excel默认的第一个表名,如果改动:select * from [Sheet1$]"将查询失败,因此应根据选择自动获取excel表名: 1 OpenFileDialog ofd = new OpenFileDialog(); //选择文件路径 2 ofd.Title = "Excel文件"; 3 ofd.FileName = ""; 4 ofd.Filter = "Excel文件(*.xls)| *.xls"; 5 s

微信小程序 setData动态设置数组中的数据

setdata传递动态数据值必须为对象(只能是key:value) 语法如下 this.setData({ filter: 1212 }) 如果setdata要传递数组呢? 首先相到的是 this.setData({ filter.a: 12 filter.b: 32 }) 这样回报语法错误 既然语法规定不能在里面写数组,那就把数组定义到外面 filter.selectArea1 = 1, filter.selectArea2 = 2, filter.selectArea3 = 3, this.

页面滚动图片等元素动态加载插件jquery.scrollLoading.js

如果一个网页很长,那么该页面的加载时间也会相应的较长.而这里给大家介绍的这个jQuery插件scrollLoading的作用则是,对页面元素进行动态加载,通俗的说就是滚到哪就加载到哪,屏幕以下看不见的就不用加载了.这样还可以在一定程度上节省服务器资源.该插件作者的网页将该插件的功能和使用方法描述的非常详细,这里把最一般最普遍的使用情况给大家展现一下. 插件作者:http://www.zhangxinxu.com/ 首先我们需要加载jQuery库和本插件js文件. (jquery.scrollLo

Python的动态类型

动态类型:                                                      在python中,类型是在运行过程中自动决定的,而不是通过代码声明的. 变量:                                                                                     变量是一个系统表的元素,拥有指向对象的连接的空间 python中,类型的概念是存在于对象中的,而不是变量中,变量是通用的. 变量的使用