提示コードですが、 objファイルをロードして描画させたいのですがモデルが表示されません。カメラの問題だと思うのですが提示サイト通りやっても描画されません。
確認した事
頂点データを格納している変数の中身を表示して確認
正射型による2D描画できている
カメラの視点を動かして上下左右に動かし描画されているかどうかを確認
デバッグ表示部のコードで上が頂点座標、下が回転、平行移動、スケール。した後の頂点座標
Github
https://github.com/Shigurechan/GL
参考サイト
デバッグ表示
$ ./GL 1.000000 1.000000 -1.000000 -1.000000 1.000000 -1.000000 -1.000000 1.000000 1.000000 1.000000 -1.000000 1.000000 1.000000 1.000000 1.000000 -1.000000 1.000000 1.000000 -1.000000 -1.000000 1.000000 -1.000000 1.000000 1.000000 -1.000000 1.000000 -1.000000 -1.000000 -1.000000 -1.000000 1.000000 -1.000000 -1.000000 1.000000 -1.000000 1.000000 1.000000 -1.000000 -1.000000 1.000000 1.000000 -1.000000 1.000000 1.000000 1.000000 -1.000000 -1.000000 -1.000000 -1.000000 1.000000 -1.000000 1.000000 1.000000 -1.000000 7.500000 10.000000 59.801193 60.000000 -7.500000 10.000000 59.801193 60.000000 -7.500000 10.000000 39.800797 40.000000 7.500000 -10.000000 39.800797 40.000000 7.500000 10.000000 39.800797 40.000000 -7.500000 10.000000 39.800797 40.000000 -7.500000 -10.000000 39.800797 40.000000 -7.500000 10.000000 39.800797 40.000000 -7.500000 10.000000 59.801193 60.000000 -7.500000 -10.000000 59.801193 60.000000 7.500000 -10.000000 59.801193 60.000000 7.500000 -10.000000 39.800797 40.000000 7.500000 -10.000000 59.801193 60.000000 7.500000 10.000000 59.801193 60.000000 7.500000 10.000000 39.800797 40.000000 -7.500000 -10.000000 59.801193 60.000000 -7.500000 10.000000 59.801193 60.000000 7.500000 10.000000 59.801193 60.000000
camera
std::shared_ptr<std::vector<FrameWork::D2::VertexAttribute>> FrameWork::Camera::vertex = std::make_shared<std::vector<FrameWork::D2::VertexAttribute>>(0); //頂点配列 glm::mat4 FrameWork::Camera::scale = glm::mat4(); //拡大縮小 glm::mat4 FrameWork::Camera::rotate = glm::mat4(); //回転 glm::mat4 FrameWork::Camera::translate = glm::mat4(); //平行移動 //描画行列 glm::vec3 FrameWork::Camera::position = glm::vec3(0,0,0); //座標 glm::vec3 FrameWork::Camera::vecLook = glm::vec3(0,0,-1); //向き(視線) glm::mat4 FrameWork::Camera::view = glm::lookAt(glm::vec3(position.x, position.y, position.z), vecLook, glm::vec3(0, 1, 0)); //ビュー行列 glm::mat4 FrameWork::Camera::projection = glm::perspective(glm::radians(90.0f), 4.0f / 3.0f, 0.1f, 100.0f); //透視射形行列 // ##################################### 初期化 ##################################### void FrameWork::Camera::Init() { vertex->resize(6); //頂点配列を初期化 } // ##################################### 頂点属性を取得 ##################################### std::shared_ptr<std::vector<FrameWork::D2::VertexAttribute>> FrameWork::Camera::getVertexAttribute() { return vertex; } // ##################################### 座標を設定 ##################################### void FrameWork::Camera::setPosition(glm::vec3 p) { position = p; //座標 } // ##################################### 視線を設定 ##################################### void FrameWork::Camera::setLook(glm::vec3 l) { vecLook = l; //向き view = glm::lookAt(glm::vec3(position.x, position.y, position.z), vecLook, glm::vec3(0, 1, 0)); } // ##################################### 座標を取得 ##################################### glm::vec3 FrameWork::Camera::getPosition() { return position; } // ##################################### 視線を取得 ##################################### glm::vec3 FrameWork::Camera::getLook() { return vecLook; } // ##################################### 3D ビュー行列を取得 透視射形行列 ##################################### glm::mat4 FrameWork::Camera::getViewProjection() { return projection * view; } // ##################################### 2D ビュー行列を取得 正射形 ##################################### glm::mat4 FrameWork::Camera::getProjection_2D() { return glm::ortho(0.0f, FrameWork::windowContext->getSize().x, FrameWork::windowContext->getSize().y, 0.0f, -1.0f, 1.0f); } // ###################### デストラクタ ###################### FrameWork::Camera::~Camera() { }
.vert
/*######################################################################### # ###########################################################################*/ #version 420 //#extension GL_ARB_explicit_uniform_location : require layout(location = 0) in vec3 vertexPosition; //layout(location = 1) in vec2 vertexUV; //layout(location = 2) in vec3 vertexNormal; //layout(location = 3) out vec2 vUV; layout(location = 1) out vec4 vFragment; //layout(location = 4) out vec3 vNormal; uniform mat4 uTranslate; uniform mat4 uRotate; uniform mat4 uScale; uniform mat4 uViewProjection; uniform vec4 uFragment; void main() { vec4 vertex = vec4(vertexPosition,1.0); mat4 model = uTranslate * uRotate * uScale; gl_Position = (uViewProjection * model) * vertex; // vUV = vertexUV; vFragment = uFragment; // vNormal = vertexNormal; }
.frag
/*######################################################################### # ###########################################################################*/ #version 420 //#extension GL_ARB_explicit_uniform_location : require //layout(location = 3) in vec2 vUV; layout(location = 1) in vec4 vfragment; //layout(location = 4) in vec3 vNormal; //uniform sampler2D uImage; out vec4 fragment; void main() { fragment = vfragment; // fragment = texture(uImage,vUV); }
Object.cpp
FrameWork::D3::Object::Object(ObjFile o) : Render() { obj = o; //オブジェクトファイル shader->Input(FrameWork::LoadShader("Shader/3D/BasicMono_3D.vert")->data(), FrameWork::LoadShader("Shader/3D/BasicMono_3D.frag")->data()); // printf("%d\n",obj.vertex.size()); //頂点 GLint attrib = shader->getAttribLocation("vertexPosition"); glEnableVertexAttribArray(attrib); glBufferData(GL_ARRAY_BUFFER, obj.vertex.size() * sizeof(VertexAttribute), obj.vertex.data(), GL_STATIC_DRAW); glVertexAttribPointer(attrib, 1, GL_FLOAT, GL_FALSE, 3 * sizeof(GLfloat), (GLvoid *)0); shader->setBindAttribLocation("vertexPosition"); //バインド解除 glBindVertexArray(0); glBindBuffer(GL_ARRAY_BUFFER, 0); } void FrameWork::D3::Object::Renderer() { shader->setEnable(); glBindVertexArray(vao); glBindBuffer(GL_ARRAY_BUFFER, vbo); glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(VertexAttribute) * obj.vertex.size(), obj.vertex.data()); //Transform setPosition(glm::vec3(0,0,-50)); //座標 setScale(glm::vec3(100,100,100)); //スケール setRotate(glm::vec3(0,0,0),0); //回転 //描画 shader->setUniformMatrix4fv("uTranslate",getMatTranslation()); shader->setUniformMatrix4fv("uRotate", getMatRotate()); shader->setUniformMatrix4fv("uScale", getMatScale()); shader->setUniform4f("uFragment", GetGlColor(glm::vec4(0,255,0,255))); shader->setUniformMatrix4fv("uViewProjection", FrameWork::Camera::getViewProjection()); glDrawArrays(GL_TRIANGLES, 0, obj.vertex.size()); //描画 //バインド解除 glBindVertexArray(0); glBindBuffer(GL_ARRAY_BUFFER, 0); shader->setDisable(); } FrameWork::D3::Object::~Object() { }
Main.cpp
int main() { FrameWork::Init(glm::ivec2(800, 600), glm::ivec2(4,2), "FrameWork"); // 初期化 FrameWork::Camera::Init(); //カメラ初期化 FrameWork::ObjFile file; FrameWork::D3::LoadObj("Model/test.obj",file); FrameWork::D3::Object object(file); float y = 0; float x = 0; while (*FrameWork::windowContext) { FrameWork::windowContext->FrameUpdate(glm::vec4(0,0,0,255)); if(FrameWork::windowContext->getKeyInput(GLFW_KEY_LEFT) > (short)0) { x += 0.01; printf("left\n"); printf("%f , %f \n",x,y); } else if(FrameWork::windowContext->getKeyInput(GLFW_KEY_RIGHT) > (short)0) { x += -0.01; printf("right\n"); printf("%f , %f \n",x,y); } if(FrameWork::windowContext->getKeyInput(GLFW_KEY_UP) > (short)0) { y += 0.01; printf("up\n"); printf("%f , %f \n",x,y); } else if(FrameWork::windowContext->getKeyInput(GLFW_KEY_DOWN) > (short)0) { y += -0.01; printf("down\n"); printf("%f , %f \n",x,y); } FrameWork::Camera::setLook(glm::vec3(x,y,-1)); FrameWork::Camera::setPosition(glm::vec3(0,0,50)); object.Renderer(); FrameWork::windowContext->Wait(); FrameWork::windowContext->SwapBuffers(); } return 0; }

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。