每当我们使用索引数组渲染带有glDraw*Elements*的纹理多边形时,我们就可以提供一个顶点数组和一个纹理坐标数组.然后索引数组中的每个索引引用顶点数组中某个位置的顶点和纹理数组中相同位置的相应纹理坐标.现在,如果例如几个单独的基元(如QUADS)共享一个顶点,但需要该顶点的不同纹理坐标,我们必须在数组中复制该顶点多次,因为我们有不同的纹理坐标.因此,如果纹理坐标数组可以与索引数组中的位置相关联,则会更方便.这样,将一个特定顶点与不同纹理坐标相关联就不需要顶点重复.
这可能吗?如果是,使用什么语法?
我正在阅读关于openGL 3.3的教程(当然正在使用GLSL 330).不幸的是我的硬件仅限于openGL 3.0(其中GLSL 130是最新的格式).在GLSL 130中的语法
layout (location = 1) in vec4 position;
Run Code Online (Sandbox Code Playgroud)
产生错误.最重要的是,将几个"布局"实例应用于不同变量的代码不起作用.我甚至试过了
#extension ARB_explicit_attrib_location : require
Run Code Online (Sandbox Code Playgroud)
这也是不受支持的.有没有办法从330中等效地重写330这些语句?
我试图在3D空间中的随机位置显示尽可能多的纹理四边形.根据我的经验到目前为止,我甚至无法显示其中的几千个而不会将fps显着低于30(我的相机移动脚本变得迟钝).
现在我正在遵循一个古老的教程.初始化OpenGL后:
glEnable(GL_TEXTURE_2D);
glShadeModel(GL_SMOOTH);
glClearColor(0, 0, 0, 0);
glClearDepth(1.0f);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
Run Code Online (Sandbox Code Playgroud)
我设定了观点和观点:
glViewport(0,0,width,height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(60.0f,(GLfloat)width/(GLfloat)height,0.1f,100.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
Run Code Online (Sandbox Code Playgroud)
然后我加载一些纹理:
glGenTextures(TEXTURE_COUNT, &texture[0]);
for (int i...){
glBindTexture(GL_TEXTURE_2D, texture[i]);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_NEAREST);
gluBuild2DMipmaps(GL_TEXTURE_2D,3,TextureImage[0]->w,TextureImage[0]->h,GL_RGB,GL_UNSIGNED_BYTE,TextureImage[0]->pixels);
}
Run Code Online (Sandbox Code Playgroud)
最后我使用以下方法绘制GL_QUADS:
glBindTexture(GL_TEXTURE_2D, q);
glTranslatef(fDistanceX,fDistanceZ,-fDistanceY);
glBegin(GL_QUADS);
glNormal3f(a,b,c);
glTexCoord2f(d, e); glVertex3f(x1, y1, z1);
glTexCoord2f(f, g); glVertex3f(x2, y2, z2);
glTexCoord2f(h, k); glVertex3f(x3, y3, z3);
glTexCoord2f(m, n); glVertex3f(x4, y4, z4);
glEnd();
glTranslatef(-fDistanceX,-fDistanceZ,fDistanceY);
Run Code Online (Sandbox Code Playgroud)
我发现所有代码都非常自我解释.不幸的是,据我所知,这种做事方式已被弃用.我在互联网上读了一些关于PBO和vertexArrays的模糊的东西,但我没有找到关于如何使用它们的任何教程.我甚至不知道这些物体是否适合实现我在这里尝试做的事情(屏幕上有十亿个四边形而没有滞后).也许这里的任何人都可以给我一个明确的建议,我应该用什么来达到结果呢?如果你碰巧还有一分钟的业余时间,你能不能给我一些关于如何使用这些功能的简短摘要(就像我对上面弃用的那些功能一样)?
假设我们有一组多边形,可以改变摄像机视角,并可以在3D环境中平移摄像机.从某些视角,这些多边形中的一些被一个或多个其他多边形完全遮挡.对于每个绘制的帧,我们知道每个多边形的精确坐标,并且可以在"增加到相机的距离"或"减少到相机的距离"顺序中迭代它们.
现在我的问题:
什么是预渲染判断是否多边形被别人完全闭塞,这样我们就可以直接跳过它在拉伸过程中,以提高性能的一个有效方法是什么?