芝麻体育网

您现在的位置是: 首页 > 田径赛事

文章内容

idle画奥运五环_画奥运会五环

zmhk 2024-08-21
idle画奥运五环_画奥运会五环       如果您对idle画奥运五环感兴趣,那么我可以提供一些关于它的背景和特点的信息,以及一些相关的资源和建议。1.求代码注释:计算机形学的OpenGL画四面体。高手来吧。争取每句都注释下。谢谢
idle画奥运五环_画奥运会五环

       如果您对idle画奥运五环感兴趣,那么我可以提供一些关于它的背景和特点的信息,以及一些相关的资源和建议。

1.求代码注释:计算机形学的OpenGL画四面体。高手来吧。争取每句都注释下。谢谢

2.为什么我的opengl程序画不出立方体?

3.vb中如何画曲线图?

idle画奥运五环_画奥运会五环

求代码注释:计算机形学的OpenGL画四面体。高手来吧。争取每句都注释下。谢谢

       #include <gl/glut.h>

       #define WIDTH 400

       #define HEIGHT 400

       #include <math.h>

       #define ColoredVertex(c, v) do{ glColor3fv(c); glVertex3fv(v); }while(0) //这段就不用解释了吧……

       GLfloat angle = 0.0f; //设定转角

       void myDisplay(void) //绘图函数

       {

       static int list = 0;

       if( list == 0 )

       {

        // 如果显示列表不存在,则创建

       GLfloat //GLfloat为OpenGL用到的数据类型,与C的float基本一致

       PointA[] = {-0.5, -5*sqrt(5)/48, sqrt(3)/6}, //此处为4个顶点的坐标,因为时3D坐标系下的,所以每个坐标有3个分量,分别对应X,Y,Z轴。至于各轴方向定义……默认下屏幕水平为X,竖直为Y,里外为Z。

       PointB[] = { 0.5, -5*sqrt(5)/48, sqrt(3)/6},

       PointC[] = { 0, -5*sqrt(5)/48, -sqrt(3)/3},

       PointD[] = { 0, 11*sqrt(6)/48, 0};

       /*GLfloat

       PointA[] = { 0.5f, -sqrt(6.0f)/12, -sqrt(3.0f)/6},

       PointB[] = {-0.5f, -sqrt(6.0f)/12, -sqrt(3.0f)/6},

       PointC[] = { 0.0f, -sqrt(6.0f)/12, sqrt(3.0f)/3},

       PointD[] = { 0.0f, sqrt(6.0f)/4, 0};

       */

       GLfloat

       ColorR[] = {1, 0, 0}, //定义颜色数组,每个数组为一个颜色,也含有3个分量,对应红,绿,蓝,分量范围[0,1],每种颜色都可看做是这3个颜色混合得到。可一自己改变下其中的数值看看具体效果。

       ColorG[] = {0, 1, 0},

       ColorB[] = {0, 0, 1},

       ColorY[] = {1, 1, 0};

       list = glGenLists(1);

       glNewList(list, GL_COMPILE); //创建一个顶点表,这个表里包含有绘图的顶点信息

       glBegin(GL_TRIANGLES); //开始绘图,(GL_TRIANGLES)表示绘制三角形

        // 平面ABC

       ColoredVertex(ColorR, PointA); //以颜色R绘制点A,以下类推,ColoredVertex()函数在程序开头定义了。

       ColoredVertex(ColorG, PointB);

       ColoredVertex(ColorB, PointC);

       // 平面ACD

       ColoredVertex(ColorR, PointA);

       ColoredVertex(ColorB, PointC);

       ColoredVertex(ColorY, PointD);

       // 平面CBD

       ColoredVertex(ColorB, PointC);

       ColoredVertex(ColorG, PointB);

       ColoredVertex(ColorY, PointD);

       // 平面BAD

       ColoredVertex(ColorG, PointB);

       ColoredVertex(ColorR, PointA);

       ColoredVertex(ColorY, PointD);

       glEnd();

       glEndList(); //结束绘图 结束绘图顶点表。

       glEnable(GL_DEPTH_TEST); //打开深度测试。打开深度测试的作用是:如果在场景中有多个物体,而它们相对观察者的距离不同(简单理解为远近),那么这个时候,前面的物体则可以挡住后面的物体(没错吧),使场景具有深度感。如果不打开深度测试,那么绘图会按绘制的顺序,后绘制的物体覆盖住现绘制的物体。这里要注意的是,深度仅影响物体重合时谁显示谁不显示,并不影响其3D效果,远处的物体仍然会变“小”,物体在空间中的位置仍为三维的。

       }

       // 已经创建了显示列表,在每次绘制正四面体时将调用它

       glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //清除颜色缓存和深度缓存

       glPushMatrix(); //绘图坐标系入栈,可以简单理解为存下了这次画图时画笔的起始位置

       glRotatef(angle, 1, 0.5, 0); //绘图坐标系绕(1,0.5,0)轴旋转angle角,可理解为模型绕该轴旋转angle角。

       glCallList(list); //调用顶点表,绘制四面体模型

       glPopMatrix(); //绘图坐标系出栈,则回到了刚才的绘图起始位置

       glutSwapBuffers(); //使用双缓存(第一个在前面显示模型,另一个在后面绘制新的模型,当新模型绘制完毕后送给第一个缓存显示。这样不会出现模型上一些点已经绘制完了,而另一些点还在绘制的情况。)

       }

       void myIdle(void)

       {

        ++angle;

        if( angle >= 360.0f )

        angle = 0.0f; //转角超过360度,将其置零。

        myDisplay(); //绘制模型}

       int main(int argc, char* argv[]) { glutInit(&argc, argv); //创建绘图窗口

       glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE); //设置绘图模式

       glutInitWindowPosition(200, 200); //设置窗口位置

       glutInitWindowSize(WIDTH, HEIGHT); //设置窗口大小

       glutCreateWindow("OpenGL 窗口"); //设置窗口标题

       glutDisplayFunc(&myDisplay); //重复调用函数

       glutIdleFunc(&myIdle);//重复调用函数

       glutMainLoop(); //该循环用来对上述两个重复调用函数不断调用

       return 0;

       }

       回答完毕。

为什么我的opengl程序画不出立方体?

       radian 是弧度,SPLIT=0.01; radian = radian+SPLIT; 循环 200 次, radian 为 0 - 2 弧度。

       sin(PI*radian) 的自变量 是 0 到 2 派弧度, 即 0-360 度,一个完整的正弦周期。

       sin()函数返回值是 200 点 处的值: 0 到 1 到 0 到 负 1 到 0。

       INTERVAL = 300 可能是 y 坐标的 满度 值吧,你可以算一下。可能是:繁忙时间y+空闲时间y=300.

vb中如何画曲线图?

       你的代码中因为没有进行适当放缩,导致正方体无法正常显示。

       可以使用:

glScalef(0.5,0.5,0.5);

       后观察效果。

       另外,代码之中存在两处错误:

       第一,绕序问题,推测你使用逆时针正面绕序。这样的话,则需要改正ABCD面为:

ColoredVertex(ColorR,?PointB);

       ColoredVertex(ColorG,?PointA);

       ColoredVertex(ColorB,?PointD);

       ColoredVertex(ColorB,?PointC);

       第二:

#define?ColoredVertex(c,v)do{glColor3fv(c);glVertex3fv(v);}while(0);

       这个宏中既然定义了颜色参数,就把它用上。

       最后效果为:

       我先给你写一段如果不明白加我QQ:905906

       在工控制软件中,实时曲线的绘制用途非常的广泛,它可以很直观的显示出监控数据的变化值和变化趋势。在VB中实现曲线的绘制有很多种方法,本文介绍一种非常简单的方法来实现实时曲线的绘制。

       在VB中实现实时曲线的绘制,要利用VB的PictureBox(图像)控件,和画线函数line(x1,y1)-(x2,y2)。PictureBox控件,可以作为一个“容器”,在它的里面可以包含很多的对象。也可以执行很多VB的内部函数。

       要实现实时曲线的绘制,肯定要有外部实时数据的输入,这里假设是有一个数据从计算机的串口输入 定义该数据变量为DataFromCom。实时曲线反映的就是该数据。

       打开VB6.0中文版,新建一个项目和窗体,修改窗体的属性,将“Heigh”修改为:8000,“Width”修改为在窗体中放如一个PictureBox控件。然后重新定义PictureBox控件的一些基本属性,在VB中选中PictureBox控件,直接在它的属性框中,修改一些属性参数。“名称”改为Pic。 “AutoRedraw”改为:True。“BackColor”改为:&H00004000&(墨绿色背景颜色)。”Heigh”改为:5000。“Width”改为:8000。如图1所示:

       然后要重新定义PictureBox控件的坐标系。图像框的默认坐标系,是从左上角开始的,不符合我们的画线要求。修改坐标系的目的是让曲线从图像框的左边正中间,开始画线。修改图像框的坐标系,这里定义一个过程PicScale(),代码如下:

       Private Sub PicScale(picX As PictureBox)

       picX.Scale (0, PicX.ScaleHeight)-(picX.ScaleWidth, -PicX.ScaleHeight)

       End Sub

       一般的实时曲线显示的时候在屏幕的正中间有一条基准线,这里也要画出这条基准线,用一个过程PicMidleLine()来实现,代码如下:

       Private Sub PicMidleLine( picX As PictureBox)

       picX.Line (0, 0)-(picX.ScaleWidth, 0), vbGreen '画出中线

       End Sub

       要画一条实时曲线,坐标轴的设定很重要,在这里把X轴设定为时间轴,Y轴设定为数据轴。对应X轴我们定义一个时间变量TimeCount,TimeCount会随着时间逐渐递增,每次递增,对应着一个从串口读过来的数据DataFromCom,这样图像框中的(x,y)坐标点实际上就对应着(TimeCount,DataFromCom)如果只是当TimeCount发生变化时就在图像框上画一个点,就只需调用VB中的画像素的函数point(x,y),这里x,y为所画的点的坐标。单这样画出来的是一个个不连续的点。我们想要的是实时的连续的曲线,所以要调用VB中的画线的函数line(x1,y1)-(x2,y2),这里(x1,y1)(x2,y2)为所要画的线的起点和终点的坐标。只要把上次串口读过来的数据(这里把它定义为变量DataFromComLast)和现在串口读过来的数据(DataFromCom)和TimeCount相对应,调用line(x1,y1)-(x2,y2)函数就可以在图像框中画出实时的曲线了。把它写成一个过程如下面的代码:

       Private Sub DrawRealLine(picX As PictureBox, TimeCountX As Integer, DataFromComX As Integer, DataFromComLastX As Integer)

       If TimeCountX - 1 > 0 Then

       picX.Line (TimeCountX - 1, DataFromComLastX)-(TimeCountX, DataFromComX), vbWhite

       End If

       End Sub

       有了三个过程就可以在图像框中画出一条实时的曲线了。

       DrawRealLine()过程中的picX.Line (TimeCountX - 1, DataFromComLastX)-(TimeCountX, DataFromComX), vbWhite所画线的起始点和结束点都是以像素为单位的,这样以来如果不改变的话,画出来的线将是一个屏幕上像素相连的很密的曲线,通过调整line(x1,y1)-(x2,y2)

       中的x的值,就可以画出分布密度不一样的曲线,这里为了在屏幕上能够看到不是很密的曲线我们把x乘以一个系数10,修改为:

       picX.Line ((TimeCountX - 1) * 10, DataFromComLastX)-(TimeCountX * 10, DataFromComX), vbWhite

       这比较容易在屏幕上看到稀疏的曲线。

       由于是仅仅讲解如何画出实时的曲线,读者的计算机上未必有和串口相连的设备,这里用一个定时器控件来模拟从串口读过来的数据。在窗体上放入一个Timer控件,修改Timer控件的属性为:“Enable”该为True,“Interval”改为300。双击Timer控件在它的过程中,添加代码后如下:

       Private Sub Timer1_Timer()

       DataFromComLast = DataFromCom

       Randomize

       DataFromCom = 3000 * Rnd

       TimeCount = TimeCount + 1

       DrawRealLine Pic, TimeCount, DataFromCom, DataFromComLast

       End Sub

       这样在运行后就可以看到我们想要的实时曲线了,如下图:

       图 2

       下面是完整的代码:

       Option Explicit

       Dim DataFromCom As Integer '从串口读过来的实时值

       Dim DataFromComLast As Integer '上次的串口值

       Dim TimeCount As Integer

       Private Sub Form_Load()

       PicScale Pic '调整图像框的坐标系

       PicMidleLine Pic '在图像框中画一条中线

       End Sub

       Private Sub PicScale(picX As PictureBox) '调整图像框的坐标系

       picX.Scale (0, picX.ScaleHeight)-(picX.ScaleWidth, -picX.ScaleHeight)

       End Sub

       Private Sub PicMidleLine(picX As PictureBox) '在图像框中画一条中线

       picX.Line (0, 0)-(picX.ScaleWidth, 0), vbGreen '画出中线

       End Sub

       Private Sub DrawRealLine(picX As PictureBox, TimeCountX As Integer, DataFromComX As Integer, DataFromComLastX As Integer)

       If TimeCountX - 1 > 0 Then

       picX.Line ((TimeCountX - 1) * 10, DataFromComLastX)-(TimeCountX * 10, DataFromComX), vbWhite

       End If

       End Sub

       Private Sub Timer1_Timer()

       DataFromComLast = DataFromCom

       Randomize

       DataFromCom = 3000 * Rnd

       TimeCount = TimeCount + 1

       DrawRealLine Pic, TimeCount, DataFromCom, DataFromComLast '画出实时的曲线

       End Sub

       好了,关于“idle画奥运五环”的讨论到此结束。希望大家能够更深入地了解“idle画奥运五环”,并从我的解答中获得一些启示。