glbegin在一个js函数只能调用一次中是不是只能使用一次

对某一个函数给出如下定义:若存在实数,对于任意的函数值,都满足,则称这个函数是有界函数,在所有满足条件的中,其最小值称为这个函数的边界值.例如,下图中的函数是有界函数,其边界值是1.(1)分别判断函数和是不是有界函数?若是有界函数,求其边界值;(2)若函数的边界值是2,且这个函数的最大值也是2,求的取值范围;(3)将函数的图象向下平移个单位,得到的函数的边界值是,当在什么范围时,满足?
(1)(x&0)不是是,边界为3(2)(3)
试题分析:(1)依据定义进行判断(x&0)不是,是,边界为3先分别求出当x=a与当x=b时的y的值,通过比较得出的取值范围分情况讨论即可试题解析:(1)(x&0)不是是,边界为3(2)∵y=-x+1
y随x的增大而减小当x=a时,y= -a+1=2,
a= -1当x=b时,y= -b+1
(3)若m&1,函数向下平移m个单位后,x=0时,函数的值小于-1,此时函数的边界t大于1,与题意不符,故.当x=-1时,y=1
(-1,1)当x=0时,ymin=0都向下平移m个单位(-1,1-m)(0,-m)
试题“对某一个函数给出如下定义:若存在实数,对于任意的函...”;主要考察你对
等知识点的理解。
对于任意不相等的两个实数a、b,定义运算※如下:a※b=
,那么8※12=______.
已知y=mxm2-2m+2是关于x的二次函数,则m的值为______.
某校为了解初中生的交通安全知识掌握情况,在本校初中部随机抽取10﹪的学生,进行了交通安全知识测试,得分情况如下两个统计图,并约定85分及以上为优秀;73分~84分为良好;60分~72分为合格;59分及以下为不合格(满分为100分).小题1:在抽取的学生中,不合格人数所占的百分比是
;小题2:若不合格学生的总分恰好等于其他等级的某一个学生的分数,请推测这个学生是什么等级?并估算出该校初中部学生***有多少人不合格?小题3:试求所抽取的学生的平均分..
高考全年学习规划
该知识易错题
该知识点相似题
高考英语全年学习规划讲师:李辉
更多高考学习规划:
******:400-676-2300
京ICP证050421号&京ICP备号 &京公安备110-1081940& 网络视听许可证0110531号
旗下成员公司glBegin()使用小结
我的图书馆
glBegin()使用小结
在glBegin()和glEnd()之间可调用的函数
glVertex*()
设置顶点坐标
glColor*()
设置当前颜色
glIndex*()
设置当前颜色表
glNormal*()
设置法向坐标
glCoord*()
glCallList(),glCallLists()
执行显示列表
glTexCoord*()
设置纹理坐标
glEdgeFlag*()
控制边界绘制
glMaterial*()
glVertex3f()表示了该函数属于 gl库,参数是三个float型参数指针。我们用glVertex*()来表示这一类函数。
几何图元类型和说明
单个顶点集
多组双顶点线段
GL_POLYGON
单个简单填充凸多边形
GL_TRAINGLES
&多组独立填充三角形
多组独立填充四边形
GL_LINE_STRIP
不闭合折线
GL_LINE_LOOP
GL_TRAINGLE_STRIP
线型连续填充三角形串
GL_TRAINGLE_FAN
扇形连续填充三角形串
GL_QUAD_STRIP
连续填充四边形串
&&实例如下所示:
// OpenGLDemo.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include &GL/glut.h&#include &math.h&const int n = 1000;const GLfloat R = 0.5f;const GLfloat Pi = 3.f;const GLfloat factor = 0.1f;void myDisplay(void){
///第一个程序----矩形
//glClear(GL_COLOR_BUFFER_BIT);
//glRectf(-0.5f, -0.5f, 0.5f, 0.5f);
//glFlush();
///第二个程序----圆
//glClear(GL_COLOR_BUFFER_BIT);
//glBegin(GL_POLYGON);//有顶点就必须要有glBegin() glEnd();
//for(i=0; i&n; ++i)
glVertex2f(R*cos(2*Pi/n*i), R*sin(2*Pi/n*i));
//glEnd();
//glFlush();
///第三个程序---五星
GLfloat a = 1 / (2-2*cos(72*Pi/180));
GLfloat bx = a * cos(18 * Pi/180);
GLfloat by = a * sin(18 * Pi/180);
GLfloat cy = -a * cos(18 * Pi/180);
PointA[2] = { 0, a },
PointB[2] = { bx, by },
PointC[2] = { 0.5, cy },
PointD[2] = { -0.5, cy },
PointE[2] = { -bx, by };
glClear(GL_COLOR_BUFFER_BIT);
// 按照A-&C-&E-&B-&D-&A的顺序,将五角星画出
glBegin(GL_LINE_LOOP);//闭合折线
glVertex2fv(PointA);
glVertex2fv(PointC);
glVertex2fv(PointE);
glVertex2fv(PointB);
glVertex2fv(PointD);
glFlush();
///第四个程序----画出正弦函数图形
//glClear(GL_COLOR_BUFFER_BIT);
//glBegin(GL_LINES);
//glVertex2f(-1.0f, 0.0f);
//glVertex2f(1.0f, 0.0f);
// 以上两个点可以画x轴
//glVertex2f(0.0f, -1.0f);
//glVertex2f(0.0f, 1.0f);
// 以上两个点可以画y轴
//glEnd();
//glBegin(GL_LINE_STRIP);
//for(x=-1.0f/ x&1.0f/ x+=0.01f)
glVertex2f(x*factor, sin(x)*factor);
//glEnd();
//glFlush();}int main(int argc, char *argv[]){
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
glutInitWindowPosition(100, 100);
glutInitWindowSize(400, 400);
glutCreateWindow("第一个OpenGL程序");
glutDisplayFunc(&myDisplay);
glutMainLoop();
return 0;}
效果图如下所示:
TA的最新馆藏[转]&OpenGL中glVertex2f函数与gluOrtho2D的参数的对应关系,以及常见函数的对应坐标系 - 网名还没想好 - 博客园
posts - 366, comments - 52, trackbacks - 0, articles - 2
两个函数的函数原型如下:
glVertex(GLfloat x, GLfloat y);
gluOrtho2D(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top);
简单的说前者的两个参数所代表的坐标点,必须落在后者参数所形成的坐标系内,不然该点就在viewport之外。
举个例子:
void display(){glClear(GL_COLOR_BUFFER_BIT);glPointSize(9);glBegin(GL_POINTS);glVertex2f(67.0,67.0);//6行glEnd();glFlush();}void init(){glMatrixMode(GL_PROJECTION);glLoadIdentity();gluOrtho2D(-70.0,70.0,-70.0,70.0);//第十四行}
如果第8行改为glVertex2f(80.0,80.0)这时就看不到这个点了。
在没有设置gluOrtho2D函数的情况下(2维的情况),默认为窗口的中心是(0,0),而到矩形的边的最远距离为0;参数大于0则该点又看不到了。&
&&&& 同时,在这里也凭平时的经验总结一下opengl中的一些函数的参照坐标
&&&& glViewport函数:它的原点(0,0)在所生产的窗口的坐下角。
&&&& gluOrtho,glBegin,glEnd函数:它们的原点是glViewport在glutCreatWindow函数所产生的窗口的上的投影(即视口)的中心。比如说画一个点glVertex2i(0,0),在没设置gluOrtho函数(即默认时),这个点在窗口的正中间。
&&&& glutMouseFunc(mymouse):此时鼠标指针的原点(0,0)在视口的最左上角。
&&& 参考坐标这么多,画图时我们脑海中想要画的图到底该怎么转换到窗口里去呢?个人认为,先假设没有设置视口(viewport),即glCreateWindow函数产生的那个窗口整个就是视口(viewport)。然后窗口的中心即是gluOrtho函数的原点,用gluOrtho函数裁剪窗口,然后就用glBegin一系列的函数画图(在所裁剪的窗口上),画完后图形已经固定,再考虑用glViewport函数将图形在glCreatWindow函数所产生的窗口上进行投影。假设刚才的裁剪窗口是一个正方形,你画的图形也是个正方形而视口(viewport)也是个正方形,那么最后在窗口中生成的图形也是个正方形如果画的是正方形,裁剪窗口也是正方形,但视口(viewport)不是一个正方形那最后得到的也不是一正方形,这就是为什么在没有设置glViewport函数(即默认整个窗口为视口)时,我们用鼠标将窗口拖大、缩小时,里面之前画的正方形会跟着窗口的变化一起变化,以至于会成为一个矩形的原因。4674人阅读
这个例子是一个多相机、多视口的例子,我们有机会研究一下OSG中的视口相机。
首先,程序最外面run了两次,通过EnableVBOVisitor的方式使用了定点缓冲对象,EnableVBOVisitor继
承自NodeVisitor,在accept的时候执行一次,执行NodeVisitor中的apply方法。
enum TraversalMode
& & & & & & TR***ERSE_NONE,
& & & & & & TR***ERSE_PARENTS,
& & & & & &
&TR***ERSE_ALL_CHILDREN,
& & & & & & TR***ERSE_ACTIVE_CHILDREN
& & & & };
递归的模式,不递归、向上级递归、向下级递归,递归下级所有活动的节点。
OpenGL中绘制物体的方式:glbegin,glend,顶点数组的立即模式;displaylist显示列表;VBO顶点缓冲
对象。VBO几何了前两种方法的优势,数据即可以存储在服务器端,又便于更新。
关于VBO详细的说明:/azureforest/archive//2572237.html
这样想一想,所有的节点的叶节点都是Geode,Geode中有多个drawable,这个drawable就应该是设置VBO
的地方,我们顺着这个思路看看drawable:
有两个函数:setUseVertexBufferObjects、setUseDisplayList
有两个变量:_useDisplayL _useVertexBufferO
在构造函数里可以看到显示列表是默认的方式,VBO是false。
特别强调,如果drawable是动态更新的,就不能用显示列表,这样不安全。
在Drawable中的draw中看看这个判断
& & if (_useDisplayList && !(_supportsVertexBufferObjects && _useVertexBufferObjects &&&
renderInfo.getState()-&isVertexBufferObjectSupported()))
osg的默认绘制是显示列表,但是一但支持vbo并且设置了vbo的绘制方式就会有vbo绘制。
在drawable.cpp中有很多的if (!_useDisplayList)这样的判断,比如在
Drawable::compileGLObjects(RenderInfo& renderInfo),判断了如果不是显示列表就返回,解释一下这
是为什么?显示列表是需要提前编译的,然后再渲染,不像立即模式那样直接渲染。在osg的
databasepager中为了大数据的优化,需要提前编译一些东西,比如纹理,shader,再有就是显示列表。
在这里我们找到了源代码。
我们记者往下来,看代码drawable中的draw最后几行:
&if (_drawCallback.valid())
& & & & _drawCallback-&drawImplementation(renderInfo,this);
& & & & drawImplementation(renderInfo);如果不使用显示列表就会执行。
这里透露出好多信息,首先(包括显示列表模式),如果自己定义了DrawCallback,重写
drawImplementation就会实现自己的绘制内容,否则执行drawable的drawImplementation,而drawable的
drawImplementation是一个纯虚方法,因此每个继承drawable的类需要重写这个函数完成绘制。
以Geometry为例,在Geometry的drawImplementation完成了几何体的绘制,在参数renderInfo中存储了渲
染的信息。在drawImplementation中有一个areFastPathsUsed()函数,用于判断使用OpenGL的顶点数组还
是普通的glbegin,glend函数,在使用顶点数组中还会继续判断是否使用顶点缓冲对象。
离题太远了,我们回到例子中。
EnableVBOVisitor重写了 void apply(osg::Geode& geode),为每个drawable设置使用定点缓冲对象。
接下来设置了线程模式,OSG中有四种线程模式:
SingleThreaded:单线程模型。OSG不会创建任何新线程来完成场景的筛选和渲染,因
而也不会对渲染效率的提高有任何助益。它适合任何配置下使用。&
CullDrawThreadPerContext:OSG 将为每一个图形设备上下文(GraphicsContext)创建
一个图形线程,以实现并行的渲染工作。如果有多个 CPU 的话,那么系统将尝试把线程分
别放在不同的 CPU上运行,不过每一帧结束前都会强制同步所有的线程。&
DrawThreadPerContext:这一线程模型同样会为每个 GraphicsContext 创建线程,并分配
到不同的 CPU 上。十分值得注意的是,这种模式会在当前帧的所有线程完成工作之前,开
始下一帧。&
CullThreadPerCameraDrawThreadPerContext:这一线程模型将为每个 GraphicsContext
和每个摄像机创建线程,这种模式同样不会等待前一次的渲染结束,而是返回仿真循环并再
次开始执行 frame 函数。如果您使用四核甚至更高的系统配置,那么使用这一线程模型将最
大限度地发挥多 CPU的处理能力。 (《最长的一帧》)
osgViewer::Viewer 通过setThreadingModel可以设置线程模式。
之后,执行了两次viewer::run()
看看AnimationPathManipulator这个操作器,运动路径操作器,里面有一个AnimationPath,
AnimationPath我们之前研究过,定义了一个路径,中间的点进行插值,这里读取了一个pat***件。
这里说一下CompositeViewer、Viewer、Scene、Camera、GraphicsContext的关系:一个CompositeViewer
可以有多个Viewer,一个Viewer对应一个主相机和多个从属Camera,一个Camera对应一个
GraphicsContext,一个Viewer对应一个SceneView,一个SceneView中有一个Databasepager。
singleWindowMultipleCameras中建立了一个单视口,定义了两个相机。
& & osg::GraphicsContext::WindowingSystemInterface* wsi =&
osg::GraphicsContext::getWindowingSystemInterface();
这个函数用于判断当前图形窗体是否可用,WindowingSystemInterface是osg中的结构体,具体的实现却
在osgViewer中,根据不同的操作系统有不同的类实现类,windows中对应的是GraphicsWindowWin32.cpp
,这个类的产生在cmake阶段,里面封装了windows的建立窗体、消息循环、产生事件等等。
产生窗体的玄机在:
struct RegisterWindowingSystemInterfaceProxy
& & RegisterWindowingSystemInterfaceProxy()
& & & & osg::GraphicsContext::setWindowingSystemInterface
(Win32WindowingSystem::getInterface());
& & ~RegisterWindowingSystemInterfaceProxy()
& & & & if (osg::Referenced::getDeleteHandler())
& & & & & &&
osg::Referenced::getDeleteHandler()-&setNumFramesToRetainObjects(0);
& & & & & &&
osg::Referenced::getDeleteHandler()-&flushAll();
osg::GraphicsContext::setWindowingSystemInterface(0);
RegisterWindowingSystemInterfaceProxy createWindowingSystemInterfaceP
这里面,看看这有个static,当你用osgViewer::V的时候就调用了
RegisterWindowingSystemInterfaceProxy createWindowingSystemInterfaceP然后调用
osg::GraphicsContext::setWindowingSystemInterface(Win32WindowingSystem::getInterface());
获取了图形显示窗体,这里我们就先说到这里。
multipleWindowMultipleCameras创建多窗体多相机。
接下来从一个文件中读取窗体设置,读出窗体设置。
ModelHandler继承自GUIEventHandler,通过键盘事件在场景中加载不同的模型。
例子的最后:
viewer.realize();
& & unsigned int numFrames = 0;
& & while(!viewer.done() && !
(limitNumberOfFrames && numFrames&=maxFrames))
& & & & viewer.frame();
& & & & +
控制程序的运行,如果需要自己控制OSG的帧数,或者获取一些统计的信息,可以像这样写。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:93333次
积分:1493
积分:1493
排名:千里之外
原创:58篇
评论:20条
(1)(2)(11)(17)(1)(23)(3)下次自动登录
现在的位置:
& 综合 & 正文
openGL 函数 -glBegin,glEnd
来自百度百科:
glBegin是OpenGL里使用的函数。而OpenGL是一种高性能图形行业标准,是行业领域中最为广泛接纳的 2D/3D 图形 API,其自诞生至今已催生了各种及设备上的数千优秀。glBegin是和glEnd结合起来使用的。
void glBegin(GLenummode)
  void glEnd(void)
  参数说明:
  mode:创建图元的类型。可以是以下数值
  GL_POINTS:把每一个顶点作为一个点进行处理,顶点n即定义了点n,共绘制N个点
  GL_LINES:把每一个顶点作为一个独立的线段,顶点2n-1和2n之间共定义了n条线段,总共绘制N/2条线段
  GL_LINE_STRIP:绘制从第一个顶点到最后一个顶点依次相连的一组线段,第n和n+1个顶点定义了线段n,总共绘制n-1条线段
  GL_LINE_LOOP:绘制从第一个顶点到最后一个顶点依次相连的一组线段,然后最后一个顶点和第一个顶点相连,第n和n+1个顶点定义了线段n,总共绘制n条线段
  GL_TRIANGLES:把每个顶点作为一个独立的三角形,顶点3n-2、3n-1和3n定义了第n个三角形,总共绘制N/3个三角形
  GL_TRIANGLE_STRIP:绘制一组相连的三角形,对于奇数n,顶点n、n+1和n+2定义了第n个三角形;对于偶数n,顶点n+1、n和n+2定义了第n个三角形,总共绘制N-2个三角形
  GL_TRIANGLE_FAN:绘制一组相连的三角形,三角形是由第一个顶点及其后给定的顶点确定,顶点1、n+1和n+2定义了第n个三角形,总共绘制N-2个三角形
  GL_QUADS:绘制由四个顶点组成的一组单独的四边形。顶点4n-3、4n-2、4n-1和4n定义了第n个四边形。总共绘制N/4个四边形
  GL_QUAD_STRIP:绘制一组相连的四边形。每个四边形是由一对顶点及其后给定的一对顶点共同确定的。顶点2n-1、2n、2n+2和2n+1定义了第n个四边形,总共绘制N/2-1个四边形
  GL_POLYGON:绘制一个凸多边形。顶点1到n定义了这个多边形。
  函数说明:
  glBegin和glEnd函数限定了一组或多组图元的定点定义。
1.在glBegin()和glEnd()之间可调用的函数
函数 函数意义
glVertex*() 设置顶点坐标
  glColor*() 设置当前颜色
  glIndex*() 设置当前颜色表
  glNormal*() 设置法向坐标
  glEvalCoord*() 产生坐标
  glCallList(),glCallLists() 执行显示列表
  glTexCoord*() 设置纹理坐标
  glEdgeFlag*() 控制边界绘制
  glMaterial*() 设置材质
  表7-2 在glBegin()和glEnd()之间可调用的函数
glVertex3f()表示了该函数属于 gl库,参数是三个float型参数指针。我们用glVertex*()来表示这一类函数。
  2.几何图元类型和说明
  类型 说明
  GL_POINTS 单个顶点集
  GL_LINES 多组双顶点线段
  GL_POLYGON 单个简单填充凸多边形
  GL_TRIANGLES 多组独立填充三角形
  GL_QUADS 多组独立填充四边形
  GL_LINE_STRIP 不闭合折线
  GL_LINE_LOOP 闭合折线
  GL_TRIANGLE_STRIP 线型连续填充三角形串
  GL_TRIANGLE_FAN 扇形连续填充三角形串
  GL_QUAD_STRIP 连续填充四边形串
glBegin()与glEnd()函数使用注意点:
  在OpenGL最初的定义中,几何对象数据的输入是通过调用glBegin()和glEnd()接口对来实现的。glBegin()的参数表示其下所接收的数据是何种类型,如点,线段,三角型,扇形三角行,多边形等等。
  而如glTranslatef(), glScalef(), glRotatef()等接口的作用是对当前模型空间进行几何转换。如glTranslatef(1,2,3);表示把模型的世界坐标原点从当前位置(系统总认为是(0,0,0))转到起相对位置(1,2,3)。注意,OpenGL空间使用的是右手系的定义,与屏幕水平方向一致,并方向向右的是x轴;与屏幕方向垂直方向一致,并方向向上的是y轴;与屏幕屏幕垂直,方向向外的是z轴。
  glTranslatef()等此类几何转换接口在glBegin()和glEnd()之间是无效的。因此,如果想对模型的位置进行转换,要在调用glBegin()和glEnd()接口对之前行处理。这是许多初学者特别容易犯错的地方,而且这个错误不容易找出来。
  例如,以下的,并不会把模型的位置进行转移:
  glBegin(GL_TRIANGLES)
  glTranslatef(1,2,3);
  render model......
  glEnd()
  而应该这样调用:
  glTranslatef(1,2,3);
  glBegin(GL_TRIANGLES)
  render model......
  glEnd()
glBegin, glEnd -- delimit the vertices of a primitive or a group of like primitives
C SPECIFICATION
void glBegin(GLenum mode)
PARAMETERS
Specifies the primitive or primitives that will be created from vertices presented between glBegin and the subsequent glEnd. Ten symbolic constants are accepted: GL_POINTS, GL_LINES, GL_LINE_STRIP, GL_LINE_LOOP, GL_TRIANGLES, GL_TRIANGLE_STRIP, GL_TRIANGLE_FAN,
GL_QUADS, GL_QUAD_STRIP, and GL_POLYGON.
C SPECIFICATION
void glEnd(void)
DESCRIPTION
glBegin and glEnd delimit the verties that define a primitive or a group of like primitives. glBegin accepts a single argument that specifies which of ten ways the vertices are interpreted. Taking n as the integer count starting at one, and N as the total number
of vertices specified, the interpretations are as follows:
Treats each vertex as a single point. Vertex n defines point n. N points are drawn.
Treats each pair of vertices as an independent line segment. Vertices 2n-1 and 2n define line n. N/2 lines are drawn.
GL_LINE_STRIP
Draws a connected group of line segments from the first vertex to the last. Vertices n and n+1 define line n. N-1 lines are drawn.
GL_LINE_LOOP
Draws a connected group of line segments from the first vertex to the last, then back to the first. Vertices n and n+1 define line n. The last line however, is defined by vertices N and 1. N lines are drawn.
GL_TRIANGLES
Treats each triplet of vertices as an independent triangle. Vertices 3n-2, 3n-1, and 3n define triangle n. N/3 triangles are drawn.
GL_TRIANGLE_STRIP
Draws a connected group of triangles. One triangle is defined for each vertex presented after the first two vertices. For odd n, vertices n, n+1, and n+2 define triangle n. For even n, vertices n+1, n, and n+2 define triangle n. N-2 triangles are drawn.
GL_TRIANGLE_FAN
Draws a connected group of triangles. One triangle is defined for each vertex presented after the first two vertices. Vertices 1, n+1, and n+2 define triangle n. N-2 triangles are drawn.
Treats each group of four vertices as an independent quadriliteral. Vertices 4n-3, 4n-2, 4n-1, and 4n define quadriliteral n. N/4 quadriliterals are drawn.
GL_QUAD_STRIP
Draws a connected group of quadriliterals. One quadriliteral is defined for each pair of vertices presented after the first pair. Vertices 2n-1, 2n, 2n+2, and 2n+1 define quadriliteral n. N/2-1 quadriliterals are drawn. Note that the order in which vertices
are used to construct a quadriliteral from strip data is different from that used with independent data.
GL_POLYGON
Draws a single, convex polygon. Vertices 1 through N define this polygon.
Only a subset of GL commands can be used betwen glBegin and glEnd. The commands are glVertex, glColor, glIndex, glNormal, glTexCoord, glEvalCoord, glEvalPoint, glMaterial, and glEdgeFlag. Also, it is acceptable to use glCallList or glCallLists to execute display
lists that include only the preceeding commands. If any other GL command is called between glBegin and glEnd, the error flag is set and the command is ignored.
Regardless of the value chosen for mode, there is no limit to the number of vertices that can be defined betwen glBegin and glEnd. Lines, triangles, quadriliterals, and polygons that are incompletely specified are not drawn. Incomplete specification results
when either too few vertices are provided to specify even a single primitive or when an incorrect multiple of vertices is specified. The incomplete
the rest are drawn.
The minimum specification of vertices for each primitive is as follows: 1 for a point, 2 for a line, 3 for a triangle, 4 for a quadriliteral, and 3 for a polygon. Modes that require a certain multiple of vertices are GL_LINES (2), GL_TRIANGLES (3), GL_QUADS
(4), and GL_QUAD_STRIP (2).
GL_INVALID_ENUM is generated if mode is set to an unaccepted value.
GL_INVALID_OPERATION is generated if a command other than glVertex, glColor, glIndex, glNormal, glTexCoord, glEvalCoord, glEvalPoint, glMaterial, glEdgeFlag, glCallList or glCallLists is called between glBegin and the corresponding glEnd.
GL_INVALID_OPERATION is generated if glEnd is called before the corresponding glBegin is called.
&&&&推荐文章:
【上篇】【下篇】

我要回帖

更多关于 js函数只能调用一次 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信