OpenGL VAOs/VBOs에서 핸들을 얻으려고하고 개념적으로 나는 거기에 있지만 어떤 이유로 든이 응용 프로그램은 화면에 아무 것도 그리지 않습니다. 4.2 컨텍스트에서 작업하고 있지만 코어 전용 3.3을 쓰고 있습니다. init_scene
를라는 함수에서OpenGL 3.3 응용 프로그램에서 아무 것도 그리지 않는 이유는 무엇입니까?
// Tetrahedron vertices
GLfloat tetra_vertices[12];
GLuint tetra_vao;
GLuint tetra_vbo;
나는 다음과 같은 한 :
glGenVertexArrays(1, &tetra_vao);
glBindVertexArray(tetra_vao);
glGenBuffers(1, &tetra_vbo); // One for vertex locations
glBindBuffer(GL_ARRAY_BUFFER, tetra_vbo); // Bind vertex locations buffer
glBufferData(GL_ARRAY_BUFFER, 12 * sizeof(GLfloat), tetra_vertices, GL_STATIC_DRAW);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
glEnableVertexAttribArray(0);
을 그리고 내 GLSL 프로그램이 연결되는 경우 :
여기에 해당 변수에 대한 선언이다
for (int i = 0; i < num_shaders; ++i)
glAttachShader(program, shaders[i]);
glBindAttribLocation(program, 0, "in_position");
glLinkProgram(program);
하나의 속성 만 사용하고 있으며 정점 위치입니다. 프로그램은 오류없이 링크됩니다.
다음은 draw_scene
함수 자체입니다 :
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glBindVertexArray(tetra_vao);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 12);
glBindVertexArray(0);
그리고 좋은 측정을 위해, 내 버텍스 쉐이더 :
#version 330
in vec3 in_position;
uniform mat4 modelview_matrix;
void main(void) {
gl_Position = vec4(in_position, 1.0f) * modelview_matrix;
}
modelview_matrix
단지 행렬에 통과하는 순간의 균일입니다. 뭔가 내가 간단하게 볼 수없는 것을 그려 질 수 잠시 생각, 그래서 나는 회색으로 내 투명 색상을 설정하고 여기에 바로 출력이 흰색해야 프래그먼트 쉐이더입니다 :
#version 330
out vec4 vFragColor;
void main(void)
{
vFragColor = vec4(1.0f);
}
모든 내가 읽은 , 특히 this tutorial과 Superbible은 꽤 명확 일련의 사건합니다
- 을 VAO
- 바인드 VAO
- 만들기 VBO
- 빈 만들기 D 및 속성 포인터 I 시도하고이 작동하지 않는 이유에 대한 명확한 그림을 얻기 위해 glDEBugger을 사용
을 설정 VBO
내가 빠뜨린 것이 있다면 알려 주시기 바랍니다. 감사!
업데이트 1 : 여기
는 VBO에로드 정점 데이터를 제공 배열 :
tetra_vertices = {
0.7f, 0.7f, 0.7f,
-0.7f, -0.7f, 0.7f,
-0.7f, -0.7f, -0.7f,
0.7f, -0.7f, 0.7f
};
가 여기 내 상황에 맞는 설정 물건의 모든 모습입니다 같은 :
glClearColor(0.2,0.2,0.2,0.0);
glClearDepth(1.0);
glViewport(0, 0, properties.size_x, properties.size_y);
glEnable(GL_DEPTH_TEST);
glCullFace(GL_BACK);
glEnable(GL_CULL_FACE);
glEnable(GL_VERTEX_ARRAY);
glEnable(GL_MULTISAMPLE);
업데이트 2 :
니콜 볼라스 (Nicol Bolas)의 대답은 내가 생각하지 못했던 정사각형 가시성에 대해 좋은 점을 제기했습니다. 불행히도 문제는 아닌 것 같습니다. 나는 그의 정점 목록을 시도하고 도태 꺼져,이 정점 시도 : 생각, 여전히 아무것도 사각형을 그릴 수 없지만,해야
tetra_vertices = {
-0.7f, -0.7f, 0.0f,
-0.7f, 0.7f, 0.0f,
0.7f, -0.7f, 0.0f,
0.7f, 0.7f, 0.0f
};
합니다. 나는 또한 12 개 요소 (12 좌표 = 4 x, y, z 정점)를 가져야한다고했을 때 glDrawArrays
을 12 개의 요소로 호출하고 있음을 발견했지만 문제가 해결되지 않았습니다. ("게시물이 너무 오래 되십시오"또는,)
업데이트 3 : 응용 프로그램 단계별 gDEBugger를의를 통해 걷는 , 나는 이상한 인상을 받았는데 뭔가를 발견했습니다. draw
함수에는 현재 VAO를 바인드하는 일반적인 사이클 인 glDrawArrays
이 있고 VAO 0을 바인드하여 다른 것을 그릴 수 있습니다. 이런 상황에서 GL 상태 설정을 관찰하면 내 VAO가 바인드되지 않은 경우 (즉, VAO 0이 바인드 된 경우) TRUE
이고 VAO가 바인드되는 경우 FALSE
인 것처럼 보입니다. 이 것이 사물의 방식입니까? GL_VERTEX_ARRAY
은 (으)로 보완되기보다는 glBindVertexArray
으로 대체되는 상태를 나타 냅니까? 또한 GL_TRIANGLE_STRIP
에서 GL_POINTS
으로 모드를 변경하고 glPointSize(5.0f)
으로 설정하면 단일 점이 0으로 그려 지므로 점이 생성되고 있지만 내 버텍스 쉐이더가 제대로 처리하지 못하는 것처럼 보입니다.
정점 데이터 란 무엇입니까? 초기화 코드의 나머지 부분은 어디에 있습니까? –
@NicolBolas 이것 좀 봐 주셔서 감사합니다. 버텍스 데이터와 초기화를 내 포스트에 추가했습니다. –