opengl的添加多个点光源的例子

s2unn 2017-05-29 03:15:50
renderscene这个函数里我想画两个点光源分别绕x轴和y轴做旋转,但光源2虽然有旋转但是无法出现光照效果 请问有人知道是怎么回事吗?是否会出现两个光源互相影响的情况呢?因为无论单独添加哪一个都不会出现问题



GLfloat specular[] = { 1.0f, 1.0f, 1.0f, 1.0f};
GLfloat specref[] = { 1.0f, 1.0f, 1.0f, 1.0f };
GLfloat ambientLight[] = { 0.5f, 0.5f, 0.5f, 1.0f};
GLfloat spotDir[] = { 0.0f, 0.0f, -1.0f };
GLfloat light_position[4] = {0.0f, 0.0f, 70.0f, 1.0f};
GLfloat light_position2[4] = {0.0f, 70.0f, 0.0f, 1.0f};
GLfloat spotDir2[] = { 0.0f, -1.0f, 0.0f };
void RenderScene(void)
{
// Clear the window with current clearing color
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// Save the matrix state
glColor3f(1.0,1.0,0.0);
glLoadIdentity();
glPushMatrix();
glRotatef(xRot, 1, 0, 0); //光源的旋转
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, spotDir);
glTranslatef(light_position[0], light_position[1],light_position[2]); //光源位置
glPushAttrib(GL_LIGHTING_BIT);
glDisable(GL_LIGHTING);
glutSolidSphere(5,20,20);//画球作为光源
glPopAttrib();
glPopMatrix();

glPushMatrix();
glRotatef(yRot, 0, 1, 0); //光源的旋转
glLightfv(GL_LIGHT0, GL_POSITION, light_position2);
glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, spotDir2);
glTranslatef(light_position2[0], light_position2[1],light_position2[2]); //光源位置
glPushAttrib(GL_LIGHTING_BIT);
glDisable(GL_LIGHTING);
glutSolidSphere(5,20,20);
glPopAttrib();
glPopMatrix(); //光源设置完毕



//画球
glPushMatrix();
glColor3ub(0,255,0);
glutSolidSphere(10,20,20);
glTranslatef(-50.0f ,0 ,0);
glColor3ub(64,64,64);
glutSolidSphere(10,20,20);
glTranslatef(100.0f ,0 ,0.0f);
glColor3ub(255,0,0);
glutSolidSphere(10,20,20);
glPopMatrix();
glutSwapBuffers();// Display the results
}
void SetupRC()
{
glEnable(GL_DEPTH_TEST); // Hidden surface removal
glFrontFace(GL_CCW); // Counter clock-wise polygons face out
glEnable(GL_CULL_FACE); // Do not try to display the back sides

// Enable lighting
glEnable(GL_LIGHTING);

// Setup and enable light 0
// Supply a slight ambient light so the objects can be seen
glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambientLight);

// The light is composed of just a diffuse and specular components
glLightfv(GL_LIGHT0,GL_DIFFUSE,ambientLight);
glLightfv(GL_LIGHT0,GL_SPECULAR,specular);
glLightfv(GL_LIGHT0,GL_POSITION,light_position);

// Specific spot effects
// Cut off angle is 60 degrees
glLightf(GL_LIGHT0,GL_SPOT_CUTOFF,50.0f);

// Enable this light in particular
glEnable(GL_LIGHT0);

// Enable color tracking
glEnable(GL_COLOR_MATERIAL);

// Set Material properties to follow glColor values
glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE);

// All materials hereafter have full specular reflectivity
// with a high shine
glMaterialfv(GL_FRONT, GL_SPECULAR,specref);
glMateriali(GL_FRONT, GL_SHININESS,128);


// Black background
glClearColor(1.0f, 1.0f, 1.0f, 1.0f );

}
...全文
357 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2017-05-31
  • 打赏
  • 举报
回复
搜网络教程“学OpenGL编3D游戏”。
opengl 期末复习资料 第一、二章: 1、 OpenGL中能渲染的基本元素是什么?GLU 可以渲染哪些基本元素? 第三章 2、 用框图说明OpenGL的渲染流程,并简要说明每个坐标系。 第四、五章 3、 写出OpenGL中局部光照的方程,要包含的系数有光源参数、材料参数、聚光灯的参数、衰减参数等,方程要表示是多个光源的。 4、 分析程序并计算 请看下面的一段程序,并计算三个顶点○1、○2和○3处的光照的颜色值。 void init(void) { GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 }; GLfloat mat_shininess[] = { 50.0 }; GLfloat light_position[] = { 1.0, 1.0, 1.0, 0.0 }; glClearColor (0.0, 0.0, 0.0, 0.0); glShadeModel (GL_SMOOTH); //glLightModelf(GL_LIGHT_MODEL_LOCAL_VIEWER, GL_FALSE); //glLightModelf(GL_LIGHT_MODEL_TWO_SIDE, GL_FALSE); glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess); glLightfv(GL_LIGHT0, GL_POSITION, light_position); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glEnable(GL_DEPTH_TEST); } void display(void) { glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glBegin(GL_TRIANGLES); glNormal3f(..); ○1glVertex3f(1.0, 0.0, 0.0); ○2glVertex3f(0.0, 1.0, 0.0); ○3glVertex3f(0.0, 0.0, 1.0); glEnd(); glFlush (); } void reshape (int w, int h) { glViewport (0, 0, (GLsizei) w, (GLsizei) h); glMatrixMode (GL_PROJECTION); glLoadIdentity(); if (w <= h) glOrtho (-1.5, 1.5, -1.5*(GLfloat)h/(GLfloat)w, 1.5*(GLfloat)h/(GLfloat)w, -10.0, 10.0); else glOrtho (-1.5*(GLfloat)w/(GLfloat)h, 1.5*(GLfloat)w/(GLfloat)h, -1.5, 1.5, -10.0, 10.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); } void keyboard(unsigned char key, int x, int y) { switch (key) { case 27: exit(0); break; } } int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH); glutInitWindowSize (500, 500); glutInitWindowPosition (100, 100); glutCreateWindow (argv[0]); init (); glutDisplayFunc(display); glutReshapeFunc(reshape); glutKeyboardFunc(keyboard); glutMainLoop(); return 0; } 第9章 在OpenGL中,使用纹理的步骤是什么?纹理坐标和纹理都可以通过程序计算出来,自动生成纹理的原理是什么? 第10章 帧缓存有几种,什么叫片元,片元的测试和操作有哪些? 明白stencilbuffer的使用。 用stencilbuffer编程实现一个功能。 5、 采用GPU编程,请说明Vertex Shader 和 Fragment Shader 的输入输出坐标系是什么? 输入输出的主要参数是什么? 如何实现Multi-Pass 渲染? 6、 在一个坐标系W中,光源的位置为 (0, 0, 200, 1.0),设模型为一个以(1.0, 0.0, 0.0), (0.0, 1.0, 0.0), (0.0, 0.0, 1.0)为三个点的三角形,另一个模型是以(0, 0, 10)为中心,长度为2的一个正方体,如何实现该正方体在三角形平面上的阴影?如何使用OpenGL函数来实现?要求在照相机改变时,该程序应该仍然有效。 7、 如何实现纹理的反走样?说明其原理。 8、 写出场景的反走样算法,并说明其原理。 9、 如何实现采用立方体映射实现的环境映射,写出立方体映射的生成算法和把其作为环境映射时显示的程序。 10、 请列举出3种以上的三维模型常见的表示格式,已知一个立方体环境映射对应的六个面上的图片,分别假定为X_POSITVIE_PIC, X_NEGATIVE_PIC, Y_POSITIVE_PIC, Y_NEGATIVE_PIC, Z_POSITIVE_PIC, Z_NEGATIVE_PIC,请用OBJ格式表示一个长度为1的立方体,并把每个面分别贴上给定的六个图片。 11、 分析下面的程序并计算 在下面的例子中,计算对应○1○2○3○4四个顶点所对应的四边形上的一个点(-1.0, 0.5, 0.0)对应的纹理坐标是多少?按照最近邻域滤波方法,该点对应的颜色是什么? /* Create checkerboard texture */ #define checkImageWidth 64 #define checkImageHeight 64 static GLubyte checkImage[checkImageHeight][checkImageWidth][4]; #ifdef GL_VERSION_1_1 static GLuint texName; #endif void makeCheckImage(void) { int i, j, c; for (i = 0; i < checkImageHeight; i++) { for (j = 0; j < checkImageWidth; j++) { c = ((((i&0x8)==0)^((j&0x8))==0))*255; checkImage[i][j][0] = (GLubyte) c; checkImage[i][j][1] = (GLubyte) c; checkImage[i][j][2] = (GLubyte) c; checkImage[i][j][3] = (GLubyte) 255; } } } void init(void) { glClearColor (0.0, 0.0, 0.0, 0.0); glShadeModel(GL_FLAT); glEnable(GL_DEPTH_TEST); makeCheckImage(); glPixelStorei(GL_UNPACK_ALIGNMENT, 1); #ifdef GL_VERSION_1_1 glGenTextures(1, &texName); glBindTexture(GL_TEXTURE_2D, texName); #endif glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); #ifdef GL_VERSION_1_1 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, checkImageWidth, checkImageHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, checkImage); #else glTexImage2D(GL_TEXTURE_2D, 0, 4, checkImageWidth, checkImageHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, checkImage); #endif } void display(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glEnable(GL_TEXTURE_2D); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); #ifdef GL_VERSION_1_1 glBindTexture(GL_TEXTURE_2D, texName); #endif glBegin(GL_QUADS); ○1glTexCoord2f(0.0, 0.0); glVertex3f(-2.0, -1.0, 0.0); ○2glTexCoord2f(0.0, 1.0); glVertex3f(-2.0, 1.0, 0.0); ○3glTexCoord2f(1.0, 1.0); glVertex3f(0.0, 1.0, 0.0); ○4glTexCoord2f(1.0, 0.0); glVertex3f(0.0, -1.0, 0.0); glTexCoord2f(0.0, 0.0); glVertex3f(1.0, -1.0, 0.0); glTexCoord2f(0.0, 1.0); glVertex3f(1.0, 1.0, 0.0); glTexCoord2f(1.0, 1.0); glVertex3f(2.41421, 1.0, -1.41421); glTexCoord2f(1.0, 0.0); glVertex3f(2.41421, -1.0, -1.41421); glEnd(); glFlush(); glDisable(GL_TEXTURE_2D); } void reshape(int w, int h) { glViewport(0, 0, (GLsizei) w, (GLsizei) h); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(60.0, (GLfloat) w/(GLfloat) h, 1.0, 30.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glTranslatef(0.0, 0.0, -3.6); } void keyboard (unsigned char key, int x, int y) { switch (key) { case 27: exit(0); break; default: break; } } int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH); glutInitWindowSize(250, 250); glutInitWindowPosition(100, 100); glutCreateWindow(argv[0]); init(); glutDisplayFunc(display); glutReshapeFunc(reshape); glutKeyboardFunc(keyboard); glutMainLoop(); return 0; } Deferred shading 原理
第1章 android,后起之秀  1.1 android简介  1.2 版本分裂  1.3 谷歌的角色  1.3.1 android开源项目  1.3.2 android market  1.3.3 挑战赛、设备播种计划和谷歌i/o  1.4 android的功能和体系结构  1.4.1 内核  1.4.2 运行库和dalvik虚拟机  1.4.3 系统库  1.4.4 应用程序框架  1.5 软件开发工具包  1.6 开发人员社区  1.7 设备,设备,设备  1.7.1 硬件  1.7.2 设备的范围  1.8 所有设备之间的兼容性  1.9 不同的手机游戏  1.9.1 人手一台游戏机  1.9.2 随时上网  1.9.3 普通用户与游戏迷  1.9.4 市场很大,开发人员很少  1.10 小结 第2章 从android sdk开始  2.1 搭建开发环境  2.1.1 安装jdk  2.1.2 安装android sdk  2.1.3 安装eclipse  2.1.4 安装adt eclipse插件  2.1.5 eclipse快速浏览  2.1.6 一些实用的eclipse快捷键  2.2 android环境下的hello world  2.2.1 创建项目  2.2.2 进一步分析项目  2.2.3 编写应用程序代码  2.3 运行和调试android应用程序  2.3.1 连接设备  2.3.2 创建一个android虚拟设备  2.3.3 运行应用程序  2.3.4 调试应用程序  2.3.5 logcat和ddms  2.3.6 使用adb  2.4 小结 第3章 游戏开发基础  3.1 游戏类型  3.1.1 休闲游戏  3.1.2 益智游戏  3.1.3 动作和街机游戏  3.1.4 塔防游戏  3.1.5 创新  3.2 游戏设计:笔比代码更强大  3.2.1 游戏的核心机制  3.2.2 一个故事和一种艺术风格  3.2.3 画面和切换  3.3 代码:具体细节  3.3.1 应用程序和窗口管理  3.3.2 输入  3.3.3 文件i/o  3.3.4 音频  3.3.5 图形  3.3.6 游戏框架  3.4 小结 第4章 面向游戏开发人员的android  4.1 定义一个android应用程序:清单文件  4.1.1 [manifest]元素  4.1.2 [application]元素  4.1.3 [activity]元素  4.1.4 [uses-permission]元素  4.1.5 [uses-feature]元素  4.1.6 [uses-sdk]元素  4.1.7 10个简单步骤建立android游戏项目  4.1.8 市场过滤器  4.1.9 定义游戏图标  4.2 android api基础  4.2.1 创建测试项目  4.2.2 活动的生命周期  4.2.3 处理输入设备  4.2.4 文件处理  4.2.5 音频编程  4.2.6 播放音效  4.2.7 音乐流  4.2.8 基本图形编程  4.3 最佳实践  4.4 小结 第5章 android游戏开发框架  5.1 制定计划  5.2 androidfileio类  5.3 androidaudio、androidsound和androidmusic  5.4 androidinput和accelerometer-handler  5.4.1 accelerometerhandler:手机哪一面朝上  5.4.2 compasshandler  5.4.3 pool类:重用相当有用  5.4.4 keyboardhandler  5.4.5 触摸处理程序  5.4.6 androidinput:优秀的协调者  5.5 androidgraphics和androidpixmap  5.5.1 处理不同屏幕大小和分辨率的问题  5.5.2 androidpixmap:人物的像素  5.5.3 androidgraphics:满足绘图需求  5.5.4 androidfastrenderview  5.6 androidgame:合并所有内容  5.7 小结 第6章 mr. nom入侵android  6.1 创建资源  6.2 建立项目  6.3 mrnomgame:主要活动  6.3.1 资源:便捷的资源存储  6.3.2 设置:跟踪用户的选项设置和高分榜  6.3.3 loadingscreen:从磁盘获取资源  6.4 主菜单画面  6.5 helpscreen类  6.6 高分榜画面显示  6.6.1 渲染数字  6.6.2 画面的实现  6.7 抽象  6.7.1 抽象mr. nom的世界:模型、视图、控制器  6.7.2 gamescreen类  6.8 小结 第7章 opengl es介绍  7.1 opengl es概述以及关注它的原因  7.1.1 编程模型:一个比喻  7.1.2 投影  7.1.3 规范化设备空间和视口  7.1.4 矩阵  7.1.5 渲染管道  7.2 开始之前  7.3 glsurfaceview:从2008年开始,事情变得简单了  7.4 glgame:实现游戏接口  7.5 绘制一个红色的三角形  7.5.1 定义视口  7.5.2 定义投影矩阵  7.5.3 指定三角形  7.5.4 综合示例  7.6 指定每个顶点的颜色  7.7 纹理映射:轻松地创建壁纸  7.7.1 纹理坐标  7.7.2 上传位图  7.7.3 纹理过滤  7.7.4 释放纹理  7.7.5 有用的代码片段  7.7.6 启用纹理  7.7.7 综合示例  7.7.8 texture类  7.8 索引顶点:重用是有好处的  7.8.1 代码整合  7.8.2 vertices类  7.9 半透明混合处理  7.10 更多图元:点、线、条和扇  7.11 2d变换:操作模型视图矩阵  7.11.1 世界空间和模型空间  7.11.2 再次讨论矩阵  7.11.3 第一个使用平移的示例  7.11.4 更多的变换  7.12 性能优化  7.12.1 测量帧率  7.12.2 android 1.5平台下hero的奇特案例  7.12.3 使opengl es渲染如此慢的原因  7.12.4 移除不必要的状态改变  7.12.5 减小纹理大小意味着需要获取更少的像素  7.12.6 减少opengl es/jni方法的调用  7.12.7 绑定顶点的概念  7.12.8 写在结束之前  7.13 小结 第8章 2d游戏编程技巧  8.1 写在开始  8.2 向量  8.2.1 使用向量  8.2.2 一点三角学的知识  8.2.3 实现一个向量类  8.2.4 一个简单的用法示例  8.3 2d物理定律浅析  8.3.1 牛顿和欧拉,永远的好朋友  8.3.2 力和质量  8.3.3 理论上的运动  8.3.4 运动的实现  8.4 2d碰撞检测和对象表示  8.4.1 边界形状  8.4.2 构造边界形状  8.4.3 游戏对象的属性  8.4.4 宽阶段和窄阶段碰撞检测  8.4.5 一个详细的示例  8.5 2d照相机  8.5.1 camera2d类  8.5.2 示例  8.6 纹理图集  8.7 纹理区域、精灵和批处理:隐藏opengl es  8.7.1 textureregion类  8.7.2 spritebatcher类  8.8 精灵动画  8.8.1 animation类  8.8.2 示例  8.9 小结 第9章 super jumper:一个2dopengl es游戏  9.1 核心游戏机制  9.2 背景故事和艺术风格  9.3 画面和切换  9.4 定义游戏世界  9.5 创建资源  9.5.1 ui元素  9.5.2 使用点阵字体处理文本  9.5.3 游戏元素  9.5.4 用于救援的纹理图集  9.5.5 音乐与音效  9.6 实现super jumper  9.6.1 assets类  9.6.2 settings类  9.6.3 主活动  9.6.4 font类  9.6.5 glscreen  9.6.6 主菜单画面  9.6.7 帮助画面  9.6.8 高分画面  9.6.9 模拟类  9.6.10 游戏画面  9.6.11 worldrenderer类  9.7 是否需要优化  9.8 小结 第10章 opengl es:进入3d世界  10.1 准备工作  10.2 3d中的顶点  10.2.1 vertices3:存储3d空间位置  10.2.2 示例  10.3 透视投影:越近则越大  10.4 z-buffer:化混乱为有序  10.4.1 完善上一个例子  10.4.2 混合:身后空无一物  10.4.3 z-buffer精度与z-fighting  10.5 定义3d网格  10.5.1 立方体:3d中的“helloworld”  10.5.2 一个示例  10.6 矩阵和变换  10.6.1 矩阵堆栈  10.6.2 用矩阵堆栈实现分层系统  10.6.3 木箱太阳系的简单实例  10.7 小结 第11章 3d编程技巧  11.1 准备工作  11.2 3d中的向量  11.3 opengl es中的光照  11.3.1 光照的工作机制  11.3.2 光源  11.3.3 材质  11.3.4 opengl es中如何对光照过程进行运算:顶点法线  11.3.5 实践  11.3.6 关于opengl es中光照应用的一些建议  11.4 材质变换(mipmapping)  11.5 简单的照相机  11.5.1 第一人称照相机或欧拉照相机  11.5.2 一个欧拉照相机的示例  11.5.3 跟随照相机  11.6 加载模块  11.6.1 wavefront obj格式  11.6.2 obj加载器的实现  11.6.3 使用obj加载器  11.6.4 关于加载模型的一些建议  11.7 3d中的一些物理知识  11.8 碰撞检测与3d中的对象表达法  11.8.1 3d中的边界形状  11.8.2 边界球重叠测试  11.8.3 gameobject3d与dynamic-gameobject3d  11.9 小结 第12章 droid invaders游戏  12.1 游戏的核心机制  12.2 游戏的故事背景与艺术风格  12.3 屏幕与场景切换  12.4 定义游戏世界  12.5 创建资源  12.5.1 用户界面的资源  12.5.2 游戏资源  12.5.3 音效与音乐  12.6 开始编写代码  12.7 assets类  12.8 settings类  12.9 主活动  12.10 主菜单  12.11 游戏设置画面  12.12 模拟类  12.12.1 shield类  12.12.2 shot类  12.12.3 ship类  12.12.4 invader类  12.12.5 world类  12.13 gamescreen类  12.14 worldrender类  12.15 游戏优化  12.16 小结 第13章 发布游戏  13.1 关于测试  13.2 成为注册开发人员  13.3 给游戏的apk包签名  13.4 将游戏发布至market  13.4.1 上传资源  13.4.2 产品详情  13.4.3 发布选项  13.4.4 发布  13.4.5 市场推广  13.5 开发人员控制台  13.6 小结 第14章 进阶内容  14.1 社交网络  14.2 位置识别  14.3 多玩家功能  14.4 opengl es 2.0以及更多内容  14.5 框架及引擎  14.6 网络资源  14.7 结束语
android游戏编程入门 《Android4游戏编程入门经典》是2012年清华大学出版社出版的图书,作者是(美)策希纳(Zechner,M.),无(美)格林(Green,R.)。 第1章 Android,后起之秀 1   1.1 Android简介 1   1.2 版本分裂 3   1.3 谷歌的角色 3   1.3.1 Android开源项目 3   1.3.2 Android Market 4   1.3.3 挑战赛、设备播种计划   和谷歌I/O 4   1.4 Android的功能和体系结构 5   1.4.1 内核 6   1.4.2 运行库和Dalvik虚拟机 6   1.4.3 系统库 7   1.4.4 应用程序框架 8   1.5 软件开发工具包 8   1.6 开发人员社区 9   1.7 设备,设备,设备 9   1.7.1 硬件 9   1.7.2 设备的范围 10   1.8 所有设备之间的兼容性 15   1.9 不同的手机游戏 15   1.9.1 人手一台游戏机 16   1.9.2 随时上网 16   1.9.3 普通用户与游戏迷 17   1.9.4 市场很大,开发人员很少 17   1.10 小结 18   第2章 从Android SDK开始 19   2.1 搭建开发环境 19   2.1.1 安装JDK 20   2.1.2 安装Android SDK 20   2.1.3 安装Eclipse 21   2.1.4 安装ADT Eclipse插件 22   2.1.5 Eclipse快速浏览 23   2.1.6 一些实用的Eclipse快捷键 24   2.2 Android环境下的Hello World 25   2.2.1 创建项目 25   2.2.2 进一步分析项目 26   2.2.3 编写应用程序代码 27   2.3 运行和调试Android应用   程序 29   2.3.1 连接设备 29   2.3.2 创建一个Android虚拟   设备 29   2.3.3 运行应用程序 30   2.3.4 调试应用程序 32   2.3.5 LogCat和DDMS 34   2.3.6 使用ADB 36   2.4 小结 37   第3章 游戏开发基础 39   3.1 游戏类型 39   3.1.1 休闲游戏 40   3.1.2 益智游戏 41   3.1.3 动作和街机游戏 42   3.1.4 塔防游戏 44   3.1.5 创新 45   3.2 游戏设计:笔比代码更强大 46   3.2.1 游戏的核心机制 46   3.2.2 一个故事和一种艺术风格 47   3.2.3 画面和切换 48   3.3 代码:具体细节 52   3.3.1 应用程序和窗口管理 52   3.3.2 输入 53   3.3.3 文件I/O 56   3.3.4 音频 57   3.3.5 图形 60   3.3.6 游戏框架 69   3.4 小结 75   第4章 面向游戏开发人员的Android 77   4.1 定义一个Android应用程序:   清单文件 77   4.1.1 <manifest>元素 78   4.1.2 <application>元素 79   4.1.3 <activity>元素 80   4.1.4 <uses-permission>元素 82   4.1.5 <uses-feature>元素 83   4.1.6 <uses-sdk>元素 84   4.1.7 10个简单步骤建立Android   游戏项目 84   4.1.8 市场过滤器 86   4.1.9 定义游戏图标 87   4.2 Android API基础 87   4.2.1 创建测试项目 88   4.2.2 活动的生命周期 91   4.2.3 处理输入设备 96   4.2.4 文件处理 110   4.2.5 音频编程 116   4.2.6 播放音效 116   4.2.7 音乐流 119   4.2.8 基本图形编程 122   4.3 最佳实践 143   4.4 小结 144   第5章 Android游戏开发框架 145   5.1 制定计划 145   5.2 AndroidFileIO类 146   5.3 AndroidAudio、AndroidSound   和AndroidMusic 147   5.4 AndroidInput和Accelerometer-   Handler 152   5.4.1 AccelerometerHandler:手机   哪一面朝上 152   5.4.2 CompassHandler 153   5.4.3 Pool类:重用相当有用 154   5.4.4 KeyboardHandler 156   5.4.5 触摸处理程序 160   5.4.6 AndroidInput:优秀的   协调者 167   5.5 AndroidGraphics和   AndroidPixmap 169   5.5.1 处理不同屏幕大小和   分辨率的问题 169   5.5.2 AndroidPixmap:人物的   像素 174   5.5.3 AndroidGraphics:满足   绘图需求 174   5.5.4 AndroidFastRenderView 178   5.6 AndroidGame:合并所有   内容 180   5.7 小结 184   第6章 Mr. Nom入侵Android 185   6.1 创建资源 185   6.2 建立项目 187   6.3 MrNomGame:主要活动 187   6.3.1 资源:便捷的资源存储 188   6.3.2 设置:跟踪用户的选项设置   和高分榜 189   6.3.3 LoadingScreen:从磁盘获取   资源 191   6.4 主菜单画面 192   6.5 HelpScreen类 195   6.6 高分榜画面显示 197   6.6.1 渲染数字 198   6.6.2 画面的实现 199   6.7 抽象 201   6.7.1 抽象Mr. Nom的世界:   模型、视图、控制器 201   6.7.2 GameScreen类 211   6.8 小结 218   第7章 OpenGL ES介绍 219   7.1 OpenGL ES概述以及关注它的   原因 219   7.1.1 编程模型:一个比喻 220   7.1.2 投影 221   7.1.3 规范化设备空间和视口 223   7.1.4 矩阵 223   7.1.5 渲染管道 224   7.2 开始之前 225   7.3 GLSurfaceView:从2008年开始,   事情变得简单了 225   7.4 GLGame:实现游戏接口 228   7.5 绘制一个红色的三角形 235   7.5.1 定义视口 235   7.5.2 定义投影矩阵 235   7.5.3 指定三角形 238   7.5.4 综合示例 241   7.6 指定每个顶点的颜色 243   7.7 纹理映射:轻松地创建   壁纸 246   7.7.1 纹理坐标 247   7.7.2 上传位图 248   7.7.3 纹理过滤 249   7.7.4 释放纹理 250   7.7.5 有用的代码片段 251   7.7.6 启用纹理 251   7.7.7 综合示例 251   7.7.8 Texture类 253   7.8 索引顶点:重用是有好处的 255   7.8.1 代码整合 256   7.8.2 Vertices类 258   7.9 半透明混合处理 260   7.10 更多图元:点、线、条   和扇 263   7.11 2D变换:操作模型视图   矩阵 264   7.11.1 世界空间和模型空间 264   7.11.2 再次讨论矩阵 265   7.11.3 第一个使用平移的   示例 266   7.11.4 更多的变换 270   7.12 性能优化 273   7.12.1 测量帧率 273   7.12.2 Android 1.5平台下Hero的   奇特案例 275   7.12.3 使OpenGL ES渲染如此   慢的原因 275   7.12.4 移除不必要的状态   改变 276   7.12.5 减小纹理大小意味着需要   获取更少的像素 278   7.12.6 减少OpenGL ES/JNI方法的   调用 278   7.12.7 绑定顶点的概念 279   7.12.8 写在结束之前 282   7.13 小结 283   第8章 2D游戏编程技巧 285   8.1 写在开始 285   8.2 向量 286   8.2.1 使用向量 286   8.2.2 一点三角学的知识 288   8.2.3 实现一个向量类 289   8.2.4 一个简单的用法示例 292   8.3 2D物理定律浅析 296   8.3.1 牛顿和欧拉,永远的   好朋友 296   8.3.2 力和质量 297   8.3.3 理论上的运动 298   8.3.4 运动的实现 299   8.4 2D碰撞检测和对象表示 302   8.4.1 边界形状 303   8.4.2 构造边界形状 304   8.4.3 游戏对象的属性 306   8.4.4 宽阶段和窄阶段碰撞检测 307   8.4.5 一个详细的示例 313   8.5 2D照相机 324   8.5.1 Camera2D类 327   8.5.2 示例 328   8.6 纹理图集 329   8.7 纹理区域、精灵和批处理:   隐藏OpenGL ES 334   8.7.1 TextureRegion类 334   8.7.2 SpriteBatcher类 335   8.8 精灵动画 343   8.8.1 Animation类 344   8.8.2 示例 345   8.9 小结 348   第9章 Super Jumper:一个2D   OpenGL ES游戏 351   9.1 核心游戏机制 351   9.2 背景故事和艺术风格 352   9.3 画面和切换 352   9.4 定义游戏世界 353   9.5 创建资源 355   9.5.1 UI元素 355   9.5.2 使用点阵字体处理文本 356   9.5.3 游戏元素 358   9.5.4 用于救援的纹理图集 359   9.5.5 音乐与音效 360   9.6 实现Super Jumper 361   9.6.1 Assets类 361   9.6.2 Settings类 364   9.6.3 主活动 366   9.6.4 Font类 367   9.6.5 GLScreen 369   9.6.6 主菜单画面 369   9.6.7 帮助画面 372   9.6.8 高分画面 374   9.6.9 模拟类 377   9.6.10 游戏画面 390   9.6.11 WorldRenderer类 397   9.7 是否需要优化 401   9.8 小结 402   第10章 OpenGL ES:进入3D   世界 403   10.1 准备工作 403   10.2 3D中的顶点 404   10.2.1 Vertices3:存储3D空间   位置 404   10.2.2 示例 406   10.3 透视投影:越近则越大 409   10.4 z-buffer:化混乱为有序 411   10.4.1 完善上一个例子 412   10.4.2 混合:身后空无一物 413   10.4.3 z-buffer精度与   z-fighting 416   10.5 定义3D网格 417   10.5.1 立方体:3D中的“Hello   World” 417   10.5.2 一个示例 419   10.6 矩阵和变换 422   10.6.1 矩阵堆栈 423   10.6.2 用矩阵堆栈实现分层   系统 425   10.6.3 木箱太阳系的简单   实例 425   10.7 小结 433   第11章 3D编程技巧 435   11.1 准备工作 435   11.2 3D中的向量 436   11.3 OpenGL ES中的光照 440   11.3.1 光照的工作机制 440   11.3.2 光源 441   11.3.3 材质 442   11.3.4 OpenGL ES中如何对光照   过程进行运算:顶点   法线 442   11.3.5 实践 443   11.3.6 关于OpenGL ES中光照   应用的一些建议 456   11.4 材质变换(Mipmapping) 456   11.5 简单的照相机 460   11.5.1 第一人称照相机或欧拉   照相机 460   11.5.2 一个欧拉照相机的示例 463   11.5.3 跟随照相机 468   11.6 加载模块 470   11.6.1 Wavefront OBJ格式 470   11.6.2 OBJ加载器的实现 471   11.6.3 使用OBJ加载器 475   11.6.4 关于加载模型的一些   建议 475   11.7 3D中的一些物理知识 476   11.8 碰撞检测与3D中的对象   表达法 477   11.8.1 3D中的边界形状 477   11.8.2 边界球重叠测试 477   11.8.3 GameObject3D与Dynamic-   GameObject3D 478   11.9 小结 479   第12章 Droid Invaders游戏 481   12.1 游戏的核心机制 481   12.2 游戏的故事背景与艺术   风格 483   12.3 屏幕与场景切换 483   12.4 定义游戏世界 484   12.5 创建资源 485   12.5.1 用户界面的资源 485   12.5.2 游戏资源 486   12.5.3 音效与音乐 488   12.6 开始编写代码 488   12.7 Assets类 489   12.8 Settings类 492   12.9 主活动 493   12.10 主菜单 494   12.11 游戏设置画面 496   12.12 模拟类 499   12.12.1 Shield类 499   12.12.2 Shot类 500   12.12.3 Ship类 500   12.12.4 Invader类 502   12.12.5 World类 505   12.13 GameScreen类 510   12.14 WorldRender类 516   12.15 游戏优化 521   12.16 小结 522   第13章 发布游戏 523   13.1 关于测试 523   13.2 成为注册开发人员 524   13.3 给游戏的APK包签名 524   13.4 将游戏发布至Market 527   13.4.1 上传资源 527   13.4.2 产品详情 528   13.4.3 发布选项 528   13.4.4 发布 529   13.4.5 市场推广 529   13.5 开发人员控制台 529   13.6 小结 530   第14章 进阶内容 531   14.1 社交网络 531   14.2 位置识别 531   14.3 多玩家功能 532   14.4 OpenGL ES 2.0以及更多   内容 532   14.5 框架及引擎 532   14.6 网络资源 534   14.7 结束语 534

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧