은 현재 내가 물을 시뮬레이션하는 프로그램을 쓰고 있어요. 여기에 나와있는 단계가 있습니다 :OpenGL을 버퍼 업데이트
- 물 표면을 만듭니다.
- 는 VAO는
- 내가 법선과 정점을 저장하는 정점 버퍼 객체를 만듭니다. 이 VBO에
- 바인드 포인터.
- 색인 버퍼 객체를 만듭니다.
그런 다음 glDrawElements를 사용하여이 평면을 렌더링 한 다음 물 표면의 정점 위치를 변경하는 update() 함수를 호출합니다. 그런 다음 glBufferSubData 함수를 호출하여 정점 위치를 업데이트합니다. 아무것도 버퍼가 변경되지 않은 경우로 발생하지 않습니다 -
내가 그렇게
.//some calculations
glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(Oscillator) * nOscillators, oscillators);
발진기 - 그것은있는 구조입니다 :
glGenBuffers(1, &vertexBuffer);
glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(Oscillator) * nOscillators, oscillators, GL_DYNAMIC_DRAW);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(Oscillator), 0);
glVertexAttribPointer(2, 3, GL_FLOAT, GL_FALSE, sizeof(Oscillator), (const GLvoid*)12);
glEnableVertexAttribArray(0); // Vertex position
glEnableVertexAttribArray(2); // normals position
glGenBuffers(1, &indicesBuffer);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indicesBuffer);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(unsigned int) * nIndices, indices, GL_DYNAMIC_DRAW);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indicesBuffer);
glBindVertexArray(0);
그런 다음 렌더링 :
glBindVertexArray(vaoHandle);
glDrawElements(GL_TRIANGLES, nIndices, GL_UNSIGNED_INT, 0);
update(time);
및 업데이트 기능 여기
는 코드의 8 각각 플로트 - x , Y, Z (정점의 위치), NX, NY, NZ (법선) upSpeed, newY를발진기 - 이것은 발진기 구조의 배열이다.
내가 뭘 잘못 했니?
물이 제대로 렌더링합니까? –
다시 그리기 전에 색상 버퍼/깊이 버퍼 /를 지우시겠습니까? – Felics
예, 물이 올바르게 렌더링되고 색상 및 깊이 버퍼가 지워집니다. – Shot