gpt4 book ai didi

c++ - gluLookAt 不工作?

转载 作者:行者123 更新时间:2023-11-27 23:11:37 25 4
gpt4 key购买 nike

为什么 gluLookAt 不工作?

它对场景没有任何影响,就好像它甚至没有被调用一样。

是因为我正在使用 glMatrixMode(GL_MODELVIEW); 如果我不包含它,屏幕上什么也看不到。

我正在使用 GLFW、GLEW 和 GLM。

// game.cpp:
Car* car;
void Game::init()
{
// LOADING SHADERS:
loadShaders();

// CREATING ENTITIES:
car = new Car();
//cube->position.x = -0;
car->position.z = -2;
entities.push_back(car);

// INITIAL GL PARAMETERS:
glEnable(GL_CULL_FACE); // BACK FACE CULLING
glEnable(GL_DEPTH_TEST); // DRAW NON-OBSCURED
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); // FILL POLYGON MODE

glClearColor(0.3f, 0.5f, 0.9f, 0.0f); // BACKGROUND COLOR

glMatrixMode(GL_PROJECTION);
gluPerspective(CAMERA_FOVY, (GLdouble)WINDOW_WIDTH / (GLdouble)WINDOW_HEIGHT, CAMERA_ZNEAR, CAMERA_ZFAR);
}

void Game::update()
{
for (int i = 0; i != entities.size(); ++i)
{
entities[i]->update();
}
}

void Game::render()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);

glLoadIdentity();
gluLookAt(0, 0, 0, car->position.x, car->position.y, car->position.z, 0, -1, 0);

for (int i = 0; i != entities.size(); ++i)
{
glLoadIdentity();
glTranslatef(entities[i]->position.x, entities[i]->position.y, entities[i]->position.z);
glRotatef(entities[i]->rotation.x, 1.0f, 0.0f, 0.0f);
glRotatef(entities[i]->rotation.y, 0.0f, 1.0f, 0.0f);
glRotatef(entities[i]->rotation.z, 0.0f, 0.0f, 1.0f);
entities[i]->render();
}
}

最佳答案

您在实体 for 循环的每次迭代开始时调用 glLoadIdentity。在第一次迭代中,这将替换由 gluLookAt 设置的矩阵。

为确保此 View 矩阵适用于您要在调用 gluLookAt 之后调用 glPushMatrix 的所有实体。确保在 for 循环之后通过调用 glPopMatrix 来平衡这一点。

关于c++ - gluLookAt 不工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19939678/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com