OpenGJ的一个简单事例,实现点击变颜色
2011-09-19 14:09
411 查看
1 在MainActivity中实现一下代码:
public class MainActivity extends Activity {
OpenGLView mOpenGLView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//设置全屏
requestWindowFeature(Window.FEATURE_NO_TITLE);
//去标题栏
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.main);
mOpenGLView = new OpenGLView(this);
setContentView(mOpenGLView);
//检测网络是否连接
Log.i("other",utils.detect(this)+"");
}
}
2 新建一个OpenGLRenderer 继承 Renderer
public class OpenGLRenderer implements Renderer {
private float cr,cg,cb;
//自定义一个方法
public void setColor(float r,float g,float b){
cr = r;
cg = g;
cb = b;
}
@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
// 设置输出屏幕大小
//启用smooth shading(阴影平滑)。阴影平滑通过多边形精细的混合色彩,并对外部光进行平滑,在以后的课程中会看到他的效果。
gl.glShadeModel(GL10.GL_SMOOTH);
//设置清除屏幕时所用的颜色
gl.glClearDepthf(1.0f);
gl.glEnable(GL10.GL_DEPTH_TEST);
gl.glDepthFunc(GL10.GL_LEQUAL);
//上面三行是关于depth buffer(深度缓存)的
//OpenGL我们希望进行最好的透视修正
gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST);
}
@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {
// 设置输出屏幕大小
gl.glViewport(0, 0, width, height);
}
@Override
public void onDrawFrame(GL10 gl) {
//清除屏幕和深度缓存
gl.glClear(GL10.GL_COLOR_BUFFER_BIT|GL10.GL_DEPTH_BUFFER_BIT);
//重置当前的模型观察矩阵。
gl.glLoadIdentity();
gl.glClearColor(cr, cg, cb, 0.0f);
}
}
3 写一个类OpenGLView 继承GLSurfaceView
public class OpenGLView extends GLSurfaceView {
OpenGLRenderer mRenderer;
public OpenGLView(Context context) {
super(context);
mRenderer = new OpenGLRenderer();
setRenderer(mRenderer);
// TODO Auto-generated constructor stub
}
@Override
public boolean onTouchEvent(final MotionEvent event) {
queueEvent(new Runnable(){
@Override
public void run() {
mRenderer.setColor(event.getX()/getWidth(), event.getY()/getHeight(), 1.0f);
}
});
return super.onTouchEvent(event);
}
}
这样就OK了
public class MainActivity extends Activity {
OpenGLView mOpenGLView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//设置全屏
requestWindowFeature(Window.FEATURE_NO_TITLE);
//去标题栏
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.main);
mOpenGLView = new OpenGLView(this);
setContentView(mOpenGLView);
//检测网络是否连接
Log.i("other",utils.detect(this)+"");
}
}
2 新建一个OpenGLRenderer 继承 Renderer
public class OpenGLRenderer implements Renderer {
private float cr,cg,cb;
//自定义一个方法
public void setColor(float r,float g,float b){
cr = r;
cg = g;
cb = b;
}
@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
// 设置输出屏幕大小
//启用smooth shading(阴影平滑)。阴影平滑通过多边形精细的混合色彩,并对外部光进行平滑,在以后的课程中会看到他的效果。
gl.glShadeModel(GL10.GL_SMOOTH);
//设置清除屏幕时所用的颜色
gl.glClearDepthf(1.0f);
gl.glEnable(GL10.GL_DEPTH_TEST);
gl.glDepthFunc(GL10.GL_LEQUAL);
//上面三行是关于depth buffer(深度缓存)的
//OpenGL我们希望进行最好的透视修正
gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST);
}
@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {
// 设置输出屏幕大小
gl.glViewport(0, 0, width, height);
}
@Override
public void onDrawFrame(GL10 gl) {
//清除屏幕和深度缓存
gl.glClear(GL10.GL_COLOR_BUFFER_BIT|GL10.GL_DEPTH_BUFFER_BIT);
//重置当前的模型观察矩阵。
gl.glLoadIdentity();
gl.glClearColor(cr, cg, cb, 0.0f);
}
}
3 写一个类OpenGLView 继承GLSurfaceView
public class OpenGLView extends GLSurfaceView {
OpenGLRenderer mRenderer;
public OpenGLView(Context context) {
super(context);
mRenderer = new OpenGLRenderer();
setRenderer(mRenderer);
// TODO Auto-generated constructor stub
}
@Override
public boolean onTouchEvent(final MotionEvent event) {
queueEvent(new Runnable(){
@Override
public void run() {
mRenderer.setColor(event.getX()/getWidth(), event.getY()/getHeight(), 1.0f);
}
});
return super.onTouchEvent(event);
}
}
这样就OK了
相关文章推荐
- Cocos2d-x V3.2+Cocos Studio1.6 实现一个简单的uibutton点击功能
- Android简单实现一个颜色渐变的ProgressBar的方法
- 点击表格的单元格时实现变颜色,通过for循环为每个单元格添加一个onclick事件
- 简单的JS控制button颜色随点击更改的实现方法
- 【Cocos2d-x v3.2+Cocos Studio1.6】实现一个简单的uibutton点击功能
- Cocos2d-x V3.2+Cocos Studio1.6 实现一个简单的uibutton点击功能
- 【Cocos2d-x v3.2+Cocos Studio1.6】实现一个简单的uibutton点击功能
- 点击图片取该处色or颜色选择器简单实现方法
- Cocos2d-x V3.2+Cocos Studio1.6 实现一个简单的uibutton点击功能
- Android简单实现一个颜色渐变的ProgressBar
- Android上实现一个简单的天气预报APP(四) 添加按钮点击响应
- xcode简单教程,实现一个button点击事件
- Extjs 简单扩展 Component 实现点击刷新的验证码。
- MFC实现点击按钮打开一个指定的文件或者网址或者exe
- 连续点击两次退出当前程序的简单实现
- 一个简单的MVC框架的实现
- 一个简单string类的实现
- 颜色条的简单实现
- 【Android游戏开发十六】Android Gesture之【触摸屏手势识别】操作!利用触摸屏手势实现一个简单切换图片的功能!
- 用完成端口(IOCP)实现一个简单的服务器框架