Articles of 过剩

将代码从windows glut迁移到Linux

当我使用VS6时,我有一些使用glut.h库的旧代码。 好吧,这已经很多年了,现在我很高兴地使用Linux,但即使我努力工作,我从来没有设法设置代码块environemnt来运行我的GLUT列表。 所以我已经建立了一个openGL项目(我失败了几次成功创建一个GLUT项目 – 找不到过剩的位置)。 所有看起来不错,我设法导入我的一些代码。 现在我得到的错误: glutFullScreen undefined reference 我知道我需要通过我的项目构建选项链接一些图书馆,但不知道如何。 任何想法非常欢迎。 我坚持使用代码块,因为我使用的是IDE,真的想使它工作。

OpenGL移动和旋转的对象

我有一个多部分的3D对象,我需要移动使用键盘(向前,向后,转动)。 虽然我理解旋转的概念(翻译原点,应用旋转,翻译回来),但我无法围绕为什么我的代码无法正常工作。 下面是我的一些代码。 我通过几个转换创建对象就好了。 当移动整个物体时,零件变得分散和旋转奇怪。 此时,键盘简单地增加或减less前进/后退的arm,而旋转计算为rotation = (rotation +- 2) % 360; glPushMatrix(); glTranslatef(armx, 0.0, 0.0); glRotatef((GLfloat)rotation, 0.0, 1.0, 0.0); glTranslatef(-armx, 0.0, 0.0); // arm1 glPushMatrix(); glTranslatef(armx, 0.5, 0.75); glScalef(0.7, 0.25, 0.2); glutSolidTorus(2, 2, 5, 30); glPopMatrix(); // arm2 glPushMatrix(); glTranslatef(armx, 0.5, -0.75); glScalef(0.7, 0.25, 0.2); glutSolidTorus(2, 2, 5, 30); glPopMatrix(); // base rotation glTranslatef(-basex, […]

TimeFunc不更新

我想保持一个对象向前移动,而用户不必做任何事情。 我明白,这是glutTimerFunc的工作,我相信我正在实施它,如下所示。 出于某种原因,如果我离开屏幕没有任何更新; 但如果我移动鼠标(或创建任何types的“事件”),场景会更新。 如果等待几秒钟,然后再触发一次更新,对象就会在几秒内移动它应该有的数量(例如,如果每秒移动一个单位,等待3秒后再重新触发对象跳转3个单位)。 因此计时器正在工作,但我只是不知道为什么屏幕不会不断重新显示。 void myTimer(int v) { if (forward == 1) { //increment movement variable } if (backward == 1) { //increment movement variable } glutPostRedisplay; glutTimerFunc(100 / n, myTimer, v); } 下面是我的向上和向下(向前和向后)键的片段: if (key == GLUT_KEY_UP) { forward = 1; backward = 0; } if (key == GLUT_KEY_DOWN) { forward = […]

围绕中心旋转3D对象

我有物体在x轴上从A移动到B,除此之外没有任何物体的翻译。 现在,在移动时,我想围绕y轴旋转它,运动也应该相应地改变,我的意思是如果从-x移动到+ x轴时将它向右旋转,它应该向近平面移动。 我有gltranslatef中的variables,在循环中修改后,我有gsccalef来缩放整个对象,这是由层次结构。 现在我尝试下面的代码来实现预期的结果,但它不能正常工作 glTranslatef(move, 0, 0); // If I comment these 3 lines, it does not affect the output glTranslatef(-move, 0, 0); glRotatef(rotate,0,1,0); glTranslatef(move, 0, 0); glScalef(0.2, 0.2, 1.0);

glutMouseFunc()返回的坐标无效

我使用GLUT的glutMouseFunc()函数来检索鼠标点击的坐标。 我想将该坐标上的对象移动到另一个坐标上。 但是当我点击对象时glutMouseFunc()返回的坐标与原始坐标不同。 windowWidth=1250; windowHeight=1000; void onMouse(int button, int state, int x, int y); int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_SINGLE); glutInitWindowSize(1250, 1000); glutCreateWindow("OpenGL – First window demo"); // … glutMouseFunc(onMouse); // … glutMainLoop(); return 0; } void onMouse(int button, int state, int x, int y) { flag++; if (state != GLUT_DOWN && […]

在OpenGL中如何把“相机”放在一个立方体里面

我真的是新的OpenGL,似乎无法弄清楚如何把“相机”内创建的立方体,以便我可以移动一个类似FPS的风格。 我试图使用gluLookAt和gluPerspective,但我显然缺less一些步骤。 在gluLookAt之前我应该​​怎么做? 这是迄今为止编写的代码: int rotate_Y; //used to rotate the cube about the Y-axis int rotate_X; //used to rotate the cube about the X-axis //the display function draws the scene and redraws it void display(){ //clear the screen and the z-buffer glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); //resets the transformations glRotatef(rotate_X, 1.0, 0.0, 0.0); glRotatef(rotate_Y, 0.0, 1.0, […]

GLUT多窗口FPS急剧下降

当只有主窗口被创建时,fps能够达到1000以上。但是再创建1个窗口,导致fps下降到大约100左右。绘制callback画一个空白的黑屏,并在屏幕上写入fps。 Q1)fps急剧下降的原因是什么? Q2)任何可能的方法来改善这个fps? int main(void){ int mainwindow,otherwindow1; glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); glutInitWindowSize(640,480);// set the initial window size glutInitWindowPosition(0,300);//set the initial window position mainwindow = glutCreateWindow("main window"); glutDisplayFunc(Draw); glutReshapeFunc(ChangeWindowSize); otherwindow1 = glutCreateWindow("Other window"); glutDisplayFunc(Draw); glutReshapeFunc(ChangeWindowSize); setVsync(0); glutMainLoop(); } void Draw(){ glClearColor(0.0f, 0.0f, 0.0f, 1.0f); glClear(GL_COLOR_BUFFER_BIT); getFPS(); glutPostRedisplay(); glutSwapBuffers(); }

自上而下的赛车游戏C ++

我正在使用GLUT / OPENGL和SOIL在C ++中创建一个自顶向下的赛车游戏。首先,我只想了解如何完成该轨道的一些意见。 我正在考虑使用瓷砖地图,到目前为止我已经实现了一个,但是它为瓷砖地图中的每个值绘制了一个多边形,然后使用了指定的纹理。 这显然是一种非常有效的绘制背景的方式。 那么如何将合适的纹理连接成一个PNG / GL-TEXTURE,这样我就可以绘制一个大的多边形,并使用连接过程中创建的纹理。 当涉及到贴图的时候,碰撞检测的最好方法是什么?

在glut中访问struct

我必须使用openGL / glut编写一个uni项目的游戏。 我只是要使用一个通用的示例代码,因为我只是在寻找解决一个特定问题的方法: 使用过剩,我不得不调用一个函数'glutDisplayFunc(显示);' 在主要function。 我也使用IdleFunc(更新)。 问题是,如这里所述,“显示”function不能传递任何东西。 我有一些主要的结构,我希望在主要初始化,并可以通过显示和更新访问。 希望有些代码能更好地解释我的问题: #include <gl/glut.h> struct Player { GLfloat x; GLfloat y; GLfloat z; int score; … } //function prototypes (showing how I would normally pass the struct) void InitPlayer (Player &player); void DrawPlayer (Player &player); void UpdatePlayer (Player &player); void main (int argc, char **argv) { Player […]

加快glutidle()的更新

我有一个客户端通过使用UDP协议以1KHz(即0.001秒)的速度向Internet上的主站发送数据。 在Master中,我需要绘制一个对象,但问题是GLUT的更新比客户端的更新要慢。 我试图使用glutTimerFunc(0,glutIdle, 0); 但仍然缓慢。 有没有办法加快绘图的更新速度? 我需要每0.001秒更新Display() 。 有什么建议么? 我正在使用Windows 7。