QLGame 2d Engine 搭建2d游戏原理
大家好,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游戏原理的更多相关文章
- QLGame 2D Engine编写环境搭建
QLGame 2D Engine编写 (win7环境搭建) 广州麒麟网络工作室,计划制作一款2d game engine,基于opengl(es)平台,暂时支持android,以后考虑支持linux, ...
- QLGame 2d Engine Android端环境搭建(通过jni读取assets目录的文件)
QLGame 2d Engine win端已经实现了一个动物的动画了,初步的东西已经完成,考虑在Android端也实现这些基本的东西,这样跨平台的引擎也就实现了! 要在Android下编程,首先要实现 ...
- QLGame 2d Engine源码地址
QLGame 2d Engine源码地址已经提交到github上,地址为:https://github.com/wsgzxl/QLGame2dEngine
- 简易2D横版RPG游戏制作
Unity学习笔记1 简易2D横版RPG游戏制作 http://m.blog.csdn.net/article/details?id=24601905
- 2d命令行小游戏源码
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- Unity3D实现3D立体游戏原理及过程
Unity3D实现3D立体游戏原理及过程 183 0 0 下面的教程是我今天整理的资料,教大家一步步完成自己的3D立体游戏,并向大家介绍一些3D成像的原理. 理论上,每个普通的非立体3 ...
- css3 2D转换(2D Transform) 动画(Animation)
transform 版本:CSS3 内核类型 写法 Webkit(Chrome/Safari) -webkit-transform Gecko(Firefox) -moz-transform Pres ...
- 第九章 nginx基础之搭建小游戏
一.nginx部署 1.epel源安装 [root@web01 ~]# yum install -y nginx 2.官方源安装 1.配置官方源[root@web02 ~]# vim /etc/yum ...
- QLGame 2d Engine SpriteBatch类创建
GitHub地址:https://github.com/wsgzxl/QLGame2dEngine 今天说五个问题: 1.前面说到的 颜色不对的问题,是因为FreeImage读取出来的数据格式与Ope ...
随机推荐
- arcgis10 安装1721错误
arcgis10 安装1721错误,主要是ArcGIS License Manager 服务程序的位置不对,注册表lmgrd.exe中修改lmgrd.ex
- ASP.NET MVC(三) TypeScript
TypeScript 是微软开发的 JavaScript 的超集,TypeScript兼容JavaScript,可以载入JavaScript代码然后运行.TypeScript与JavaScript相比 ...
- LSJ_NHibernate第三章 IDAL,DAL,BLL
前言: 做项目(面向数据编程),首先必须了解业务,这是核心,不懂业务写出来的代码毫无意义.业务我这里分为两种,简单业务操作,复杂业务操作,我以他们操作表的界限进行区分,假设我更新一条数据,只操作了一张 ...
- Sql触发器脚本
ALTER Trigger [dbo].[test] --新建触发器 On [dbo].[test1] --在test1表中创建触发器 for insert --触发条件 As --事件触发后所要做的 ...
- 20151207jquery 学习笔记 Ajax
.load()方法是局部方法,因为他需要一个包含元素的 jQuery 对象作为前缀.而$.get()和 $.post()是全局方法,无须指定某个元素.对于用途而言,.load()适合做静态文件的异步获 ...
- 深入理解Java的接口和抽象类 _摘抄
http://www.cnblogs.com/dolphin0520/p/3811437.html 原文 深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可 ...
- JavaScript之Function类型
1. 创建方式 //1.函数声明 function sum(num1,num2){ return num1+num2; } //2.函数表达式 var sum = function(num1,num2 ...
- swing容器继承重绘问题解决
swing容器继承重绘问题解决 以JPanel为例,继承JPanel,想动态为器更换背景,这就涉及到重绘问题.一下是本人重写代码: package ui; import java.awt.Grap ...
- oc for in 的时候nsscanner: nil string argument
今天偶然发现,oc for in 动态的给一数组加东西,然后嵌套for in 会报nsscanner: nil string argument. 换成for循环就好了,暂时还没找到原因
- 九度OJ 1468 Sharing -- 哈希
题目地址:http://ac.jobdu.com/problem.php?pid=1468 题目描述: To store English words, one method is to use lin ...