2012-08-02 48 views
2

我有一些乐趣,使我的第一个着色器和我的第一个测试主题是一个100x100四面临的图片。 我以为我会学习如何使用TRIANGLE_STRIP,所以我切换了它,移动了其中一个顶点调用,以便它再次看起来正方形。打开我的着色器,在它后面有一个重复的只有一张脸,但它有整个纹理。我只有一组绘制调用这个形状....Opengl TRIANGLE_STRIPS创建重复的鬼魂

继承人我的体形码:

glBegin(GL_TRIANGLE_STRIP); 
    float vx; 
    float vy; 
    for(float x=0; x<100; x++){ 
     for(float y=0; y<100; y++){ 
      float vx=x/5.0; 
      float vy=y/5.0; 
      glTexCoord2f(0.01*x, 0.01*y); 
      glVertex3f(vx, vy, 0); 

      glTexCoord2f(0.01+0.01*x, 0.01*y); 
      glVertex3f(.2+vx, vy, 0); 

      glTexCoord2f(0.01*x, 0.01+0.01*y); 
      glVertex3f(vx, .2+vy, 0); 

      glTexCoord2f(0.01+0.01*x, 0.01+0.01*y); 
      glVertex3f(.2+vx, .2+vy, 0); 
    }} 
glEnd(); 

我的(顶点)着色器代码:

uniform float uTime,uWaveintensity,uWavespeed; 
uniform float uZwave1,uZwave2,uXwave,uYwave; 
void main(){ 
vec4 position = gl_Vertex; 
gl_TexCoord[0] = gl_MultiTexCoord0; 
position.z=((sin(position.x+uTime*uWavespeed)*uZwave1)+(sin(position.y+uTime*uWavespeed))*uZwave2)*uWaveintensity; 
position.x=position.x+(sin(position.x+uTime*uWavespeed)*uXwave)*uWaveintensity; 
position.y=position.y+(sin(position.y+uTime*uWavespeed)*uYwave)*uWaveintensity; 
gl_Position = gl_ModelViewProjectionMatrix * position; 
} 

如果任何人有任何使用共享顶点更高效地绘制信息(triangle_strips)我已经使用了Google搜索,但目前为止我还不能理解XD。我想知道。

截图: 采用8x8面临

enter image description here

同样的事情同样的角度,线=鬼

enter image description here

我看到什么正在发生,但我不知道如何解决它。

+0

有这样的问题 - 总是有助于张贴屏幕截图。最好还可以使用glPolygonMode(GL_FRONT,GL_LINE)发布截图,以便我们看到顶点发生了什么。 – Ani 2012-08-02 15:13:13

+0

对不起,我不知道你可以张贴截图。或者你的意思是链接... nvm我看到 – Kaliber64 2012-08-02 16:14:13

+0

jo @ Kaliber64你还在吗? – Fattie 2014-08-21 17:12:01

回答

4

我不认为你可以用这种方式创建带有三角形条的100x100四平面。现在你只是沿着一个方向行和列,这意味着第一行的最后2个顶点将与第二行的第一个顶点创建一个三角形,这不是你想要的。

我建议你从2x2模式开始,以了解三角形条是如何工作的,然后移动到3x3和4x4以查看奇数和偶数情况之间的区别。当你对这些问题有一些了解时,你可以创建通用算法并将你的尺寸改为100.

之后,你可以专注于顶点着色器使其挥手。

而对于未来:如果你正在学习如何运作,从来没有从大数据开始。 :)

编辑:

自从我写这个答案我才知道,你已经可以做两个dimmensional格与一个三带,使用退化三角形:)。

当一个三角形使用相同的顶点两次时,它将在渲染过程中被光栅器忽略,所以在第一个条的末尾,可以使用第一条的最后一个顶点和第二个条的第一个顶点创建一个退化三角形。只要它们的顺序正确(例如1,1,2或1,2,2),那么将用作第三个顶点的哪个顶点并不重要。这样你就创建了一个不会被绘制的三角形,但它会将下一个“开始”点移动到第二个条的开始处,在那里你可以继续构建网格。

缺点是你创建了一些三角形,这些三角形将会被转换但是没有被绘制(其中不会有很多),但是它的优点是你只需要运行一个“绘图条”命令到GPU上, 。

+0

我想我明白你的意思我是试试看,谢谢。 – Kaliber64 2012-08-02 16:10:47

+0

真实存在的所有面孔都存在。除非波浪起伏,否则你不能看到鬼魂!然而,鬼魂错过了角落,2我想。我没有看到真正的缺陷。获取屏幕截图。 – Kaliber64 2012-08-02 16:18:03