Opengl es 在WebGL中同时使用多个原语
实际上,我正在尝试开发一个web应用程序,它将有限元网格可视化。为此,我正在使用WebGl。现在我有了一个页面,其中包含了使用三角形作为基本体在视口中绘制网格所需的所有代码(网格的每个四元元素被拆分为两个三角形来绘制)。问题是,当使用三角形时,所有的部分都是“连续的”,你看不到三角形之间的间隔。事实上,我想要实现的是在节点之间添加线,这样,在每个四边形元素(由两个三角形组成)周围,我们有黑色的线,因此网格可以实际显示 所以我可以在我的页面中定义行,但是由于一个着色器只能有一种类型的基元,如果我为行缓冲区添加代码并绑定它们,它只显示行,而不是元素(因为它们是最后绑定的缓冲区) 因此,我找到的最接近的解决方案是使用多个着色器,并使用多个程序管理它们,但此解决方案仅允许我使用Tria绘制几何体还是仅绘制直线,具体取决于当前选择的程序 你们谁能帮我解决这个问题?我见过一个windows应用程序,它使用OpenGL显示FE网格,除了使用不同的图层、照明等,它还能够将三角形与点和线混合。因此我知道这可能很复杂,但我认为如果OpenGL可以实现,那么webGL也应该可以 如果您能提供任何解决方案,我将非常感激,因为它包含一些代码作为示例,例如绘制一个三角形,但在其边界处包含三条黑线,在顶点处可能包含三个点。Opengl es 在WebGL中同时使用多个原语,opengl-es,3d,webgl,primitive,Opengl Es,3d,Webgl,Primitive,实际上,我正在尝试开发一个web应用程序,它将有限元网格可视化。为此,我正在使用WebGl。现在我有了一个页面,其中包含了使用三角形作为基本体在视口中绘制网格所需的所有代码(网格的每个四元元素被拆分为两个三角形来绘制)。问题是,当使用三角形时,所有的部分都是“连续的”,你看不到三角形之间的间隔。事实上,我想要实现的是在节点之间添加线,这样,在每个四边形元素(由两个三角形组成)周围,我们有黑色的线,因此网格可以实际显示 所以我可以在我的页面中定义行,但是由于一个着色器只能有一种类型的基元,如果我为
setup()
{
- 附加步骤-取消绑定以前的纹理,上载并绑定一个1x1黑色像素作为纹理。让此纹理对象为borderID; }
Draw loop()
{
- 解除先前纹理的绑定,绑定普通纹理,然后像当前设置一样绘制网格。这将用不同的颜色填充整个区域,没有边框(当前情况)
- 绑定borderID纹理,并再次绘制相同的顶点,但这次,请使用context.LINE_STRIP而不是context.TRIANGLES。这将使用黑色纹理绘制线,并将显示为边框,位于先前为每个三角形绘制的颜色之上。您可以有如下操作
if(currDrawMode==0)
context3dStore.bindTexture(context3dStore.TEXTURE_2D,meshTextureObj[bindId]);else context3dStore.bindTexture(context3dStore.TEXTURE_2D,borderTexture1pixObj[bindId]);
context3dStore.drawerElements((currDrawMode==0)?context3dStore.TRIANGLES:context3dStore.LINE_循环,指示计数[bindId],context3dStore.UNSIGNED_SHORT,0);
,其中currDrawMode在绘制边框和绘制网格填充之间切换
- 由于线条纹理显示为您之前使用的平面颜色的边框,这应该可以解决您的需要 }
gl\u FragColor=vVertexColor*texture2D(纹理,vtexturecordinates)
(假定使用合适的变量名称)但这不是prabindh的建议:他说用drawArrays(gl.三角形,…)
(在四边形中提供纹理)绘制常规纹理,然后用drawArrays(gl.LINE_STRIP)
(在四边形边缘提供黑色)绘制特殊的1x黑色纹理边界.谢谢,这正是我的意思。@EPApro-我已经编辑了我的答案。