gpt4 book ai didi

c++ - 为什么绘制的模型不在屏幕中央

转载 作者:行者123 更新时间:2023-11-28 02:43:37 24 4
gpt4 key购买 nike

我正在加载一个 Obj 模型 并试图像这样绘制它:

void Game::Update()
{
glViewport(0, 0, 800, 600);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glClearColor(Color::CornflowerBlue.R, Color::CornflowerBlue.G, Color::CornflowerBlue.B, Color::CornflowerBlue.A);
gluPerspective(45.0, 800.0 / 600.0, 1.0, 1000.0);



DrawModel(model);
}

void DrawModel(const Model &model)
{
for (size_t i = 0; i < model.Faces.size(); i++)
{
if (model.Materials.size() > 0)
{
float diffuse[] = { model.Materials[model.Faces[i].Material].Diffuse[0], model.Materials[model.Faces[i].Material].Diffuse[1], model.Materials[model.Faces[i].Material].Diffuse[2], 1.0 };
float ambient[] = { model.Materials[model.Faces[i].Material].Ambient[0], model.Materials[model.Faces[i].Material].Ambient[1], model.Materials[model.Faces[i].Material].Ambient[2], 1.0 };
float specular[] = { model.Materials[model.Faces[i].Material].Specular[0], model.Materials[model.Faces[i].Material].Specular[1], model.Materials[model.Faces[i].Material].Specular[2], 1.0 };
glMaterialfv(GL_FRONT, GL_DIFFUSE, diffuse);
glMaterialfv(GL_FRONT, GL_AMBIENT, ambient);
glMaterialfv(GL_FRONT, GL_SPECULAR, specular);
glMaterialf(GL_FRONT, GL_SHININESS, model.Materials[model.Faces[i].Material].Ns);
glColor3f(diffuse[0], diffuse[1], diffuse[2]);
}

int loop = 3;
if (model.Faces[i].IsQuad){
loop = 4;
glBegin(GL_QUADS);
}
else
glBegin(GL_TRIANGLES);

if (model.NormalVertices.size() > 0)
glNormal3f(model.NormalVertices.at(model.Faces[i].Index).X, model.NormalVertices.at(model.Faces[i].Index).Y, model.NormalVertices.at(model.Faces[i].Index).Z);
for (int j = 0; j < loop; j++)
{
//TODO TEXTURE:
if (model.Vertices.size() > 0)
glVertex3f(model.Vertices[model.Faces[i].VerticesIndex[j]].X, model.Vertices[model.Faces[i].VerticesIndex[j]].Y, model.Vertices[model.Faces[i].VerticesIndex[j]].Z);
}

glEnd();
}
}

但我看不到它,因为它不在屏幕中央,我知道我可以翻译它的坐标,但我希望它在不翻译的情况下在中心显示模型那可能吗?

最佳答案

尝试 gluLookAt()放置“相机”并告诉它看哪里。

您总是要平移模型以使它们在屏幕上可见,因为只有在单位立方体中呈现的几何体才会绘制到屏幕上。使用 gluLookAt() 和 gluPerspective() 仅生成拟合矩阵以将定义的平截头体中的几何转换为单位立方体。

看来您正在学习 OpenGL。如果是这种情况,我建议不要使用 glBegin(GL_TRIANGLES) 等学习旧的 (<3.0) 方式,而是立即学习新的 (>=3.0) OpenGL 版本,以及 VertexArrayObjects 等。首先,我可以推荐这个网站:OpenGL Tutorials

关于c++ - 为什么绘制的模型不在屏幕中央,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25103654/

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