HMD oculus rift で実際に AR を作る作業をしています。私は openGL のプロではありませんが、これが問題の原因であると確信しています。
次のエラーが表示されます。
THING.exe の 0x064DBD07 (nvoglv32.dll) で未処理の例外: 0xC0000005: アクセス違反の読み取り場所 0x00000000。
quadGeometry_supcam->draw(); での描画中に発生します。それは renderCamera(eye); にあります。:
glDrawElements(elementType, elements * verticesPerElement,
GL_UNSIGNED_INT, (void*) 0);// Stop at this line in the debuger
描画コードはこちら
frameBuffer.activate();
glEnable(GL_DEPTH_TEST);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
gl::Stacks::with_push(pr, mv, [&]{
mv.preMultiply(eyeArgs.modelviewOffset);
pr.preMultiply(eyeArgs.projectionOffset);
//renderCamera(eye); //If I uncomment this part, it crash
renderScene(eye);
//renderCamera(eye); //If I uncomment this part, it works but It's not what I want
});
frameBuffer.deactivate();
glDisable(GL_DEPTH_TEST);
viewport(eye);
distortProgram->use();
glActiveTexture(GL_TEXTURE1);
eyeArgs.distortionTexture->bind();
glActiveTexture(GL_TEXTURE0);
frameBuffer.color->bind();
quadGeometry->bindVertexArray();
quadGeometry->draw();
gl::VertexArray::unbind();
gl::Program::clear();
/////////////////////////////////////////////// ////////////
void renderScene(StereoEye eye) {
GlUtils::renderSkybox(Resource::IMAGES_SKY_CITY_XNEG_PNG);
GlUtils::renderFloorGrid(player);
gl::MatrixStack & mv = gl::Stacks::modelview();
gl::Stacks::with_push(mv, [&]{
mv.translate(glm::vec3(0, eyeHeight, 0)).scale(ipd);
GlUtils::drawColorCube(true); // Before this call renderCamera crash after it works
});
}
void renderCamera(StereoEye eye) {
gl::ProgramPtr program;
program = GlUtils::getProgram(
Resource::SHADERS_TEXTURED_VS,
Resource::SHADERS_TEXTURED_FS);
program->use();
textures[eye]->bind();
quadGeometry_supcam->bindVertexArray();
quadGeometry_supcam->draw();
}
GlUtils::drawColorCube(true); の前に renderCamera を呼び出すと、クラッシュしますが、動作した後です。しかし、残りの前にカメラを描く必要があります。drawColorCube は別のシェーダーを使用しているため、正確には説明しません。問題は、シェーダー プログラムに何かが欠けていることにあると思います。これがフラグメントと頂点シェーダーです。
バーテックス:
uniform mat4 Projection = mat4(1);
uniform mat4 ModelView = mat4(1);
layout(location = 0) in vec4 Position;
layout(location = 1) in vec2 TexCoord0;
out vec2 vTexCoord;
void main() {
gl_Position = Projection * ModelView * Position;
vTexCoord = TexCoord0;
}
断片:
uniform sampler2D sampler;
in vec2 vTexCoord;
out vec4 vFragColor;
void main() {
vFragColor = texture(sampler, vTexCoord);
}
(カメラの画像にシーンを描きたい)。何か案が?