回 帖 发 新 帖 刷新版面

主题:[讨论]【求助】【求高手!!!】用OpenGL绘制的3D图和3D动画显示有问题

我系统是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个回复)

沙发


出现问题的代码是这个:(从几年前的一个老帖里粘的)


[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]

板凳

1、无法看到图形。这个在之前的帖子讨论过,可能是因为给出的数值太大造成的。把数字改小一些试试,例如200000000修改为2000,缩小100000倍。
2、运动速度过快。这个应该也在之前的帖子里面有,OpenGL教程,讲动画的那一章。你可以试试打开显卡的垂直同步,这样速度就降下来了。

3 楼


核显已经开垂直同步了啊,还是很快。。。但能正常看到动画。。。
用独显速度正常,但看不到动画

我来回复

您尚未登录,请登录后再回复。点此登录或注册