首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >3D滚动场景- OpenGL

3D滚动场景- OpenGL
EN

Stack Overflow用户
提问于 2012-08-23 00:48:13
回答 1查看 317关注 0票数 1

我正试着在窗口中画云,并使它们朝向相机。我遇到的问题是,我想连续地这样做,而不想突然重绘任何东西。有人能告诉我我错过了什么吗?

代码如下:

代码语言:javascript
复制
#include <gl/glut.h>

int width = 800, height = 600;
float theta = 0, distance1 = -600, distance2 = -600;
void drawCloud()
{
glPushMatrix();
glTranslated(1,0,-2);
glutSolidSphere(4,10,10);
glTranslated(-2,0,-5);
glutSolidSphere(4,10,10);
glTranslated(-1,0,3);
glutSolidSphere(4,10,10);
glPopMatrix();

}

void drawCloudFormation()
{
glPushMatrix();
glTranslated(-60,30,-300);
drawCloud();
glPopMatrix();

glPushMatrix();
glTranslated(15,3,-150);
drawCloud();
glPopMatrix();

glPushMatrix();
glTranslated(50,30,-200);
drawCloud();
glPopMatrix();

glPushMatrix();
glTranslated(-15,-15,-250);
drawCloud();
glPopMatrix();

glPushMatrix();
glTranslated(25,-25,-100);
drawCloud();
glPopMatrix();

glPushMatrix();
glTranslated(-30,0,-50);
drawCloud();
glPopMatrix();
}

void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
//glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);

glPushMatrix();
glTranslated(0,0,distance1);
drawCloudFormation();
glPopMatrix();

glPushMatrix();
glTranslated(0,0,distance1-200);
glScaled(-1,1,1);
drawCloudFormation();
glPopMatrix();

glPushMatrix();
glTranslated(0,0,distance2-400);
glScaled(1,1,-1);
drawCloudFormation();
glPopMatrix();

glPushMatrix();
glTranslated(0,0,distance2-600);
glScaled(-1,1,1);
glScaled(1,1,-1);
drawCloudFormation();
glPopMatrix();

glutSwapBuffers();
}

void idle()
{
theta += 0.2;
if (theta == 360) theta = 360;

distance1 += 1;
if (distance1 > 200) distance1 = -600;

distance2 += 1;
if (distance2 > 600) distance2 = -600;

glutPostRedisplay();
}

void main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize(width, height);
glutInitWindowPosition(100, 200);
glutCreateWindow("Space Ship");
glClearColor(0, 0, 1, 1);


glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(120, 1, 0.1, 600);
//glOrtho(-2, 2, -2, 2, 0.1, 200);

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
//gluLookAt(0, 0, -200, 0, 0, -600, 0, 1, 0);

glutDisplayFunc(display);
glutIdleFunc(idle);

glutMainLoop();
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-23 01:06:21

调查一下particle systems

实际上,您希望在场景的远侧有一个矩形发射器,以固定的速度向摄影机喷射云(粒子)。当云层在摄影机后面移动时,将它们标记为非活动状态,粒子系统将在发射器处产生新的云层。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12077787

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档