主题:[讨论]【求助】【求高手!!!】用OpenGL绘制的3D图和3D动画显示有问题
lianggui102
[专家分:0] 发布于 2012-04-13 15:04:00
我系统是64位win7,显卡是GT 550M和 i5的核显 双显卡,用的Visual Studio 2008,安装OpenGL开发库时是按这个步骤进行的:
1 h文件拷贝到 VC\PlatformSDK\Include\gl
2 lib文件拷贝到 VC\lib
3 dll文件拷贝到 C:\Windows\SysWOW64 (不是\System32 ,不然会报找不到dll的错误)
用OpenGL绘制2D图编译运行很正常,可是绘制3D图或动画之后编译运行就会出问题:
如果开GT 550M就会看不到绘制出的图形,但显示的帧数正常;
如果开核显(已经开了垂直同步)倒是可以看到图形,可是显示出的帧数达到了1000左右,画面运动超快......
不知道什么问题......是显卡设置问题还是我OpenGL安装的不对???【求高手!!!】
回复列表 (共3个回复)
沙发
lianggui102 [专家分:0] 发布于 2012-04-13 15:13:00
出现问题的代码是这个:(从几年前的一个老帖里粘的)
[code=c]
#include <GL/glut.h>
#include <stdio.h>
#include <time.h>
// 太阳、地球和月亮
// 假设每个月都是12天
// 一年12个月,共是360天
static int day = 200; // day的变化:从0到359
double CalFrequency()
{
static int count;
static double save;
static clock_t last, current;
double timegap;
++count;
if( count <= 50 )
return save;
count = 0;
last = current;
current = clock();
timegap = (current-last)/(double)CLK_TCK;
save = 50.0/timegap;
return save;
}
void myDisplay(void)
{
double FPS = CalFrequency();
printf("FPS = %f\n", FPS);
glEnable(GL_DEPTH_TEST);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(75, 1, 1, 400000000);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0, -200000000, 200000000, 0, 0, 0, 0, 0, 1);
// 绘制红色的“太阳”
glColor3f(1.0f, 0.0f, 0.0f);
glutSolidSphere(69600000, 20, 20);
// 绘制蓝色的“地球”
glColor3f(0.0f, 0.0f, 1.0f);
glRotatef(day/360.0*360.0, 0.0f, 0.0f, -1.0f);
glTranslatef(150000000, 0.0f, 0.0f);
glutSolidSphere(15945000, 20, 20);
// 绘制黄色的“月亮”
glColor3f(1.0f, 1.0f, 0.0f);
glRotatef(day/30.0*360.0 - day/360.0*360.0, 0.0f, 0.0f, -1.0f);
glTranslatef(38000000, 0.0f, 0.0f);
glutSolidSphere(4345000, 20, 20);
glFlush();
glutSwapBuffers();
}
void myIdle(void)
{
++day;
if( day >= 360 )
day = 0;
myDisplay();
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
glutInitWindowPosition(100, 100);
glutInitWindowSize(400, 400);
glutCreateWindow("太阳,地球和月亮");
glutDisplayFunc(&myDisplay);
glutIdleFunc(&myIdle);
glutMainLoop();
return 0;
}
[/code]
板凳
eastcowboy [专家分:25370] 发布于 2012-04-13 20:18:00
1、无法看到图形。这个在之前的帖子讨论过,可能是因为给出的数值太大造成的。把数字改小一些试试,例如200000000修改为2000,缩小100000倍。
2、运动速度过快。这个应该也在之前的帖子里面有,OpenGL教程,讲动画的那一章。你可以试试打开显卡的垂直同步,这样速度就降下来了。
3 楼
lianggui102 [专家分:0] 发布于 2012-04-13 21:29:00
核显已经开垂直同步了啊,还是很快。。。但能正常看到动画。。。
用独显速度正常,但看不到动画
我来回复