大家好,2d引擎基于opengl(es) 3d技术,是因为这样比之前的ddraw有很多好处!

1.坐标采用浮点数,可以进行曲线移动

2.如果在ddraw的对图片进行缩放和旋转的时候,是基于点像素的操作,非常的耗费性能,而采用3d的话,做这些事情是轻而易举的工作!

3.是基于渲染一个panel,然后把贴图贴在panel,然后对panel,进行旋转平移缩放的操作!

4.2d动画是基于uv进行操作的,可以将所有的动画放在一个大的贴图中,然后不断切换uv实现的动画切换!

今天的工作环境配置:

os: win7 64bit

tool: vs2012

主要有两个内容:1.渲染方块 2.渲染贴图

由于我们是2d游戏,我们采用glOrtho 2d视图,进行视图设置,具有以下步骤:

        详解:

                  glViewport()进行窗口视图设定 比如800,600

                  glMatrixMode(GL_PROJECTION);设置模型视图

                  glOrtho设置2d视图,-400,400,说明宽是800,-300,300,高是600,-100是近裁面,100是远裁面

                  由于是采用2d视图,我想游戏窗口的每一个像素,占用一个单位,这样对坐标的好,很好计算!

                 glBegin开始绘制一个几何面片,这在opengles中不被支持的方法!

                 glVertex2f是绘制点,调用glVertex2f四次,就绘制了一个panel出来

glClear(GL_COLOR_BUFFER_BIT);

glViewport(0,0,800,600);

glMatrixMode( GL_PROJECTION );

glLoadIdentity();

glOrtho(-400,400,-300,300,-100,100);

glBegin(GL_POLYGON);

GLfloat w=100;

GLfloat h=100;

glVertex2f(-w, -h);

glVertex2f(-w, h);

glVertex2f(w, h);

glVertex2f(w, -h);

glEnd();

glFlush();

下面开始贴图

贴图使用的是开源库 FreeImage3.17.0库,下载地址为:http://sourceforge.net/projects/freeimage/files/Source%20Distribution/

                在FreeImage3.17.0中自带了一个对于OpenGL使用的类,叫做TextureManaged.h TextureManaged.cpp

               FreeImage有32位和64位的版本,这里的版本对应,不是说的你的电脑系统是32bit,还是64bit的!

               是说你的编辑器是32位的还是64位的!

               同样的设置到包含目录中,以及链接库中,还有附加依赖项中!

               渲染图片代码如下:

#include "TextureManager.h"  //注意这一句要在<glut.h>之上,否则会出错
               #include <glut.h>
               GLuint textures[1];
               //显示回调函数
               void renderScreen(void){
                  //把整个窗口清理为当前清理颜色:南瓜橙
                  glClear(GL_COLOR_BUFFER_BIT);
                  glViewport(0,0,800,600);
                  glMatrixMode( GL_PROJECTION ); 
                  glLoadIdentity();
                  glOrtho(-400,400,-300,300,-100,100);
                 TextureManager::Inst()->BindTexture(textures[0]);//在这儿进行绑定贴图
                  glBegin(GL_POLYGON);
                  GLfloat w=100;
                  GLfloat h=100;
                 glTexCoord2d(0,0);glVertex2f(-w, -h); 
                 glTexCoord2d(0,1);glVertex2f(-w, h); 
                glTexCoord2d(1,1);glVertex2f(w, h); 
                glTexCoord2d(1,0);glVertex2f(w, -h);
                glEnd();
                glFlush();
                glutSwapBuffers();
             }

void Init()
            {
                       TextureManager::Inst()->LoadTexture("./1.jpg",textures[0]);//载入贴图
                      glEnable(GL_TEXTURE_2D);//启用2d纹理
                      glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);    // 线性滤波
                      glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);    // 线性滤波

}

int main(int argc, char* argv[])
          {

//初始化glut
                    glutInit(&argc,argv);
                   //单缓冲区
                    glutInitDisplayMode(GLUT_SINGLE|GLUT_RGBA);
                   //创建窗口,窗口名字为WindowDemo
                   glutCreateWindow("QLGameEngine");
                   //设置窗口大小
                   glutReshapeWindow(800,600);
                   Init();
                   //设置显示回调函数 
                  glutDisplayFunc(renderScreen);
                  glutMainLoop();
                  return 0;
       }

                详解:

               1.TextureManager::Inst()->LoadTexture("./1.jpg",textures[0]);//载入贴图

               2.启用纹理以及使用纹理属性

glEnable(GL_TEXTURE_2D);//启用2d纹理
                      glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);    // 线性滤波
                      glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);    // 线性滤波

3.   绑定贴图

TextureManager::Inst()->BindTexture(textures[0]);//在这儿进行绑定贴图

4.  设置顶点以及uv进行渲染贴图

glBegin(GL_POLYGON);
                   GLfloat w=100;
                   GLfloat h=100;
                   glTexCoord2d(0,0);glVertex2f(-w, -h); 
                   glTexCoord2d(0,1);glVertex2f(-w, h); 
                   glTexCoord2d(1,1);glVertex2f(w, h); 
                   glTexCoord2d(1,0);glVertex2f(w, -h);
                   glEnd();

运行结果:

                    一只可爱的小乌龟,显示出来了,呵呵!

                   我遇到两个问题需要解决:

                   1.就是乌龟的颜色发生变色了,原图是这样的

                   

                   2.我在Debug目录下,直接启动生成的exe,可以看到小乌龟图片,但是在VS中直接运行就看不到图片,我设置了工作目录为

                      Debug的,

                      有知道如何解决这两个问题的,请与我留言,真诚想交往朋友!

QLGame 2d Engine 搭建2d游戏原理的更多相关文章

  1. QLGame 2D Engine编写环境搭建

    QLGame 2D Engine编写 (win7环境搭建) 广州麒麟网络工作室,计划制作一款2d game engine,基于opengl(es)平台,暂时支持android,以后考虑支持linux, ...

  2. QLGame 2d Engine Android端环境搭建(通过jni读取assets目录的文件)

    QLGame 2d Engine win端已经实现了一个动物的动画了,初步的东西已经完成,考虑在Android端也实现这些基本的东西,这样跨平台的引擎也就实现了! 要在Android下编程,首先要实现 ...

  3. QLGame 2d Engine源码地址

    QLGame 2d Engine源码地址已经提交到github上,地址为:https://github.com/wsgzxl/QLGame2dEngine

  4. 简易2D横版RPG游戏制作

    Unity学习笔记1 简易2D横版RPG游戏制作 http://m.blog.csdn.net/article/details?id=24601905

  5. 2d命令行小游戏源码

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  6. Unity3D实现3D立体游戏原理及过程

    Unity3D实现3D立体游戏原理及过程 183 0 0     下面的教程是我今天整理的资料,教大家一步步完成自己的3D立体游戏,并向大家介绍一些3D成像的原理.     理论上,每个普通的非立体3 ...

  7. css3 2D转换(2D Transform) 动画(Animation)

    transform 版本:CSS3 内核类型 写法 Webkit(Chrome/Safari) -webkit-transform Gecko(Firefox) -moz-transform Pres ...

  8. 第九章 nginx基础之搭建小游戏

    一.nginx部署 1.epel源安装 [root@web01 ~]# yum install -y nginx 2.官方源安装 1.配置官方源[root@web02 ~]# vim /etc/yum ...

  9. QLGame 2d Engine SpriteBatch类创建

    GitHub地址:https://github.com/wsgzxl/QLGame2dEngine 今天说五个问题: 1.前面说到的 颜色不对的问题,是因为FreeImage读取出来的数据格式与Ope ...

随机推荐

  1. [置顶] linux第二天,g++,gcc,ps,cat,sort,grep,kill,less,ls -l ,

    33.less sample.txt 分页输出文件内容到屏幕 34./search content (搜索内容) 可以将文档中有searchcontent 的行输出到屏幕 35.grep scienc ...

  2. ALTER---为已创建的表添加默认值

    alter table table_name modify column_name default default_value; 例: alter table userinfo modify emai ...

  3. Cannot load JDBC driver class 'oracle.jdbc.driver.OracleDriver'

    出现这个问题,说明oracle的驱动包没有成功加载. 1.检查maven pom.xml有没有引入驱动:        <dependency>             <group ...

  4. HDU-1002(简单大数加法)

    A + B Problem II Problem Description I have a very simple problem for you. Given two integers A and ...

  5. LoadRunner安装包(性能测试工具分享)

    今天在测试课指导老师朱香元的指导下,开始了测试软件的安装,下面我分享一下整个安装流程,最后我会附带安装包的 第一步:链接:http://pan.baidu.com/s/1pXqk2 密码:csjk , ...

  6. RabbitMQ 原文译06--Remote procedure call(RPC)

    在第三篇文章中, 我们学习了怎么使用队列在多了消息消费者当中进行耗时任务轮询. 但是如果我们想要在远程电脑上运行一个方法,然后等待其执行结果,这就是一个不同的场景,这种就是我们一般讲的RPC(远程过程 ...

  7. 自动构建工具Ant的使用-笔记

    第一:什么是Ant? Apache Ant是一个基于Java的生成工具.据最初的创始人James Duncan Davidson的介绍,这个工具的名称是another neat tool(另一个整洁的 ...

  8. Oracle中用一张表的字段更新另一张表的字段

    今天在做项目的过程中,发现开发库中某张表的某字段有许多值是空的,而测试库中该字段的值则是有的. 那么,有什么办法能将测试库中该字段的值更新到开发库中呢? SQL Server中这是比较容易解决的,而O ...

  9. XMPP适配IPV6 (GCDAsyncSocket适配IPV6)

    苹果公司要求在6月1号之后上架Appstore的应用必须通过ipv6兼容测试. 最近到了八月份,开始发现新上架的app没有通过,查看了下原因,说没有适配IPV6. 首先在本地搭建一个IPV6的测试环境 ...

  10. Ubuntu_14.04安装docker

    Ubuntu_14.04安装docker $ sudo apt-get update $ sudo apt-get install apt-transport-https ca-certificate ...