Tôi đã cố gắng sử dụng phản hồi chuyển đổi để truy xuất dữ liệu từ trình đổ bóng đỉnh để gỡ lỗi vì ma trận quan điểm của tôi dường như được tính toán sai. Tôi không có gì trong bộ đệm chuyển đổi phản hồi. Bất cứ ai có thể giúp tôi tìm ra bước mà tôi đã làm sai?cách sử dụng phản hồi chuyển đổi opengl, tôi luôn nhận được 0 trong vùng đệm
Sau đây là đoạn mã của tôi về thiết lập chuyển đổi thông tin phản hồi:
//vertex to be passed into shader
const float vertexPos[] =
{
0.75f, 0.75f, 0.0f, 1.0f,
0.75f, -0.75f, 0.0f, 1.0f,
-0.75f, -0.75f, 0.0f, 1.0f
};
//set up transform feedback
const char *variableName = "retrieve";//the variable to be retreived in shader
float dateFromShader[16];//receive the data from shader
GLuint tf_bo;//transform feedback buffer id
glTransformFeedbackVaryings(shaderProgram, 1, &variableName, GL_INTERLEAVED_ATTRIBS);
glLinkProgram(shaderProgram);
glGenBuffers(1, &tf_bo);
glBindBuffer(GL_TRANSFORM_FEEDBACK_BUFFER, tf_bo);// Is this necessary to call glBindBuffer before glBindBufferBase?
glBindBufferBase(GL_TRANSFORM_FEEDBACK_BUFFER, 0, tf_bo);
glBufferDate(GL_TRANSFORM_FEEDBACK_BUFFER, sizeof(float) * 16, NULL, GL_DYNAMIC_COPY);
glBindBuffer(GL_TRANSFORM_FEEDBACK_BUFFER, 0);
//retrieve data from vertex shader
glEnable(GL_RASTERIZER_DICARD);
glBindBuffer(GL_TRANSFORM_FEEDBACK_BUFFER, tf_bo);
glBeginTransformFeedback(GL_TRIANGLES);
glDrawArrays(GL_TRIANGLES, 0, 3);//
glEndTransformFeedback();
glBindBuffer(GL_ARRAY_BUFFER, tf_bo);
glGetBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(float) * 16, dataFromShader);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glDisable(GL_RASTERIZER_DISCARD);
và vertex shader của tôi là như thế này:
#version 420
layout(location = 0) in vec4 position;
uniform mat4 perspectiveMatrix;
out mat4 retrieve;
void main()
{
gl_Position = perspectiveMatrix * position;
retrieve = perspectiveMatrix;
}
Vì tôi không có bất kỳ trải nghiệm nào với bộ đệm chuyển đổi phản hồi, tôi chỉ có thể khuyên bạn nên thử sao chép một số hướng dẫn trực tuyến như http://ogldev.atspace.co.uk/www/tutorial28/tutorial28.html Thứ hai, bạn có kiểm tra lỗi OpenGl không? Nó có thể là một cái gì đó đang đi sai nhưng bạn không biết về nó. Sử dụng [glGetError] (http://www.opengl.org/sdk/docs/man/xhtml/glGetError.xml) để thực hiện việc này. Nếu nó trả về một lỗi, cố gắng tìm ra cuộc gọi nào đang tạo ra nó bằng cách di chuyển cuộc gọi glGetError. Thứ ba, điều này có vẻ như một cách rất phức tạp để gỡ rối ma trận quan điểm của bạn. Một bett xa – Hannesh
cảm ơn lời khuyên của bạn, tôi sẽ cố gắng kiểm tra ma trận prespective trong mã ứng dụng không đổ bóng. Tôi nghĩ rằng tôi sẽ cần phải sử dụng chuyển đổi thông tin phản hồi sau đó anyway, vì vậy tôi nên tìm hiểu nó thông qua để sử dụng trong tương lai. – Nowibananatzki