如何在OpenGL中实现平面着色而没有重复的顶点?

问题描述 投票:2回答:1

我正在尝试使用平面阴影在LWJGL OpenGL中渲染3D棱镜。例如,我有一个索引如下的多维数据集:

enter image description here

我在顶点缓冲区中只有8个顶点,我已如上所述对其进行索引。有什么方法可以在多维数据集上实现平面法线着色,如下所示?如果可能的话,我不想重写我的顶点和索引缓冲区以包括重复的顶点。

opengl glsl shader lwjgl n-dimensional
1个回答
0
投票
顶点着色器:

Interpolation qualifier

片段碎片:

flat out vec3 surfaceNormal;

当使用flat out vec3 surfaceNormal; 限定符时,将不对顶点着色器的输出进行插值。赋予片段着色器的值是与图元的一个顶点flat关联的属性之一。对于Provoking vertex,这是最后一个或第一个顶点。可以通过GL_TRINANGLE primitive选择。

选择第一个顶点:

GL_TRINANGLE

关于立方体网格的点的顺序(问题中的图像)

glProvokingVertex

您必须设置以下顶点坐标和法线向量:

glProvokingVertex

以这种方式定义索引,使顶点7、3、0、4、6、1是立方体左,右,前,后,底部和顶部两个三角形的第一个顶点:

glProvokingVertex(GL_FIRST_VERTEX_CONVENTION);

绘制12个三角形图元。例如:

  front      back

  1     3    7     5
   +---+      +---+
   |   |      |   |
   +---+      +---+
  0     2    6     4

// x y z nx, ny, nz -1, -1, -1, 0, -1, 0, // 0, nv front -1, -1, 1, 0, 0, 1, // 1, nv top 1, -1, -1, 0, 0, 0, // 2 1, -1, 1, 1, 0, 0, // 3, nv right 1, 1, -1, 0, 1, 0, // 4, nv back 1, 1, 1, 0, 0, 0, // 5 -1, 1, -1, 0, 0, -1, // 6, nv bottom -1, 1, 1, -1, 0, 0, // 7, nv left

© www.soinside.com 2019 - 2024. All rights reserved.