OpenGL 和 C++:glBegin/glEnd
Posted
技术标签:
【中文标题】OpenGL 和 C++:glBegin/glEnd【英文标题】:OpenGL & C++ : glBegin/glEnd 【发布时间】:2013-06-22 20:18:04 【问题描述】: glBegin(GL_TRIANGLE_STRIP);
for(i; i <= degree; i++)
float
sunX=-200/2*cos(i*M_PI/180),
sunZ=200/2*sin(i*M_PI/180);
glVertex3f(0, 0, 0);
glVertex3f(sunX, 0, sunZ);
glEnd();
此代码有效。但是……
for(i; i <= degree; i++)
float
sunX=-200/2*cos(i*M_PI/180),
sunZ=200/2*sin(i*M_PI/180);
glBegin(GL_TRIANGLE_STRIP);
glVertex3f(0, 0, 0);
glVertex3f(sunX, 0, sunZ);
glEnd();
但这不起作用。什么?逻辑在哪里? 我需要在 for 循环中插入另一个代码以输出文本:
glPushAttrib(GL_LIST_BIT);
glListBase(1000);
glCallLists(strlen(text), GL_UNSIGNED_BYTE, text);
glPopAttrib();
但我不能插入它,因为 beetwen glBegin(GL_TRIANGLE_STRIP) 和 glEnd() 它不起作用。而且我不能在里面写 glBegin(GL_TRIANGLE_STRIP), glEnd() 循环,因为它在那里不起作用。
【问题讨论】:
使用vertex arrays 不要使用 glBegin/glEnd 和旧管道的其余部分......这不再是一个好习惯...... 【参考方案1】:每次您拨打glBegin(GL_TRIANGLE_STRIP);
时,您都在开始一个全新的三角带。它不会连接到之前 for 循环迭代中的其他顶点。
【讨论】:
【参考方案2】:来自glBegin的文档
"... 不绘制未完全指定的线、三角形、四边形和多边形。如果提供的顶点太少而无法指定单个图元,或者指定的顶点倍数不正确,则会导致指定不完整。不完整的图元被忽略;其余的被绘制。..."
您需要指定 glBegin/glEnd 对之间的最小顶点数;该数字取决于您提供给 glBegin 的参数。
GL_POINTS
:1
GL_LINES
,GL_LINE_*
:2
GL_TRIANGLES
,GL_TRIANGLE_*
:3
GL_QUADS
,GL_QUAD_*
:4
【讨论】:
以上是关于OpenGL 和 C++:glBegin/glEnd的主要内容,如果未能解决你的问题,请参考以下文章
如何开始在 openGL 和 C++ 中构建cooliris?