Merhaba ben opengl bir model sınıf oluşturmak ve bir oyunda modeli sınıfının bir örneğini oluşturmaya çalışıyorum tüm bir model Sınıf oluşturuluyor. Bir nesneyi sadece render edebiliyorum ve ikinci nesne oluşturulamıyor. hepsi aynı sınıfta iken OpenGL
ben aynı problem vardı. Nesneleri bot için ayrı bir VBO ve VAO oluşturdum ve problemler çözüldü. Şimdi bunun dışında bir sınıf oluşturmak çalışıyorum ve şimdi aynı sorunla karşı karşıya ediyorum. Bir sınıf olduğu için ayrı bir VAO ve VBO oluşturulmadı mı?Model sınıfım ve oyun sınıfım aşağıdaki gibidir. Burada
#include "FlatModel.h"
#include "Camera.h"
GLfloat vertices[] = {
//position
-0.5f, -0.5f, 0.0f,
-0.5f, 0.5f, 0.0f,
0.5f, 0.5f, 0.0f,
0.5f, -0.5f, 0.0f
};
GLuint indices[] = {
// front
0, 1, 2,
0, 2, 3
};
FlatModel::FlatModel(Camera* _camera, glm::vec3 color) {
camera = _camera;
objectColor = color;
ShaderLoader *shaderLoader = 0;
program = shaderLoader->CreateProgram("shaders/FlatModel.vs","shaders/FlatModel.fs");
glEnable(GL_DEPTH_TEST);
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
glGenVertexArrays(1, &vao);
glBindVertexArray(vao);
glGenBuffers(1, &vbo);
glGenBuffers(1, &ebo);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ebo);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(GLfloat), (GLvoid*)0);
glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindVertexArray(0);
}
FlatModel::~FlatModel() {
}
void FlatModel::update(GLfloat time) {
GLint currentTimeLocation = glGetUniformLocation(program, "currentTime");
glUniform1f(currentTimeLocation, time);
GLint objectColorLoc = glGetUniformLocation(program, "objectColor");
glUniform3f(objectColorLoc, objectColor.x, objectColor.y, objectColor.z);
glm::mat4 mvp = camera->getprojectionMatrix() * camera->getViewMatrix() * model;
GLint mvpLoc = glGetUniformLocation(program, "mvp");
glUniformMatrix4fv(mvpLoc, 1, GL_FALSE, glm::value_ptr(mvp));
}
void FlatModel::render() {
glUseProgram(this->program);
glBindVertexArray(vao);
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);
glBindVertexArray(0);
}
Ve
İşte oyun sınıfı#include "Game.h"
void Game::GameInit(){
camera = new Camera(45.0f, WIDTH, HEIGHT, 0.1f, 100.0f);
camera->setCameraSpeed(0.05f);
ground = new FlatModel(camera, glm::vec3(1.0f, 1.0f, 0.5f));
ground->setScale(glm::vec3(3.0f, 0.5f, 1.0f));
ground->setPosition(glm::vec3(0.0f, -0.5f, 0.0f));
box = new FlatModel(camera, glm::vec3(1.0f, 0.0f, 0.0f));
box->setScale(glm::vec3(1.0f, 0.5f, 1.0f));
box->setPosition(glm::vec3(0.0f, 0.5f, 0.0f));
}
void Game::GameUpdate(){
camera->update();
GLfloat currentTime = glutGet(GLUT_ELAPSED_TIME);
currentTime = currentTime/1000;
ground->update(currentTime);
box->update(currentTime);
}
void Game::GameDraw(){
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
ground->render();
box->render();
}
olan çıkıştır. Sadece kutu gösterir ve zemin olmaz.
Orada bu kodda hiçbir sınıflardır. –
Yalnızca .cpp dosyalarını dahil ettim ve üstbilgileri değil. –