游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1322|回复: 0

谁能帮我看看有什么错误,怎么不能实现功能

[复制链接]

8

主题

18

帖子

18

积分

新手上路

Rank: 1

积分
18
发表于 2005-6-2 17:23:00 | 显示全部楼层 |阅读模式
#include <windows.h>
#include <stdio.h>
#include <math.h>                       
#include"string.h"
#include <GL/gl.h>
#include <GL/glaux.h>

#pragma comment( lib, "opengl32.lib")           // OpenGL32连接库
#pragma comment( lib, "glu32.lib")                   // GLu32连接库
#pragma comment( lib, "glaux.lib")                   // GLaux连接库



HDC                        hDC=NULL;                // Private GDI Device Context
HGLRC                hRC=NULL;                // Permanent Rendering Context
HWND                hWnd=NULL;                // Holds Our Window Handle
HINSTANCE        hInstance;                // Holds The Instance Of The Application

void CALLBACK myReshape(GLsizei w, GLsizei h);
void CALLBACK display(void);
GLuint        base;                                // Base Display List For The Font Set
GLfloat        rot;                                // Used To Rotate The Text
GLuint        texture[1];                        // 定义创建一个存放纹理的内存区域
char string[5][15]={{"Apple.bmp"},{"Grass.bmp"},{"Nehe.bmp"},{"2.bmp"},{"3.bmp"}};
GLvoid BuildFont(GLvoid)                                                                // Build Our Bitmap Font
{
        GLYPHMETRICSFLOAT        gmf[256];                                                // Address Buffer For Font Storage
        HFONT        font;                                                                                // Windows Font ID

        base = glGenLists(256);                                                                // Storage For 256 Characters

        font = CreateFont(        -12,                                                        // Height Of Font
                                                0,                                                                // Width Of Font
                                                0,                                                                // Angle Of Escapement
                                                0,                                                                // Orientation Angle
                                                FW_BOLD,                                                // Font Weight
                                                FALSE,                                                        // Italic
                                                FALSE,                                                        // Underline
                                                FALSE,                                                        // Strikeout
                                                SYMBOL_CHARSET,                                        // Character Set Identifier
                                                OUT_TT_PRECIS,                                        // Output Precision
                                                CLIP_DEFAULT_PRECIS,                        // Clipping Precision
                                                ANTIALIASED_QUALITY,                        // Output Quality
                                                FF_DONTCARE|DEFAULT_PITCH,                // Family And Pitch
                                                "Comic Sans MS");                                        // Font Name

        SelectObject(hDC, font);                                                        // Selects The Font We Created

        wglUseFontOutlines(        hDC,                                                        // Select The Current DC
                                                0,                                                                // Starting Character
                                                255,                                                        // Number Of Display Lists To Build
                                                base,                                                        // Starting Display Lists
                                                0.1f,                                                        // Deviation From The True Outlines
                                                0.2f,                                                        // Font Thickness In The Z Direction
                                                WGL_FONT_POLYGONS,                                // Use Polygons, Not Lines
                                                gmf);                                                        // Address Of Buffer To Recieve Data
}

GLvoid KillFont(GLvoid)                                                                        // Delete The Font
{
  glDeleteLists(base, 256);                                                                // Delete All 256 Characters
}

GLvoid glPrint(char *text)                                                                // Custom GL &quotrint" Routine
{
  if (text == NULL)                                                                                // If There's No Text
    return;                                                                                                // Do Nothing

  glPushAttrib(GL_LIST_BIT);                                                        // Pushes The Display List Bits
    glListBase(base);                                                                        // Sets The Base Character to 32
    glCallLists(strlen(text), GL_UNSIGNED_BYTE, text);        // Draws The Display List Text
  glPopAttrib();                                                                                // Pops The Display List Bits
}



AUX_RGBImageRec *LoadBMP(char *Filename)                                // 导入位图
{
        FILE *File=NULL;                                                                       
        if (!Filename)                                                                                // 检查文件名是否存在
        {
                return NULL;                                                                        // 如果不存在返回空值
        }
        File=fopen(Filename,"r");                                                        // 以只读方式打开文件
        if (File)                                                                                        // 检查文件是否存在
        {
                fclose(File);                                                                        // 关闭文件操作
                return auxDIBImageLoad(Filename);                                // 导入位图文件,返回指针
        }
        return NULL;                                                                                // 导入失败返回空值
}

void LoadGLTextures()                                                                        // 导入位图转化为纹理
{
        static int count=0;
        count++;
        if(count%6==0)
                count=1;
        AUX_RGBImageRec *TextureImage[1];                                        // 创建一个存放纹理的内存区域
       
        memset(TextureImage,0,sizeof(void *)*1);                   // 指针指向空值

       
       
        if (TextureImage[0]=LoadBMP(string[count-1]))                // 导入位图,如果没有发现就退出
        {
                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_MIN_FILTER,GL_LINEAR_MIPMAP_NEAREST);
                glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
                glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
                glEnable(GL_TEXTURE_GEN_S);
                glEnable(GL_TEXTURE_GEN_T);
        }

        if (TextureImage[0])                                                                        //检查纹理是否存在
        {
                if (TextureImage[0]->data)                                                        // 如果纹理图象存在
                {
                        free(TextureImage[0]->data);                                        // 释放纹理图象内存
                }
        free(TextureImage[0]);                                                                // 释放图象结构体
        }
}
void InitGL()                                                                       
{
        LoadGLTextures();                                                                        // 调用导入位图转化为纹理函数
        BuildFont();                                                                                // Build The Font
        glShadeModel(GL_SMOOTH);                                                        // Enable Smooth Shading
        glClearColor(0.0f, 0.0f, 0.0f, 0.5f);                                // Black Background
        glClearDepth(1.0f);                                                                        // 创建深度缓存
        glEnable(GL_DEPTH_TEST);                                                        //启动 Depth Testing
        glDepthFunc(GL_LEQUAL);                                                                // The Type Of Depth Testing To Do
        glEnable(GL_LIGHT0);                                                                // Quick And Dirty Lighting (Assumes Light0 Is Set Up)
        glEnable(GL_LIGHTING);                                                                // Enable Lighting
        glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);        // Really Nice Perspective Calculations
        glEnable(GL_TEXTURE_2D);                                                        // Enable Texture Mapping
        glBindTexture(GL_TEXTURE_2D, texture[0]);                        // Select The Texture
}

void DrawGLScene(GLvoid)                                                               
{
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);        // 清除颜色缓存和深度缓存
        glLoadIdentity();                                                                        // 初始化视景
        glTranslatef(1.1f*float(cos(rot/16.0f)),0.8f*float(sin(rot/20.0f)),-3.0f);                                                //平移
        glRotatef(45,1.0f,0.0f,0.0f);                                                //立方体绕x轴转动45度角
        glRotatef(45,0.0f,1.0f,0.0f);                                                //立方体绕y轴转动45度角
        glPrint("S");                                                                                // Draw A Skull And Crossbones Symbol
}
void CALLBACK display(void)
{
        DrawGLScene();
        glFlush();
}
void CALLBACK myReshape(GLsizei w, GLsizei h)
{
        glViewport(0, 0, w, h);
        glMatrixMode(GL_PROJECTION);
        gluPerspective(60.0, 1.0*(GLfloat)w/(GLfloat)h, 1.0, 30.0);
        glMatrixMode(GL_MODELVIEW);
}

void CALLBACK key_up()
{

}

void CALLBACK key_down()
{
       
}
void CALLBACK key_left()
{

}
void CALLBACK key_right()
{

}
void CALLBACK left_down(AUX_EVENTREC *event)
{
        InitGL();
        DrawGLScene();
}

void main(void)
{
        auxInitDisplayMode(AUX_SINGLE|AUX_RGBA);
        auxInitPosition(0,0,500,500);
        auxInitWindow("show_box");
        InitGL();
        DrawGLScene();
    auxReshapeFunc(myReshape);
    auxKeyFunc(AUX_UP,key_up);
    auxKeyFunc(AUX_DOWN,key_down);
    auxKeyFunc(AUX_LEFT,key_left);
    auxKeyFunc(AUX_RIGHT,key_right);
        auxMouseFunc(AUX_LEFTBUTTON,AUX_MOUSEDOWN,left_down);
    auxMainLoop(display);
}
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-25 21:24

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表