| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1540 人关注过本帖
标题:问题收回,留下效果,有兴趣的看看。
只看楼主 加入收藏
观弈寒儒
Rank: 7Rank: 7Rank: 7
来 自:自 来
等 级:黑侠
帖 子:359
专家分:545
注 册:2011-1-9
结帖率:100%
收藏
已结贴  问题点数:100 回复次数:44 
问题收回,留下效果,有兴趣的看看。
3D小程序.rar (103.53 KB)


[ 本帖最后由 观弈寒儒 于 2011-4-9 22:31 编辑 ]
搜索更多相关主题的帖子: 效果 
2011-04-09 09:51
观弈寒儒
Rank: 7Rank: 7Rank: 7
来 自:自 来
等 级:黑侠
帖 子:359
专家分:545
注 册:2011-1-9
收藏
得分:0 
哎。。。。都没什么人气。。。

事件记录,值得关注! http://bbs.bccn.net/z_court.php?fid=5
2011-04-09 12:18
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
收藏
得分:5 
OpenGL我只有一点儿懂。不过看你那代码,好象那个有好多函数的返回值有问题!
#include <GL/glut.h>
#include <stdio.h> // 标准输入/输出库的头文件
#include <stdlib.h>
#include <GL/glaux.h> // GLaux库的头文件
GLfloat xrot; // X 旋转量
GLfloat yrot; // Y 旋转量
GLfloat zrot; // Z 旋转量
GLuint texture[1]; // 存储一个纹理

AUX_RGBImageRec *LoadBMP(char *Filename) // 载入位图图象
{
    FILE *File=NULL; // 文件句柄
    if (!Filename) // 确保文件名已提供
    {
        return NULL; // 如果没提供,返回 NULL
    }
    File=fopen(Filename,"r"); // 尝试打开文件
    if (File) // 文件存在么?
    {
        fclose(File); // 关闭句柄
        return auxDIBImageLoad(Filename); // 载入位图并返回指针
    }
    return NULL; // 如果载入失败,返回 NULL
}
int LoadGLTextures() // 载入位图(调用上面的代码)并转换成纹理
{
    int Status=FALSE; // 状态指示器
    AUX_RGBImageRec *TextureImage[1]; // 创建纹理的存储空间
    memset(TextureImage,0,sizeof(void *)*1); // 将指针设为 NULL
    // 载入位图,检查有无错误,如果位图没找到则退出
    if (TextureImage[0]=LoadBMP("NeHe.bmp"))
    {
        Status=TRUE; // 将 Status 设为 TRUE
        glGenTextures(1, &texture[0]); // 创建纹理
        // 使用来自位图数据生成 的典型纹理
        glBindTexture(GL_TEXTURE_2D, texture[0]);
        // 生成纹理
        glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[0]->sizeX, TextureImage[0]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[0]->data);
        glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); // 线形滤波
        glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); // 线形滤波
    }
    if (TextureImage[0]) // 纹理是否存在
    {
        if (TextureImage[0]->data) // 纹理图像是否存在
        {
            free(TextureImage[0]->data); // 释放纹理图像占用的内存
        }
        free(TextureImage[0]); // 释放图像结构
    }
    return Status; // 返回 Status
}
int InitGL(GLvoid) // 此处开始对OpenGL进行所有设置
{
    if (!LoadGLTextures()) // 调用纹理载入子例程
    {
        return FALSE; // 如果未能载入,返回FALSE
    }
    glEnable(GL_TEXTURE_2D); // 启用纹理映射
    glShadeModel(GL_SMOOTH); // 启用阴影平滑
    glClearColor(0.0f, 0.0f, 0.0f, 0.5f); // 黑色背景
    glClearDepth(1.0f); // 设置深度缓存
    glEnable(GL_DEPTH_TEST); // 启用深度测试
    glDepthFunc(GL_LEQUAL); // 所作深度测试的类型
    glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); // 真正精细的透视修正
    return TRUE; // 初始化 OK
}
int DrawGLScene(GLvoid) // 从这里开始进行所有的绘制
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // 清除屏幕和深度缓存
    glLoadIdentity(); // 重置当前的模型观察矩阵
    glTranslatef(0.0f,0.0f,-5.0f); // 移入屏幕 5 个单位
    glRotatef(xrot,1.0f,0.0f,0.0f); // 绕X轴旋转
    glRotatef(yrot,0.0f,1.0f,0.0f); // 绕Y轴旋转
    glRotatef(zrot,0.0f,0.0f,1.0f); // 绕Z轴旋转
    glBindTexture(GL_TEXTURE_2D, texture[0]); // 选择纹理
    glBegin(GL_QUADS);
    // 前面
    glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f); // 纹理和四边形的左下
    glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f); // 纹理和四边形的右下
    glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 1.0f); // 纹理和四边形的右上
    glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f); // 纹理和四边形的左上
    // 后面
    glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f); // 纹理和四边形的右下
    glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f); // 纹理和四边形的右上
    glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f); // 纹理和四边形的左上
    glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f); // 纹理和四边形的左下
    // 顶面
    glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f); // 纹理和四边形的左上
    glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, 1.0f, 1.0f); // 纹理和四边形的左下
    glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, 1.0f, 1.0f); // 纹理和四边形的右下
    glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f); // 纹理和四边形的右上
    // 底面
    glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, -1.0f, -1.0f); // 纹理和四边形的右上
    glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, -1.0f, -1.0f); // 纹理和四边形的左上
    glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f); // 纹理和四边形的左下
    glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f); // 纹理和四边形的右下
    // 右面
    glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f); // 纹理和四边形的右下
    glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, -1.0f); // 纹理和四边形的右上
    glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 1.0f); // 纹理和四边形的左上
    glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f); // 纹理和四边形的左下
    // 左面
    glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f); // 纹理和四边形的左下
    glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f); // 纹理和四边形的右下
    glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f); // 纹理和四边形的右上
    glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f); // 纹理和四边形的左上
    glEnd();
    xrot+=0.3f; // X 轴旋转
    yrot+=0.2f; // Y 轴旋转
    zrot+=0.4f; // Z 轴旋转
    glFlush();
    return true; // 继续运行
}

void Draw()
{
     DrawGLScene();
}
int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
    glutInitWindowPosition(100, 100);
    glutInitWindowSize(400, 400);
    glutCreateWindow("OpenGL小程序");
    InitGL();
    glutDisplayFunc(&Draw);
    glutMainLoop();
    return 0;
}

   唯实惟新 至诚致志
2011-04-09 12:22
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
收藏
得分:0 
也许是因为像你那么懂图形编程的比较少吧,况且你那程序实在是太深奥了!

   唯实惟新 至诚致志
2011-04-09 12:27
flyue
Rank: 10Rank: 10Rank: 10
来 自:江南西道
等 级:贵宾
威 望:19
帖 子:3465
专家分:1563
注 册:2006-6-20
收藏
得分:0 
楼主应该把错误发来,照顾下手机用户

天之道,损有余而补不足.人之道则不然,损不足以奉有余.孰能有余以奉天下,唯有道者.
2011-04-09 13:08
flyue
Rank: 10Rank: 10Rank: 10
来 自:江南西道
等 级:贵宾
威 望:19
帖 子:3465
专家分:1563
注 册:2006-6-20
收藏
得分:0 
你没有引入opengl.lib glu.lib glaux.lib

天之道,损有余而补不足.人之道则不然,损不足以奉有余.孰能有余以奉天下,唯有道者.
2011-04-09 13:09
flyue
Rank: 10Rank: 10Rank: 10
来 自:江南西道
等 级:贵宾
威 望:19
帖 子:3465
专家分:1563
注 册:2006-6-20
收藏
得分:0 
用了glut后,就不该用aux了

个人不推荐使用aux

天之道,损有余而补不足.人之道则不然,损不足以奉有余.孰能有余以奉天下,唯有道者.
2011-04-09 13:10
观弈寒儒
Rank: 7Rank: 7Rank: 7
来 自:自 来
等 级:黑侠
帖 子:359
专家分:545
注 册:2011-1-9
收藏
得分:0 
以下是引用flyue在2011-4-9 13:09:30的发言:

你没有引入opengl.lib glu.lib glaux.lib

刚回来,新手啊,不懂。。。

事件记录,值得关注! http://bbs.bccn.net/z_court.php?fid=5
2011-04-09 13:12
flyue
Rank: 10Rank: 10Rank: 10
来 自:江南西道
等 级:贵宾
威 望:19
帖 子:3465
专家分:1563
注 册:2006-6-20
收藏
得分:0 
aux的读BMP的函数有很大的BUG
建议你自己写BMP读取,最好是用开源图像文件库

天之道,损有余而补不足.人之道则不然,损不足以奉有余.孰能有余以奉天下,唯有道者.
2011-04-09 13:12
观弈寒儒
Rank: 7Rank: 7Rank: 7
来 自:自 来
等 级:黑侠
帖 子:359
专家分:545
注 册:2011-1-9
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册
以下是引用flyue在2011-4-9 13:08:20的发言:

楼主应该把错误发来,照顾下手机用户

请问截图可以看到吗?

事件记录,值得关注! http://bbs.bccn.net/z_court.php?fid=5
2011-04-09 13:14
快速回复:问题收回,留下效果,有兴趣的看看。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020717 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved