简而言之,为什么我不能将两个glBindTexture放入一个glStart(GL_QUADS)... glend()?
我将遵循OpenGL红皮书的第9章,http://www.glprogramming.com/red/chapter09.html
左边的四边形有一个白色的棋盘纹理,而右边的四边形有一个红色的纹理。
这是将纹理映射到两个四边形的代码:
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glBindTexture(GL_TEXTURE_2D, texName[0]);
glBegin(GL_QUADS);
glTexCoord2f(0.0, 0.0); glVertex3f(-2.0, -1.0, 0.0);
glTexCoord2f(0.0, 1.0); glVertex3f(-2.0, 1.0, 0.0);
glTexCoord2f(1.0, 1.0); glVertex3f(0.0, 1.0, 0.0);
glTexCoord2f(1.0, 0.0); glVertex3f(0.0, -1.0, 0.0);
glEnd();
glBindTexture(GL_TEXTURE_2D, texName[1]);
glBegin(GL_QUADS);
glTexCoord2f(0.0, 0.0); glVertex3f(1.0, -1.0, 0.0);
glTexCoord2f(0.0, 1.0); glVertex3f(1.0, 1.0, 0.0);
glTexCoord2f(1.0, 1.0); glVertex3f(2.41421, 1.0, -1.41421);
glTexCoord2f(1.0, 0.0); glVertex3f(2.41421, -1.0, -1.41421);
glEnd();
glFlush();
}
我们可以看到,即使代码使用GL_四边形,它也会在每个GL_四边形状态中绘制一个四边形。但是,如果我在代码中间注释掉glEnd()和glBegin(GL\u QUADS),如下所示:
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glBindTexture(GL_TEXTURE_2D, texName[0]);
glBegin(GL_QUADS);
glTexCoord2f(0.0, 0.0); glVertex3f(-2.0, -1.0, 0.0);
glTexCoord2f(0.0, 1.0); glVertex3f(-2.0, 1.0, 0.0);
glTexCoord2f(1.0, 1.0); glVertex3f(0.0, 1.0, 0.0);
glTexCoord2f(1.0, 0.0); glVertex3f(0.0, -1.0, 0.0);
// glEnd();
glBindTexture(GL_TEXTURE_2D, texName[1]);
// glBegin(GL_QUADS);
glTexCoord2f(0.0, 0.0); glVertex3f(1.0, -1.0, 0.0);
glTexCoord2f(0.0, 1.0); glVertex3f(1.0, 1.0, 0.0);
glTexCoord2f(1.0, 1.0); glVertex3f(2.41421, 1.0, -1.41421);
glTexCoord2f(1.0, 0.0); glVertex3f(2.41421, -1.0, -1.41421);
glEnd();
glFlush();
}
第二个glBindTexture(GL_TEXTURE_2D,texName1)已经不起作用了。结果是:
谁能告诉我为什么我不能把两个glBindTexture变成一个GL_QUADS状态?
因为OpenGL不支持这样做。
在glBegin
/glEnd
内部时,只能调用OpenGL,如glTexCoord*
,glVertex*
等顶点提交调用。其他任何调用都是错误的。
至于“为什么”,一个原因是“因为说明书上说的是这样”。更有可能的是,GPU并行处理整个数据集(或其中的重要部分),在此期间无法切换纹理。
还要考虑使用OpenGL绘图的新方法:将数据上传到顶点缓冲区对象并调用glDraw*
命令之一。您甚至无法使用它在原语之间调用glBindTexture
。
我正在做一个minecraft-ish游戏,我在vbos上做了更多的工作。然而在一个vbo中绘制多个面时,我似乎有点问题。 以下是我的vbo生成代码: 下面是我用来绘制vbo的代码: 这是我想要的结果(在每个vbo中使用一个四边形): 不幸的是,我还是新来的,所以你必须点击这个链接:/ 下面是我在每个vbo中使用多个四边形得到的结果: 形象 那么为什么我要在一个vbo中绘制多个四边形呢?一个词:性
为什么这工作正常: 这会产生运行时错误 错误: 这没有任何意义。第一个代码工作正常,三角形画好了,但第二个代码不行。有人能解释一下我做错了什么吗...
判断是否在支持的环境打开 var isSupportedApp = Tida.isSupportedApp;// 判断是否在天猫/手淘环境下,一般用于处理应用的兼容。
我想创建一个多边形从形状点。
我已经画了一个正方形,但是我怎样才能在它旁边放置另一个正方形而没有任何空隙呢?我认为< code>mRedRect1F中的第一个参数(0)需要更改,但我不知道该更改什么。 使现代化
我目前正在使用JavaFX研究不同形状之间的边界相交。我想检测两个多边形在它们的点上的碰撞,而不是在它们的边界上(即2个多边形)。 请参阅图1:不期望的行为,以及图2:期望的行为。 是否有任何现有的算法可以帮助我或使用任何库?提前感谢:) 在这里找到我的解决方案: 输出: 它似乎工作正常,我将使用Path对象进行测试以替换多边形objets。