GLUT回调方法问题
GLUT callback methods issue
我试图实现一个相机控制的场景使用相机代码从:http://www.swiftless.com/tutorials/opengl/camera2.html
和一本书上的景观代码,它随机生成地形。通过使用如下所示的代码,鼠标控制和景观工作,但景观一直在随机生成。我怀疑这与IdleFunc有关,但是如果我从main()中取出那一行,鼠标就会停止工作。
如何将相机和土地分开独立工作?
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
camera();
landscape.draw();
glutSwapBuffers();
}
在主要:
// callback methods
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutIdleFunc(display);
glutPassiveMotionFunc(mouseMovement);
land.cpp:
void land::draw(void)
{
int i;
size = 1;
for (i=1;i<=numlevels;i++) size = size * 2;
for (i=0;i<=size;i++) cd[i] = (GLfloat)i/(GLfloat)size;
twotopowerh = exp(log(2.0)*hvalue);
cvalue = 1.0*sqrt(1.0 - twotopowerh*twotopowerh/4.0);
if (!sea) {
calcheights();
makesmooth();
}
drawmesh();
drawsides();
if (sea) {
drawsea();
sea = 0;
}
}
确实,每次调用风景绘制代码时都会重新生成几何图形。除了drawmesh()、drawsides()和drawsea()之外,所有在land::draw中的代码都应该放在构造函数或初始化器中。只有绘图调用应该从绘图函数进行。
编辑:修改提供的代码
land.hpp
class land : …
{
// ...
public:
void generate(void);
// ...
}
land.cpp
void land::generate(void)
{
int i;
size = 1;
for (i=1;i<=numlevels;i++) size = size * 2;
for (i=0;i<=size;i++) cd[i] = (GLfloat)i/(GLfloat)size;
twotopowerh = exp(log(2.0)*hvalue);
cvalue = 1.0*sqrt(1.0 - twotopowerh*twotopowerh/4.0);
if (!sea) {
calcheights();
makesmooth();
}
}
void land::draw(void)
{
drawmesh();
drawsides();
if (sea) {
drawsea();
sea = 0;
}
}
主要glutDisplayFunc(display);
glutReshapeFunc(reshape);
// better just issue a redisplay, allows for smoother input event processing
glutIdleFunc(glutPostRedisplay);
glutPassiveMotionFunc(mouseMovement);
landscape.generate();
// ...
glutMainLoop();
相关文章:
- 最小硬币更换问题(自上而下方法)
- 使用同一类中的方法重新分配字段时出现问题
- 我想直接在结构中插入,但没有一种方法可以正确避免填充问题
- Protobuf中重复字段的问题.使用重复字段进行序列化/反序列化的更好方法是什么?
- 此动态编程问题的自上而下方法
- 此解决方案中生成更改的方法数量(自上而下)有什么问题?
- 使用模板方法为标头提供空 cpp 时出现问题
- 这种针对 N Queen 问题的回溯方法不正确吗?
- C++ push() 和 pop() 方法使用指针的动态 LinkedList 的问题
- CreateFileA方法出现问题
- 必须使用尾随返回类型的示例,因为无法用旧方法解决问题
- 双重检查创建单例问题的方法
- C++ 指针问题 - 通过方法更新指针
- C++隐式/显式模板方法专用化问题
- 迭代快速排序方法的分区算法问题
- 单独的类声明和方法定义文件问题
- 我通过迭代加法将二进制数转换为十进制并检查单个字符(请参阅代码)的方法有什么问题?
- 如何通过动态规划方法解决这个问题?
- C++ 03 类模板 这是转换构造函数还是转换运算符?以及如何声明解决此问题的方法
- 一个c++语法问题:方法的类