相关资源
(转自:http://yuanzhifei89.iteye.com/blog/1166835)
2D中如何判断一点在另一个点的那个方位:
http://blog.csdn.net/rabbit729/article/details/4424929
游戏开发书籍推荐:
http://rightmost.blog.163.com/blog/static/18058539920112223202311/
http://blog.csdn.net/hsz8250/article/details/639771
地图绘制算法:
http://bbs.chinaunix.net/viewthread.php?tid=1669931
如何成为android游戏程序员:
http://www.microdu.com/thread-3235-1-1.html
silverlight c#游戏开发相关文章:
http://www.silverlightchina.net/html/zhuantixilie/game/
游戏引擎剖析:
http://blog.csdn.net/xiaominghimi/article/details/6556289
游戏开发常用工具
游戏图片提取工具、png压缩、音乐压缩工具:
http://www.silverlightchina.net/html/zhuantixilie/game/2010/0520/1148.html
cocos2d游戏开发,常用工具集合:
http://www.cocoachina.com/bbs/read.php?tid-68951.html
游戏开发库、框架、引擎
android中常见游戏引擎:
http://my.oschina.net/ahuaahua/blog/16930
libgdx:
项目地址: http://code.google.com/p/libgdx/
作者博客: http://www.badlogicgames.com/wordpress/
libgdx官方指南: http://code.google.com/p/libgdx/wiki/TableOfContents?tm=6
强烈建议看看begin android games,因为那本书的作者就是libgdx的开发者,那本书基本是从基础开始讲述了libgdx的一个雏形的开发。
libgdx入门: http://www.oschina.net/question/12_15850
libgdx学习笔记: http://www.cnblogs.com/tianjian/category/315324.html
LGame游戏引擎作者blog(国人):
http://blog.csdn.net/cping1982?viewmode=contents
min3d:
http://code.google.com/p/min3d/
游戏开发网站、论坛
open gl官方网站
http://www.khronos.org/opengles/
最经典的Nehe 学习网站
http://nehe.gamedev.net/
中文的Nehe学习网站
http://www.owlei.com/DancingWind/
GLUT 的下载网站
http://www.opengl.org/resources/libraries/glut/
老牌的游戏开发网站
http://www.gamedev.net
面向工业的老牌游戏开发网站
http://www.gamasutra.com
游戏开发wiki
http://wiki.gamedev.net
经典代码档案网站
http://www.flipcode.com/archives/
java游戏开发的首选网站:
http://www.java-gaming.org
open gl
Android OpenGL ES 分析与实践系列:
http://blog.163.com/gobby_1110/blog/static/29281715201132033017409/
OpengGL ES教程:
http://www.zeuscmd.com/tutorials/opengles/index.php
什么是open gl: http://www.kuqin.com/baike/20081006/21130.html
open gl、egl简介?
open gl是一套与平台无关的图形api,但它只提供了图形渲染功能,没有与宿主系统交互的功能。egl就是对open gl的一个扩展,使之具有与宿主系统交互等的功能。其它的还包括:wgl-window平台上的opengl扩展,xgl-基于xwindow的平台的opengl扩展,agl-apple mac平台的opengl扩展
open gl es基本图形的绘制
open gl es初始化部分
绘制三角形
绘制三角行带
绘制三角扇形
绘制点
绘制线段
绘制线条
绘制环形线路
实际图形的绘制
open gl es使用过程中遇到的问题及解决
1. 贴图(texture)无法显示,我遇到的主要原因主要有以下几个:
1. 图片的宽或高不是2的n次方
2. 图片放在了drawable, drawable-hdpi等会被android缩放的目录(这样在不同dpi的机器上时,图片可能就被拉升为宽或高不是2的n次方了),所以要将图片放在drawable-nodpi或assets中
3. open gl es对图片大小有一定的限制,可以尝试多换几个大小试试。1024x1024, 512x512, 128x256在测试时是可以的
4. 代码设置不正确(下面是一段可用代码,中间用// ********************说明了一些需要注意的地方)
********************************************************************************************************************************************
********************************************************************************************************************************************
photoshop相关
几种png格式的区别
PNG图片格式现在包含三种类型:
1.PNG8
2.PNG24
3.PNG32
如果你经常使用Photoshop,那你这里就会问了:到底PNG32是个什么东西。基本上PNG32就是PNG24,但是附带了全alpha通道。就是说每个像素上不仅存储了24位真色彩信息还存储了8位的alpha通道信息,就如同GIF能存储透明和不透明信息一样。当我们把图片放到不太搭配的背景上的时候,透明PNG图片的边缘会显示得更加平滑。
当然,我也知道你的想法,“但是Photoshop也能生成带透明通道的PNG图片!”我也知道,它只是表面上这么说是PNG24,让我也产生困惑了。
作为一个伤感的Fireworks倡导者,我只使用PNG32支持附带alpha通道的真色彩图片。不管怎样,如果你习惯使用Photoshop,你就应该知道,Photoshop在“存储为WEB格式”中只提供PNG8和PNG24两种PNG格式。
我敢肯定你经常会勾选“支持透明”选项,以获得带有透明度的PNG图片,但是这样你就获取了一张PNG32图片。——Photoshop只是觉得把PNG32这个名称给隐藏掉了。
png保存时的交错选项
交错:就是指浏览器下载它的时候隔行下载,这样下载一张图只用一半的时间就可以看到它的样子,只不过只是隔行的图,然后它再下载另一般,这样可以减少你等待看它的时间.
无:就是没有优化
alpha通道,蒙板,路径
通道只有两个功能就是保存图像选区和颜色信息。例如RGB模式下通道里就有红绿蓝三个颜色的信息,你可以实验一下如果你画一个纯红色的东西,那么红色通道里就显示白色,绿蓝通道里就显示为黑色,意思是说红色是满的,绿和蓝是完全没有的。因为通道是用黑白灰来记录颜色信息的。
至于图象选区,你在通道栏里点下面的新建通道,他出来的就是个ALPHA1通道。如果在此通道画白色,那么白色部分就是被记录下的选区。
至于蒙板,如果给图层添加个蒙板,用处就是为了让此图层显示某些地方隐藏某些地方。白色代表显示黑色代表隐藏。你可以看到在通道里面,也会有个ALPHA通道但它名字叫图层1蒙板。所以蒙板其实就是一个ALPHA通道。
2D中如何判断一点在另一个点的那个方位:
http://blog.csdn.net/rabbit729/article/details/4424929
游戏开发书籍推荐:
http://rightmost.blog.163.com/blog/static/18058539920112223202311/
http://blog.csdn.net/hsz8250/article/details/639771
地图绘制算法:
http://bbs.chinaunix.net/viewthread.php?tid=1669931
如何成为android游戏程序员:
http://www.microdu.com/thread-3235-1-1.html
silverlight c#游戏开发相关文章:
http://www.silverlightchina.net/html/zhuantixilie/game/
游戏引擎剖析:
http://blog.csdn.net/xiaominghimi/article/details/6556289
游戏开发常用工具
游戏图片提取工具、png压缩、音乐压缩工具:
http://www.silverlightchina.net/html/zhuantixilie/game/2010/0520/1148.html
cocos2d游戏开发,常用工具集合:
http://www.cocoachina.com/bbs/read.php?tid-68951.html
游戏开发库、框架、引擎
android中常见游戏引擎:
http://my.oschina.net/ahuaahua/blog/16930
libgdx:
项目地址: http://code.google.com/p/libgdx/
作者博客: http://www.badlogicgames.com/wordpress/
libgdx官方指南: http://code.google.com/p/libgdx/wiki/TableOfContents?tm=6
强烈建议看看begin android games,因为那本书的作者就是libgdx的开发者,那本书基本是从基础开始讲述了libgdx的一个雏形的开发。
libgdx入门: http://www.oschina.net/question/12_15850
libgdx学习笔记: http://www.cnblogs.com/tianjian/category/315324.html
LGame游戏引擎作者blog(国人):
http://blog.csdn.net/cping1982?viewmode=contents
min3d:
http://code.google.com/p/min3d/
游戏开发网站、论坛
open gl官方网站
http://www.khronos.org/opengles/
最经典的Nehe 学习网站
http://nehe.gamedev.net/
中文的Nehe学习网站
http://www.owlei.com/DancingWind/
GLUT 的下载网站
http://www.opengl.org/resources/libraries/glut/
老牌的游戏开发网站
http://www.gamedev.net
面向工业的老牌游戏开发网站
http://www.gamasutra.com
游戏开发wiki
http://wiki.gamedev.net
经典代码档案网站
http://www.flipcode.com/archives/
java游戏开发的首选网站:
http://www.java-gaming.org
open gl
Android OpenGL ES 分析与实践系列:
http://blog.163.com/gobby_1110/blog/static/29281715201132033017409/
OpengGL ES教程:
http://www.zeuscmd.com/tutorials/opengles/index.php
什么是open gl: http://www.kuqin.com/baike/20081006/21130.html
open gl、egl简介?
open gl是一套与平台无关的图形api,但它只提供了图形渲染功能,没有与宿主系统交互的功能。egl就是对open gl的一个扩展,使之具有与宿主系统交互等的功能。其它的还包括:wgl-window平台上的opengl扩展,xgl-基于xwindow的平台的opengl扩展,agl-apple mac平台的opengl扩展
open gl es基本图形的绘制
open gl es初始化部分
- publicvoidonSurfaceCreated(GL10gl,EGLConfigconfig){
- initFloatGL();
- initXXX//XXX为要绘制的图形
- }
- privatevoidinitFloatGL(){
- //定义画面大小
- gl.glViewport(0,0,mWidth,mHeight);
- //设置操作的变换矩阵
- gl.glMatrixMode(GL10.GL_PROJECTION);
- gl.glLoadIdentity();
- //标准化坐标系统
- gl.glOrthof(0,mWidth,0,mHeight,1,-1);
- //保存清屏颜色(黑色)
- //gl.glClearColor(1.0F,1.0F,1.0F,1.0F);
- //设置绘制默认颜色(红色)
- gl.glColor4f(1.0F,0.0F,0.0F,1.0F);
- //启用opengl某些功能
- gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
- }
绘制三角形
- privatevoidinitTriangles(){
- //创建绘制三角形要用的点数据
- intpointNum=6;
- ByteBufferbyteBuffer=ByteBuffer.allocateDirect(pointNum*2*4);
- byteBuffer.order(ByteOrder.nativeOrder());
- byteBuffer.clear();
- FloatBufferfloatBuffer=byteBuffer.asFloatBuffer();
- floatBuffer.put(newfloat[]{
- //triangle1
- 0.0F,0.0F,//p1
- 50.0F,0.0F,//p2
- 25.0F,50.0F,//p3
- //triangle2
- 0.0F,60.0F,//p1
- 50.0F,60.0F,//p2
- 25.0F,110.0F//p3
- });
- floatBuffer.flip();
- //保存要用的点
- gl.glVertexPointer(2,GL10.GL_FLOAT,0,floatBuffer);
- System.out.println("initTriangles");
- }
绘制三角行带
- privatevoidinitTriangleStrip(){
- //创建绘制三角形带要用的点
- intpointNum=5;//3triangles
- ByteBufferbyteBuffer=ByteBuffer.allocateDirect(pointNum*2*4);
- byteBuffer.order(ByteOrder.nativeOrder());
- byteBuffer.clear();
- FloatBufferfloatBuffer=byteBuffer.asFloatBuffer();
- floatBuffer.put(newfloat[]{
- 60.0F,0.0F,//p1
- 110.0F,0.0F,//p2
- 85.0F,100.0F,//p3
- 135.0F,100.0F,//p4
- 180.0F,0.0F,//p5
- });
- floatBuffer.flip();
- //保存要用的点
- gl.glVertexPointer(2,GL10.GL_FLOAT,0,floatBuffer);
- }
绘制三角扇形
- privatevoidinitTriangleFan(){
- //创建绘制三角扇形要用的点
- intpointNum=5;//4triangles
- ByteBufferbyteBuffer=ByteBuffer.allocateDirect(pointNum*2*4);
- byteBuffer.order(ByteOrder.nativeOrder());
- byteBuffer.clear();
- FloatBufferfloatBuffer=byteBuffer.asFloatBuffer();
- floatBuffer.put(newfloat[]{
- 50.0F,50.0F,//centerpoint
- 0.0F,100.0F,//p2
- 30.0F,120.0F,//p3
- 60.0F,120.0F,//p4
- 90.0F,100.0F//p5
- });
- floatBuffer.flip();
- //保存要用的点
- gl.glVertexPointer(2,GL10.GL_FLOAT,0,floatBuffer);
- }
绘制点
- privatevoidinitPoints(){
- //创建绘制点要用的点数据(x,yandfourpointsand4bytesafloat)
- ByteBufferbyteBuffer=ByteBuffer.allocateDirect(2*4*4);
- byteBuffer.order(ByteOrder.nativeOrder());
- byteBuffer.clear();
- FloatBufferfloatBuffer=byteBuffer.asFloatBuffer();
- floatBuffer.put(newfloat[]{
- 20.0F,20.0F,//p1
- 20.0F,21.0F,//p2
- 20.0F,22.0F,//p3
- 22.0F,20.0F//p4
- });
- floatBuffer.flip();
- //保存要用的点
- gl.glVertexPointer(2,GL10.GL_FLOAT,0,floatBuffer);
- }
绘制线段
- privatevoidinitLines(){
- //创建绘制线段要用的点
- intpointNum=6;//3lines
- ByteBufferbyteBuffer=ByteBuffer.allocateDirect(pointNum*2*4);
- byteBuffer.order(ByteOrder.nativeOrder());
- byteBuffer.clear();
- FloatBufferfloatBuffer=byteBuffer.asFloatBuffer();
- floatBuffer.put(newfloat[]{
- 20.0F,20.0F,100.0F,200.0F,//line1
- 50.0F,50.0F,300.0F,100.0F,//line2
- 200.0F,200.0F,200.0F,20.0F//line3
- });
- floatBuffer.flip();
- //保存要用的点
- gl.glVertexPointer(2,GL10.GL_FLOAT,0,floatBuffer);
- }
绘制线条
- privatevoidinitLineStrip(){
- //创建绘制线条要用的点
- intpointNum=4;//3lines
- ByteBufferbyteBuffer=ByteBuffer.allocateDirect(pointNum*2*4);
- byteBuffer.order(ByteOrder.nativeOrder());
- byteBuffer.clear();
- FloatBufferfloatBuffer=byteBuffer.asFloatBuffer();
- floatBuffer.put(newfloat[]{
- 20.0F,20.0F,//p1
- 100.0F,200.0F,//p2
- 200.0F,200.0F,//p3
- 200.0F,20.0F//p4
- });
- floatBuffer.flip();
- //保存要用的点
- gl.glVertexPointer(2,GL10.GL_FLOAT,0,floatBuffer);
- }
绘制环形线路
- privatevoidinitLineLoop(){
- //创建绘制环形线路要用的点
- intpointNum=4;
- ByteBufferbyteBuffer=ByteBuffer.allocateDirect(pointNum*2*4);
- byteBuffer.order(ByteOrder.nativeOrder());
- byteBuffer.clear();
- FloatBufferfloatBuffer=byteBuffer.asFloatBuffer();
- floatBuffer.put(newfloat[]{
- 20.0F,20.0F,//p1
- 100.0F,200.0F,//p2
- 200.0F,200.0F,//p3
- 200.0F,20.0F//p4
- });
- floatBuffer.flip();
- //保存要用的点
- gl.glVertexPointer(2,GL10.GL_FLOAT,0,floatBuffer);
- }
实际图形的绘制
- publicvoidonDrawFrame(GL10gl){
- gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
- gl.glDrawArrays(具体的形状);
- }
- //三角形
- gl.glDrawArrays(GL10.GL_TRIANGLES,0,6);
- //三角形带
- gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP,0,5);
- //三角扇形
- gl.glDrawArrays(GL10.GL_TRIANGLE_FAN,0,5);
- //点
- gl.glDrawArrays(GL10.GL_POINTS,0,4);
- //线段
- gl.glDrawArrays(GL10.GL_LINES,0,6);
- //线条
- gl.glDrawArrays(GL10.GL_LINE_STRIP,0,4);
- //环形线路
- gl.glDrawArrays(GL10.GL_LINE_LOOP,0,4);
open gl es使用过程中遇到的问题及解决
1. 贴图(texture)无法显示,我遇到的主要原因主要有以下几个:
1. 图片的宽或高不是2的n次方
2. 图片放在了drawable, drawable-hdpi等会被android缩放的目录(这样在不同dpi的机器上时,图片可能就被拉升为宽或高不是2的n次方了),所以要将图片放在drawable-nodpi或assets中
3. open gl es对图片大小有一定的限制,可以尝试多换几个大小试试。1024x1024, 512x512, 128x256在测试时是可以的
4. 代码设置不正确(下面是一段可用代码,中间用// ********************说明了一些需要注意的地方)
- //读取间隔(三角形2个坐标+贴图两个坐标)
- intstrideBytes=(2+2)*4;
- ByteBufferbyteBuffer=ByteBuffer.allocateDirect(3*strideBytes);//总共3个点
- byteBuffer.order(ByteOrder.nativeOrder());
- //创建要用的顶点(贴图和要绘制的三角形的)
- FloatBuffermVertexs=byteBuffer.asFloatBuffer();
- mVertexs.put(newfloat[]{
- 100.0F,100.0F,/*tranglevertex1*/
- 0.0F,1.0F,/*texturevertex1*/
- 228.0F,100.0F,/*tranglevertex2*/
- 1.0F,1.0F,/*texturevertex2*/
- 228.0F,228.0F,/*tranglevertex3*/
- 1.0F,0.0F,/*texturevertex3*/
- });
- mVertexs.flip();
- //初始化并设置贴图
- int[]texIds=newint[1];
- gl.glGenTextures(1,texIds,0);
- //设置要操作的贴图
- gl.glBindTexture(GL10.GL_TEXTURE_2D,texIds[0]);
- //上传图片至opengl
- GLUtils.texImage2D(GL10.GL_TEXTURE_2D,0,Assets.sGL,0);
- //********************
- //设置图片参数(这个如果不设置,可能在模拟器上正常,在真机上贴图会无法显示)
- //********************
- gl.glTexParameterf(GL10.GL_TEXTURE_2D,GL10.GL_TEXTURE_MIN_FILTER,GL10.GL_NEAREST);
- gl.glTexParameterf(GL10.GL_TEXTURE_2D,GL10.GL_TEXTURE_MAG_FILTER,GL10.GL_NEAREST);
- //解绑操作的贴图
- gl.glBindTexture(GL10.GL_TEXTURE_2D,0);
- //opengl初始化代码
- //设置画面大小
- gl.glViewport(0,0,480,320);
- //设置操作矩阵
- gl.glMatrixMode(GL10.GL_PROJECTION);
- gl.glLoadIdentity();
- //标准化坐标系统
- gl.glOrthof(0,480,0,320,1,-1);
- //设置清屏颜色(白色)
- gl.glClearColor(1.0F,1.0F,1.0F,1.0F);
- //设置绘制默认颜色(红色)
- gl.glColor4f(1.0F,0.0F,0.0F,1.0F);
- //********************
- //启用opengl其他功能(一定要开启此功能)
- //********************
- gl.glEnable(GL10.GL_TEXTURE_2D);
- gl.glBindTexture(GL10.GL_TEXTURE_2D,mTexIds[0]);
- //启用opengl顶点相关功能
- gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
- gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
- //保存要读取的点的数据
- mVertexs.position(0);
- gl.glVertexPointer(2,GL10.GL_FLOAT,strideBytes,mVertexs);
- mVertexs.position(2);
- gl.glTexCoordPointer(2,GL10.GL_FLOAT,strideBytes,mVertexs);
- //清屏
- gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
- //绘制三角形,并以设置的贴图填充
- gl.glDrawArrays(GL10.GL_TRIANGLES,0,3);
********************************************************************************************************************************************
********************************************************************************************************************************************
photoshop相关
几种png格式的区别
PNG图片格式现在包含三种类型:
1.PNG8
2.PNG24
3.PNG32
如果你经常使用Photoshop,那你这里就会问了:到底PNG32是个什么东西。基本上PNG32就是PNG24,但是附带了全alpha通道。就是说每个像素上不仅存储了24位真色彩信息还存储了8位的alpha通道信息,就如同GIF能存储透明和不透明信息一样。当我们把图片放到不太搭配的背景上的时候,透明PNG图片的边缘会显示得更加平滑。
当然,我也知道你的想法,“但是Photoshop也能生成带透明通道的PNG图片!”我也知道,它只是表面上这么说是PNG24,让我也产生困惑了。
作为一个伤感的Fireworks倡导者,我只使用PNG32支持附带alpha通道的真色彩图片。不管怎样,如果你习惯使用Photoshop,你就应该知道,Photoshop在“存储为WEB格式”中只提供PNG8和PNG24两种PNG格式。
我敢肯定你经常会勾选“支持透明”选项,以获得带有透明度的PNG图片,但是这样你就获取了一张PNG32图片。——Photoshop只是觉得把PNG32这个名称给隐藏掉了。
png保存时的交错选项
![](http://dl.iteye.com/upload/attachment/562477/4f01ad5f-449e-3a42-8074-98def992922b.png)
交错:就是指浏览器下载它的时候隔行下载,这样下载一张图只用一半的时间就可以看到它的样子,只不过只是隔行的图,然后它再下载另一般,这样可以减少你等待看它的时间.
无:就是没有优化
alpha通道,蒙板,路径
通道只有两个功能就是保存图像选区和颜色信息。例如RGB模式下通道里就有红绿蓝三个颜色的信息,你可以实验一下如果你画一个纯红色的东西,那么红色通道里就显示白色,绿蓝通道里就显示为黑色,意思是说红色是满的,绿和蓝是完全没有的。因为通道是用黑白灰来记录颜色信息的。
至于图象选区,你在通道栏里点下面的新建通道,他出来的就是个ALPHA1通道。如果在此通道画白色,那么白色部分就是被记录下的选区。
至于蒙板,如果给图层添加个蒙板,用处就是为了让此图层显示某些地方隐藏某些地方。白色代表显示黑色代表隐藏。你可以看到在通道里面,也会有个ALPHA通道但它名字叫图层1蒙板。所以蒙板其实就是一个ALPHA通道。