【发布时间】:2012-08-02 14:52:34
【问题描述】:
我在制作我的第一个着色器时获得了一些乐趣,我的第一个测试对象是一张 100x100 的四面体图片。
我想我会学习如何使用TRIANGLE_STRIP,所以我切换了它,移动了一个顶点调用,让它看起来又是方形的。打开我的着色器,它后面只有一张脸的副本,但它上面有整个纹理。对于这个形状,我只有一组绘制调用....
这是我的形状代码:
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)更有效地绘制的信息,我已经用谷歌搜索了,但到目前为止我还没有理解 XD。我想知道。
屏幕截图: 8x8 面
同一个角度,线条=鬼
我知道现在发生了什么,但我不知道如何解决它。
【问题讨论】:
-
有这样的问题 - 它总是有助于发布截图。最好还使用 glPolygonMode(GL_FRONT, GL_LINE) 发布屏幕截图,以便我们可以看到您的顶点发生了什么。
-
对不起,我不知道你可以发布截图。或者你的意思是链接......我看到了nvm
-
jo @Kaliber64 你还在吗?
-
您需要什么吗?
标签: c++ opengl rendering glsl shader