gpt4 book ai didi

c++ - OpenGL 旋转场景不符合预期

转载 作者:行者123 更新时间:2023-11-30 05:41:15 24 4
gpt4 key购买 nike

使用我的代码,当我旋转模型 View 时;它会单独旋转每个对象。
我正在尝试旋转整个 View 平面。我怎样才能做到这一点?

我知道 gluLookAt,但我想了解其背后的数学原理。

这是我的代码:
Prepare_scene 仅在 opengl init 和 window reshape 时调用

// prepare_scene
glViewport(0, 0, windowWidth, windowHeight);

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

glMatrixMode(GL_PROJECTION);
glLoadIdentity();

glOrtho(0, windowWidth, 0, windowHeight, 0, 40);

glEnable(GL_DEPTH_TEST);

glShadeModel(GL_SMOOTH); // Enable Smooth Shading

glClearDepth(1.0f); // Depth Buffer Setup
glEnable(GL_DEPTH_TEST); // Enables Depth Testing
glDepthFunc(GL_LEQUAL); // The Type Of Depth Testing To Do
glHint(GL_POINT_SMOOTH_HINT, GL_NICEST);

glEnable(GL_POINT_SMOOTH);
glPointSize(4);

glClearColor(0.0f, 0.0f, 0.0f, 1);

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

渲染器调用每个绘图帧

// render

glClearColor(0.0f, 0.0f, 0.0f, 1); // black
//glClearColor(1.0f, 1.0f, 1.0f, 1); // white
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
//

// try to control the camera
// push_matrix (and at the end of render, add pop_matrix)
glMatrixMode(GL_MODELVIEW);
glPushMatrix();

glTranslatef(eye_x, eye_y, eye_z);
glRotatef(x_angular, 0, 1, 0);

// Go back to projection mode
glMatrixMode(GL_PROJECTION);

GLfloat mat_black[] = {0.0,0.0,0.0, 1.0};
// Transparent white-grey window
GLfloat mat_specular_w[] = {0.8,0.88,0.88, 1.0};
GLfloat mat_shine_w[] = {20.0};

glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular_w);
glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_specular_w);
glMaterialfv(GL_FRONT, GL_AMBIENT, mat_specular_w);
glMaterialfv(GL_FRONT, GL_SHININESS, mat_shine_w);


// for each object in objects:
glPushMatrix();

// object "world coordinates"
// in glTranslatef(x,y,z); // z is always 0; for this test
glTranslatef( (*obj_i)->anchor[0] , (*obj_i)->anchor[1], (*obj_i)->anchor[2]);
glutWireSphere((*obj_i)->r, 15, 15);
//glutSolidSphere((*obj_i)->r, 30, 30); // (*obj_i)->r

glPopMatrix();



glMatrixMode(GL_MODELVIEW);
glPopMatrix();

glFlush();

SwapBuffers(hdc);

最佳答案

Stop doin' weird camera/object stuff the GL_PROJECTION堆栈。

GL_MODELVIEW 保存:

// Every frame

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
// do projection matrix stuff here (gluPerspective(), glOrtho(), etc.)
glOrtho(0, windowWidth, 0, windowHeight, 0, 40);

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
// do camera transform (gluLookAt(), etc.) here
// I'm guessing this was your camera transform(s):
glTranslatef(eye_x, eye_y, eye_z);
glRotatef(x_angular, 0, 1, 0);

// foreach object:
glPushMatrix();
{
// do whatever
glTranslatef( (*obj_i)->anchor[0] , (*obj_i)->anchor[1], (*obj_i)->anchor[2]);
...
}
glPopMatrix();

关于c++ - OpenGL 旋转场景不符合预期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31216168/

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