아래의 LWJGL 3 코드는 삼각형 렌더링을위한 버퍼 등을 설정합니다. 나는 삼각형을 볼 수있다. 지금 나는 정확히 무슨 일이 일어나는지 이해하려고 노력하고 있습니다.버텍스 버퍼 데이터를 배열 버텍스 데이터 흐름
아래 코드를 이해했습니다. 먼저 숫자 배열을위한 컨테이너 인 정점 버퍼 객체를 만듭니다. glBindBuffer() 및 glBufferData()는 정점 버퍼를 정점 배열로 채 웁니다. 두 번째 정점 배열에 대해이 작업을 다시 수행합니다. 그런 다음 정점 및 조각 쉐이더를 컴파일하고 쉐이더 프로그램에 추가합니다. 어떻게 든이 프로그램은 두 번째 정점 버퍼 객체의 데이터에 액세스합니다.
그러면 정점 배열 객체를 바인딩합니다. 두 번째 버텍스 버퍼 객체의 버텍스 데이터를 처리 한 쉐이더 프로그램의 결과물로 채워 넣습니다.
질문
이 설치 정점 복수의 데이터가 동일한 명령 세트에 의해 처리 될 수 있도록하는 것 같습니다. 두 번째 코드가 아닌 첫 번째 정점 데이터를 전달하기 위해 코드 끝 부분에 어떤 명령을 배치 할 것입니까? 모든 버텍스 버퍼 객체에 대해 별도의 버텍스 배열 객체를 생성해야합니까, 아니면 다른 버퍼를 파이프 아래로 보내고 동일한 버텍스 배열 객체를 유지할 수 있습니까? 여기에 코드
내가 위의 참조 된 코드입니다 : 첫째, 변수는 다음과 같습니다
는//The vertices of a triangle
float[] vertices = new float[] {
0.0f, 0.5f,
0.5f, -0.5f,
-0.5f, -0.5f
};
//Vertices of the second triangle
float[] vertices2 = new float[] {
0.0f, 0.9f,
0.5f, -0.5f,
-0.5f, -0.5f
};
//The source for the vertex shader
String vertexShaderSrc =
"#version 300 es\n\n" +
"precision mediump float;\n" +
"in vec2 position;\n\n" +
"void main()\n" +
"{\n" +
"gl_Position = vec4(position, 0.0, 1.0);\n" +
"}";
int vertexShader;
//The source for the fragment shader
String fragmentShaderSrc =
"#version 300 es\n\n" +
"precision mediump float;\n" +
"out vec4 outColor;\n\n" +
"void main()\n" +
"{\n" +
"outColor = vec4(1.0, 1.0, 1.0, 1.0);\n" +
"}";
int fragmentShader;
int shaderProgram;
//The position attribute
int posAttrib;
//A vertex buffer object handle.
int vbo;
//A second vertex buffer object handle.
int vbo2;
//A vertex array object handle.
int vao;
을 사용하는 코드 세그먼트는 다음과 같습니다
vbo = glGenBuffers();
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBufferData(GL_ARRAY_BUFFER, vertices, GL_STATIC_DRAW);
vbo2 = glGenBuffers();
glBindBuffer(GL_ARRAY_BUFFER, vbo2);
glBufferData(GL_ARRAY_BUFFER, vertices2, GL_STATIC_DRAW);
vertexShader = glCreateShader(GL_VERTEX_SHADER);
glShaderSource(vertexShader, vertexShaderSrc);
glCompileShader(vertexShader);
System.out.println(glGetShaderInfoLog(vertexShader));
fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
glShaderSource(fragmentShader, fragmentShaderSrc);
glCompileShader(fragmentShader);
System.out.println(glGetShaderInfoLog(fragmentShader));
shaderProgram = glCreateProgram();
glAttachShader(shaderProgram, vertexShader);
glAttachShader(shaderProgram, fragmentShader);
glBindFragDataLocation(shaderProgram, 0, "outColor");
glLinkProgram(shaderProgram);
glUseProgram(shaderProgram);
vao = glGenVertexArrays();
glBindVertexArray(vao);
posAttrib = glGetAttribLocation(shaderProgram, "position");
glVertexAttribPointer(posAttrib, 2, GL_FLOAT, false, 0, 0);
glEnableVertexAttribArray(posAttrib);