OpenGL的纯软件实现探究

本文介绍了作者尝试在PC上实现OpenGL纯软件版本的过程,已经完成了包括初始化、矩阵操作、渲染等近30个核心函数。文章附带了两个测试程序,分别展示了基本的几何体绘制和3D模型动画。尽管目前功能有限,但作者希望能与更多对OpenGL感兴趣的人交流切磋。
摘要由CSDN通过智能技术生成

学习OpenGL半年了,虽然大部分函数还从来没接触过,但对其编程框架有了一定的认识。于是开始考虑OpenGL纯软件实现的可能性,当然实验的平台还是在PC,只是在帧缓冲区渲染完毕后通过ddraw页面发送到显卡。

现在已经完成了最常用的近30个函数,如下所示。命名形式,参数格式都尽量沿用OpenGL标准,但因为很多功能尚不完全,所以也精简了不少的参数,而且前缀也改为TGL(Tiny Graphic Lib),可以无视。

void tglInit(HINSTANCE);

void tglExit(void);

void tglIdleFunc(void(*idle)(void));

void tglKeyFunc(void(*key)(int));

void tglMainLoop(void);

void tglLoadIdentity(void);

void tglPopMatrix(void);

void tglPushMatrix(void);

void tglMultMatrix(float*);

void tglPerspective(float,float);

void tglLookAt(float*,float*);

void tglTranslate(float,float,float);

void tglRotate(float,float,float,float);

void tglGetFloatv(float*);

void tglClearColor(float,float,float);

void tglClear(BYTE);

void tglEnable(BYTE);

void tglDisable(BYTE);

void tglBegin(BYTE);

void tglVertex(float,float,float);

void tglColor(float,float,float);

void tglEnd(void);

void tglSwapBuffers(void);

void tglBuild2DMipmaps(WORD,WORD,WORD*);

void tglTexCoord(float,float);

void tglGenTextures(BYTE*);

void tglBindTexture(BYTE);

void tglDeleteTextures(BYTE);

测试程序1:高洛德着色

#include "tgl.h" 

short y=0;

short speed = 1;

void keyEvent(int key)

{

 if(key==VK_ESCAPE)

  tglExit();

 if(key==VK_UP)

  speed++;

 if(key==VK_DOWN)

  speed--;

}

void render(void)

 float eye[3] = {0,0,-8};

 float at[3] = {0,0,0};

 tglClear(TGL_COLOR_BUFFER_BIT|TGL_DEPTH_BUFFER_BIT);

 tglLoadIdentity();

 tglLookAt(eye,at);

 tglRotate((float)y,0,1,0);

 tglBegin(TGL_TRIANGLES);

 tglColor(1,0,0);

 tglVertex(0,2,0);

 tglColor(0,1,0);

 tglVertex( -1.732f ,-1,0);

 tglColor(0,0,1);

 tglVertex( 1.732f ,-1,0);

 tglEnd();

 tglSwapBuffers();

 y=(y+speed)%360;

}

void main(HINSTANCE hInstance)

{

 tglInit(hInstance);       

 tglPerspective( 0.1f , 300.0f );   

 tglEnable(TGL_DEPTH_TEST);

 tglClearColor(1,1,1);

 

 tglIdleFunc(render);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值