Помогите, уже второй день не могу понять, почему у меня не корректно отображается 3d сцена, плоскости не перекрываются, почему, не понятно
class Camera {
public:
glm::quat camera_quat;
GLfloat x = 0.5, y = 6.5, z = -60;
GLfloat centerx = 0.5, centery = 0, centerz = 1;
GLfloat rotx = 1, roty = 0, rotz = 0;
};
struct point3d {
float x, y, z;
};
class Scene {
public:
Camera* camera = new Camera();
};
float speedx = 0;
struct coordinate {
float x, y, z;
coordinate(float a, float b, float c) : x(a), y(b), z(c) {};
};
float angle = 0.0;
Scene* scene = new Scene();
std::vector <Object3D>* objects3D = new std::vector < Object3D>();
float offset = 0;
bool loaded = false;
void display(void)
{
if (!loaded) {
loader.LoadFile("map3.obj", objects3D);
loaded = true;
}
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
int height = glutGet(GLUT_WINDOW_HEIGHT);
int width = glutGet(GLUT_WINDOW_WIDTH);
gluPerspective(60.0f, (double)width / (double)height, 0.0f, 300.0f);
glm::mat4 myMatrix;
glm::vec4 myVector;
float key_pitch = 5, key_yaw = 0, key_roll = 0;
glm::quat key_quat = glm::quat(glm::vec3(key_pitch, key_yaw, key_roll));
key_pitch = key_yaw = key_roll = 0;
scene->camera->camera_quat = key_quat * scene->camera->camera_quat;
scene->camera->camera_quat = glm::normalize(scene->camera->camera_quat);
glm::mat4 rotate = glm::mat4_cast(scene->camera->camera_quat);
glm::mat4 translate = glm::mat4(1.0f);
glm::vec3 eyeVector(0, 0, 0);
translate = glm::translate(translate, -eyeVector);
glm::mat4 viewMatrix = rotate * translate;
glMatrixMode(GL_MODELVIEW); //СМОТРЕТЬ ОТСЮДА ----------------------------------->
glLoadIdentity();
gluLookAt(scene->camera->x, scene->camera->y, scene->camera->z, scene->camera->x + scene->camera->rotx, scene->camera->y + scene->camera->roty, scene->camera->z + scene->camera->rotz, 0, 1, 0);
glMatrixMode(GL_MODELVIEW);
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
for (int i = 0; i < objects3D->size(); i++)
{
for (int k = 0; k < objects3D->at(i).vertex.size(); k++)
{
glEnable(GL_TEXTURE_2D);
glColor3d(1, 1, 1);
glBindTexture(GL_TEXTURE_2D, objects3D->at(i).texture);
glBegin(GL_POLYGON);
for (int j = 0; j < objects3D->at(i).vertex.at(k).size(); j++)
{
glTexCoord2d(objects3D->at(i).vertex.at(k).at(j).TextureCoordinate.X, objects3D->at(i).vertex.at(k).at(j).TextureCoordinate.Y);
glVertex3f(objects3D->at(i).vertex.at(k).at(j).Position.X, objects3D->at(i).vertex.at(k).at(j).Position.Y, objects3D->at(i).vertex.at(k).at(j).Position.Z);
}
glEnd();
glDisable(GL_TEXTURE_2D);
}
}
glutSwapBuffers();
glutPostRedisplay();
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
glutInitWindowPosition(100, 100);
glutInitWindowSize(400, 400);
glutCreateWindow("game");
glutDisplayFunc(display);
glutMainLoop();
}
Вот сама неправильно отрисованная сцена, ну вы сами видите, например забор за домом правильно отрисовался, а вот окна на задней стороне домика совсем не правильно, они не должны были отрисовываться, что делать? ((((((((
UPD:
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Собственно говоря мне нужно отсортировать " string name;" по алфавитуЖелательно без указателей и векторов
Как можно запустить команду cmd через system(""); что бы при этом не открывалась консоль именно при вызове system("");
Почему потоковый width для изменения принимает параметр типа std::streamsize, в то время как манипулятор setw принимает простой int? Насколько я понимаю,...
Можно ли как-то проинициализировать n элементов std::vector<int> по-умолчанию, те