我编写了一个绘制以下多维数据集的代码:
如图所示,每一方都剔除了错误的面孔,即外面。
我需要更改哪些面朝另一个方向?
整个立方体由以下(几何)着色器生成:
#version 330 core
layout(points) in;
layout(triangle_strip, max_vertices=24) out;
out vec2 tex_coord;
uniform mat4x4 model;
uniform mat4x4 view;
uniform mat4x4 projection;
uniform float size = 1.0;
const vec2 texc[4] = vec2[](vec2(0, 0),
vec2(1, 0),
vec2(0, 1),
vec2(1, 1));
void main() {
float asize = size / 2;
vec4 offset[24] = vec4[] (
vec4(-asize, asize, -asize, 0.0), //t
vec4( asize, asize, -asize, 0.0),
vec4(-asize, asize, asize, 0.0),
vec4( asize, asize, asize, 0.0),
vec4(-asize, -asize, asize, 0.0), //d
vec4( asize, -asize, asize, 0.0),
vec4(-asize, -asize, -asize, 0.0),
vec4( asize, -asize, -asize, 0.0),
vec4(-asize, asize, -asize, 0.0), //l
vec4(-asize, asize, asize, 0.0),
vec4(-asize, -asize, -asize, 0.0),
vec4(-asize, -asize, asize, 0.0),
vec4( asize, asize, asize, 0.0), //r
vec4( asize, asize, -asize, 0.0),
vec4( asize, -asize, asize, 0.0),
vec4( asize, -asize, -asize, 0.0),
vec4(-asize, asize, asize, 0.0), //f
vec4( asize, asize, asize, 0.0),
vec4(-asize, -asize, asize, 0.0),
vec4( asize, -asize, asize, 0.0),
vec4( asize, asize, -asize, 0.0), //b
vec4(-asize, asize, -asize, 0.0),
vec4( asize, -asize, -asize, 0.0),
vec4(-asize, -asize, -asize, 0.0));
int i, j, k;
for(i = 0; i < gl_in.length(); ++i) {
for(k = 0; k < offset.length() / 4; ++k) {
gl_PrimitiveID = k;
for(j = 0; j < 4; ++j) {
mat4x4 base;
gl_Position = projection * view * model * (gl_in[i].gl_Position + offset[j + k*4]);
tex_coord = texc[j];
EmitVertex();
}
EndPrimitive();
}
}
}
这是统一的矩阵:
glm::mat4x4 model;
glm::mat4x4 view = glm::lookAt(glm::vec3(1.1f, 1.3f, 1.2f),
glm::vec3(0.0f, 0.0f, 0.0f),
glm::vec3(0.0f, 1.0f, 0.0f));
glm::mat4x4 projection = glm::perspective(80.0f, (float)dw/(float)dh, 0.01f, 100.0f);
答案 0 :(得分:2)
您只是输出错误的缠绕顺序的三角形,即顺时针而不是逆时针。默认情况下,面部被视为&#34;正面朝向&#34;如果它的顶点有逆时针绕组; glFrontFace
可用于控制此情况(通过GL_CCW
进行逆时针绕线,GL_CW
进行顺时针绕线。
帮自己一个忙,修复多维数据集的数据。 :)