基于顶点的openGL中具有不同颜色的三角形的平面着色
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于顶点的openGL中具有不同颜色的三角形的平面着色相关的知识,希望对你有一定的参考价值。
我是openGL的新手。现在,我想在3D中绘制一个三角形,其中填充了不同的颜色图案。但我没有获得具有独特图层的颜色。所有颜色都被插值。
同样在下面我附上了预期输出的图像,并获得了上述过程的输出。
如果我使用glShadeModel (GL_SMOOTH);
根据获得的输出图像对颜色进行插值。
如果glShadeModel (GL_FLAT);
我为最后一个顶点给出的颜色,例如说蓝色,整个三角形用蓝色填充。
任何人都可以帮我解决这个问题。如果我有任何建议,对我很有帮助。顶点和片段着色器是解决此问题的更好方法吗?我对顶点和片段着色器知之甚少。这是我用来画那个traingle的方法。码:
glBegin(GL_TRIANGLES);
glColor3f(1.0f, 0.0f, 0.0f);
glVertex3d(a1,b1,c1);
glColor3f(0.0f, 1.0f, 0.0f);
glVertex3d(a2,b2,c2);
glColor3f(0.0f, 0.0f, 1.0f);
glVertex3d(a3,b3,c3);
glEnd();
glFlush();
您在OpenGL中尝试了两种不同的模式。在其中一种模式中,它将在您绘制的多边形的顶点之间插入颜色。在另一种模式中,它将仅对整个多边形使用相同的平面颜色。
你得到整个多边形填充蓝色的原因是你要求OpenGL绘制一个单色的多边形。
根据您的预期输出图像判断,您需要让OpenGL绘制多个单色多边形;每种颜色一个。也就是说,你需要多次调用glBegin / glEnd。
在面向未来的新开发方面,我肯定会考虑使用OpenGL ES 2.x并使用着色器。 OpenGL ES 1.x实际上是一种死端技术,新的API解决了一些很大的局限性。
在片段着色器中,您可以使用flat
关键字注释输入变化,该关键字将使用来自激发顶点的顶点值进行切换,而不是从所有贡献顶点进行插值。但是这需要OpenGL ES 3.x - OpenGL ES 2.x不支持它。
在OpenGL ES 2.x及更早版本中,我认为你实际上需要复制顶点 - 即如果所有三个输入具有相同的值,则插值实际上是无操作。这显然会显着增加顶点处理成本。
我已经解决了这个问题,它对我来说很好。我没有使用任何着色器程序。请参考这个问题的答案。 Fastest Method to compute Linear interpolation between 2 points in QT using OpenGL
以上是关于基于顶点的openGL中具有不同颜色的三角形的平面着色的主要内容,如果未能解决你的问题,请参考以下文章