游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2187|回复: 6

HELP

[复制链接]

6

主题

11

帖子

11

积分

新手上路

Rank: 1

积分
11
发表于 2004-12-15 11:32:00 | 显示全部楼层 |阅读模式
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------

#pragma resource "*.dfm"

TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
;
}
//---------------------------------------------------------------------------

void TForm1:rawOpengl()
{
HDC hDC;
glEnable(GL_TEXTURE_2D);
aspect =(GLfloat)1024/(GLfloat)768;
glClearColor(0.0f,0.0f,0.0f,0.5f);
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glDepthFunc(GL_LEQUAL);
glEnable(GL_DEPTH_TEST);
glHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_NICEST);
glLoadIdentity();
gluPerspective(45.0f,aspect,0.1f,100.0f);
glMatrixMode(GL_MODELVIEW);
glTranslatef(0.0f,0.0f,-5.0f);
glRotatef(xrot,1.0f,0.0f,0.0f);
glRotatef(yrot,0.0f,1.0f,0.0f);
glRotatef(zrot,0.0f,0.0f,1.0f);
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;
yrot+=0.2f;
zrot+=0.4f;
glPopMatrix();
glFlush();
hDC=wglGetCurrentDC();
SwapBuffers(hDC);
glEnd();
}
void __fastcall TForm1::FormCreate(TObject *Sender)
{
PIXELFORMATDESCRIPTOR pfd={
  sizeof(PIXELFORMATDESCRIPTOR),
  1,
  PFD_DRAW_TO_WINDOW|
  PFD_SUPPORT_OPENGL|
  PFD_DOUBLEBUFFER,
  PFD_TYPE_RGBA,
  24,
  0,0,0,0,0,0,
  0,0,0,0,0,0,0,
  32,
  0,0,
  PFD_MAIN_PLANE,
  0,
  0,0,0
  };
  HDC hDC=GetDC(Form1->Handle);
  LoadGLTextures();
  int iPixelFormat;
  iPixelFormat=ChoosePixelFormat(hDC,&pfd);
  SetPixelFormat(hDC,iPixelFormat,&pfd);
  DescribePixelFormat(hDC,iPixelFormat,sizeof(PIXELFORMATDESCRIPTOR),&pfd);
  m_hRC=wglCreateContext(hDC);
  glShadeModel(GL_SMOOTH);
  glEnable(GL_DEPTH_TEST);


}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
HDC hDC=GetDC(this->Handle);
wglMakeCurrent( NULL, NULL );
wglDeleteContext( m_hRC );
ReleaseDC(this->Handle,hDC);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormPaint(TObject *Sender)
{
  HDC hDC=GetDC(this->Handle);
  wglMakeCurrent(hDC,m_hRC);

  DrawOpengl();
  wglMakeCurrent(hDC,NULL);
  ReleaseDC(this->Handle,hDC);

}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
   if(Key==VK_ESCAPE)
   Close();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
FormPaint(NULL);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormResize(TObject *Sender)
{
HDC hDC=GetDC(this->Handle);
wglMakeCurrent(hDC,m_hRC);
this->ClientHeight=(this->ClientHeight==0)? 1:this->ClientHeight;
glViewport(0,0,this->ClientWidth,this->ClientHeight);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-2.0,2.0,-2.0,2.0,-2.0,2.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
ReleaseDC(this->Handle,hDC);
}
//---------------------------------------------------------------------------

void __fastcall TForm1::CreateParams(TCreateParams& Params)
{
    TForm::CreateParams(Params);                //调用原有函数预处理
    Params.Style=WS_VISIBLE|WS_POPUP|WS_CLIPCHILDREN|WS_CLIPSIBLINGS;//加上必要的属性
    ChangeResolution(1024,768,32);
    Params.Width=1024;
    Params.Height=768;
    Params.X=Params.Y=0;

}
bool TForm1::ChangeResolution(int w, int h,int bitdepth)
{
DEVMODE devMode;
int   modeSwitch;
int   closeMode = 0;
EnumDisplaySettings(NULL, closeMode, &devMode);
devMode.dmBitsPerPel = bitdepth;
devMode.dmPelsWidth  = w;
devMode.dmPelsHeight = h;
devMode.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;
  modeSwitch = ChangeDisplaySettings(&devMode, CDS_FULLSCREEN);
if(modeSwitch == DISP_CHANGE_SUCCESSFUL)
{
return true;
}
else
{
ChangeDisplaySettings(NULL, 0);
return false;
}
}

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  TForm1:oadGLTextures()                                                                        //调用Bitmap并转换成纹理
{
        int Status=FALSE;                                                                        //状态确定

        AUX_RGBImageRec *TextureImage[1];                                        //为纹理创建存储空间

        memset(TextureImage,0,sizeof(void *)*1);                   //将指针设为NULL

        //读取位图,检查错误。如果位图不存在则退出
        if (TextureImage[0]=LoadBMP("J:/我的资料/程序设计作品/opengl5/Data/TX.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的值
}


我用CB6写了OPENGL贴纹理的程序,为什么总是出现
[Linker Error] Unresolved external 'TForm1::LoadBMP(char *)' referenced from J:\程序设计作品\OPENGL5\UNIT1.OBJ
这是什么问题呢,哪位老大能告诉我一下吗?谢谢!!

190

主题

1801

帖子

2096

积分

金牌会员

Rank: 6Rank: 6

积分
2096
QQ
发表于 2004-12-15 13:12:00 | 显示全部楼层

Re:HELP

link->glaux.lib

6

主题

11

帖子

11

积分

新手上路

Rank: 1

积分
11
 楼主| 发表于 2004-12-15 13:21:00 | 显示全部楼层

Re:HELP

老大能否说的详细一点呢

190

主题

1801

帖子

2096

积分

金牌会员

Rank: 6Rank: 6

积分
2096
QQ
发表于 2004-12-15 13:50:00 | 显示全部楼层

Re:HELP

上面看错了
AUX_RGBImageRec TForm1::*LoadBMP(char *Filename) // 读取位图图象
还是???
AUX_RGBImageRec TForm1:oadBMP(char *Filename) // 读取位图图象

我不是老大,我还小^_^!

6

主题

11

帖子

11

积分

新手上路

Rank: 1

积分
11
 楼主| 发表于 2004-12-15 16:38:00 | 显示全部楼层

Re:HELP

好象还是不行啊

6

主题

11

帖子

11

积分

新手上路

Rank: 1

积分
11
 楼主| 发表于 2004-12-15 16:40:00 | 显示全部楼层

Re: HELP

这是原代码

sf_20041215164030.rar

47.78 KB, 下载次数:

190

主题

1801

帖子

2096

积分

金牌会员

Rank: 6Rank: 6

积分
2096
QQ
发表于 2004-12-15 22:02:00 | 显示全部楼层

Re:HELP

sorry啊,没有这个VCL

如果是
[Linker Error] Unresolved external 'LoadBMP(char *)' referenced from J:\程序设计作品
在你的编译器选项里连接glaux.lib试试
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-23 17:51

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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