急~啊!opengl 灯光 法线??? 没加Fragment Shader? 看看你的脚本渲染是怎么写的,不知道你的错误在哪。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Fragment Shader?是什么?本人菜鸟一只,看不懂请说详细点谢谢!少设置什么请指点一下。 下面是渲染代码 private float[] lightAmbient = {0.5f, 0.5f, 0.5f, 1.0f}; private float[] lightDiffuse = {1.0f, 1.0f, 0.0f, 1.0f}; private float[] specular = { 0.0f, 0.0f, 0.0f, 1.0f }; private float[] lightPosition = {0.0f, 0.0f, 0.0f, 1.0f};@Override public void onSurfaceCreated(GL10 gl, EGLConfig config) { ByteBuffer byteBuf = ByteBuffer.allocateDirect(lightAmbient.length * 4); byteBuf.order(ByteOrder.nativeOrder()); lightAmbientBuffer = byteBuf.asFloatBuffer(); lightAmbientBuffer.put(lightAmbient); lightAmbientBuffer.position(0); byteBuf = ByteBuffer.allocateDirect(lightDiffuse.length * 4); byteBuf.order(ByteOrder.nativeOrder()); lightDiffuseBuffer = byteBuf.asFloatBuffer(); lightDiffuseBuffer.put(lightDiffuse); lightDiffuseBuffer.position(0); byteBuf = ByteBuffer.allocateDirect(lightPosition.length * 4); byteBuf.order(ByteOrder.nativeOrder()); lightPositionBuffer = byteBuf.asFloatBuffer(); lightPositionBuffer.put(lightPosition); lightPositionBuffer.position(0); byteBuf = ByteBuffer.allocateDirect(specular.length * 4); byteBuf.order(ByteOrder.nativeOrder()); specularBuffer = byteBuf.asFloatBuffer(); specularBuffer.put(specular); specularBuffer.position(0); gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_AMBIENT, lightAmbientBuffer); gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_DIFFUSE, lightDiffuseBuffer); gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_SPECULAR, specularBuffer); //设置灯光位置 gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_POSITION, lightPositionBuffer); gl.glEnable(GL10.GL_LIGHT0);//启用灯光0 // 着色平滑 gl.glShadeModel(GL10.GL_SMOOTH); // R, G, B, A gl.glClearColor(0.0f, 0.0f, 0.0f, 1.0f); // 设置深度缓存 gl.glClearDepthf(1.0f); //启用深度测试 gl.glEnable(GL10.GL_DEPTH_TEST); // 深度测试类型 gl.glDepthFunc(GL10.GL_LEQUAL); //剔除背面 gl.glEnable(GL10.GL_CULL_FACE); gl.glCullFace(GL10.GL_BACK); // 修正透视 gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST); // 开启颜色渲染功能. gl.glEnableClientState(GL10.GL_COLOR_ARRAY); //启用法线 }@Override public void onSurfaceChanged(GL10 gl, int width, int height) { gl.glViewport(0, 0, width, height); gl.glMatrixMode(GL10.GL_PROJECTION); gl.glLoadIdentity(); float ratio = (float) width / height; gl.glFrustumf(-ratio, ratio, -1, 1, 1, 10);// 设置视口的大小 gl.glMatrixMode(GL10.GL_MODELVIEW); gl.glLoadIdentity(); }@Override public void onDrawFrame(GL10 gl) { gl.glClear(GL10.GL_COLOR_BUFFER_BIT|GL10.GL_DEPTH_BUFFER_BIT); gl.glEnable(GL10.GL_LIGHTING); gl.glLoadIdentity(); draw(gl); gl.glLoadIdentity(); }private void draw(GL10 gl){ gl.glTranslatef(-0.5f, 0.0f, -6.0f); gl.glScalef(0.8f, 0.8f, 0.8f); gl.glRotatef(45, 1f, 0f, 0f); gl.glRotatef(xAngle, 0f, 1f, 0f); gl.glColor4f(1.0f,1.0f ,0.0f, 1.0f); //顶点传给opengl gl.glVertexPointer(3, GL10.GL_FLOAT, 0, objvBuffer); // 启用顶点数组 gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); //启用法线 gl.glEnableClientState(GL10.GL_NORMAL_ARRAY); gl.glNormalPointer(GL10.GL_FLOAT, 0, NormalBuffer); //NormalBuffer换成上面的objvBuffer竟然好多了 gl.glDrawElements(GL10.GL_TRIANGLES ,BufferUtil.objFtxt.length, GL10.GL_UNSIGNED_SHORT, objFBuffer); gl.glDisableClientState(GL10.GL_NORMAL_ARRAY); } 求助:请教android开发的主流软件 android camera开发Method called after release()问题 java中,按要求输出以下数字,在线等 好吃的Android 4.0 SDK下载!更新eclipse的adt插件 android在相对布局中新添加Button的属性设置问题 屏幕切换旋转事件问题,为何Configuration等于ORIENTATION_PORTRAIT才响应 如何用代码导出已经安装的apk Android1.5 验证XML内容 求教各位~~~ 初学者请问碎片问题 判断电子罗盘是否校准 程序出现“很抱歉,XX已停止运行”
private float[] lightAmbient = {0.5f, 0.5f, 0.5f, 1.0f};
private float[] lightDiffuse = {1.0f, 1.0f, 0.0f, 1.0f};
private float[] specular = { 0.0f, 0.0f, 0.0f, 1.0f };
private float[] lightPosition = {0.0f, 0.0f, 0.0f, 1.0f};
@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
ByteBuffer byteBuf = ByteBuffer.allocateDirect(lightAmbient.length * 4);
byteBuf.order(ByteOrder.nativeOrder());
lightAmbientBuffer = byteBuf.asFloatBuffer();
lightAmbientBuffer.put(lightAmbient);
lightAmbientBuffer.position(0); byteBuf = ByteBuffer.allocateDirect(lightDiffuse.length * 4);
byteBuf.order(ByteOrder.nativeOrder());
lightDiffuseBuffer = byteBuf.asFloatBuffer();
lightDiffuseBuffer.put(lightDiffuse);
lightDiffuseBuffer.position(0); byteBuf = ByteBuffer.allocateDirect(lightPosition.length * 4);
byteBuf.order(ByteOrder.nativeOrder());
lightPositionBuffer = byteBuf.asFloatBuffer();
lightPositionBuffer.put(lightPosition);
lightPositionBuffer.position(0); byteBuf = ByteBuffer.allocateDirect(specular.length * 4);
byteBuf.order(ByteOrder.nativeOrder());
specularBuffer = byteBuf.asFloatBuffer();
specularBuffer.put(specular);
specularBuffer.position(0); gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_AMBIENT, lightAmbientBuffer);
gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_DIFFUSE, lightDiffuseBuffer);
gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_SPECULAR, specularBuffer);
//设置灯光位置
gl.glLightfv(GL10.GL_LIGHT0, GL10.GL_POSITION, lightPositionBuffer); gl.glEnable(GL10.GL_LIGHT0);//启用灯光0
// 着色平滑
gl.glShadeModel(GL10.GL_SMOOTH);
// R, G, B, A
gl.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
// 设置深度缓存
gl.glClearDepthf(1.0f);
//启用深度测试
gl.glEnable(GL10.GL_DEPTH_TEST);
// 深度测试类型
gl.glDepthFunc(GL10.GL_LEQUAL);
//剔除背面
gl.glEnable(GL10.GL_CULL_FACE);
gl.glCullFace(GL10.GL_BACK);
// 修正透视
gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST); // 开启颜色渲染功能.
gl.glEnableClientState(GL10.GL_COLOR_ARRAY);
//启用法线
}
@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {
gl.glViewport(0, 0, width, height);
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
float ratio = (float) width / height;
gl.glFrustumf(-ratio, ratio, -1, 1, 1, 10);// 设置视口的大小
gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();
}
@Override
public void onDrawFrame(GL10 gl) { gl.glClear(GL10.GL_COLOR_BUFFER_BIT|GL10.GL_DEPTH_BUFFER_BIT); gl.glEnable(GL10.GL_LIGHTING);
gl.glLoadIdentity();
draw(gl); gl.glLoadIdentity();
}
private void draw(GL10 gl){ gl.glTranslatef(-0.5f, 0.0f, -6.0f);
gl.glScalef(0.8f, 0.8f, 0.8f);
gl.glRotatef(45, 1f, 0f, 0f);
gl.glRotatef(xAngle, 0f, 1f, 0f);
gl.glColor4f(1.0f,1.0f ,0.0f, 1.0f); //顶点传给opengl
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, objvBuffer);
// 启用顶点数组
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
//启用法线
gl.glEnableClientState(GL10.GL_NORMAL_ARRAY);
gl.glNormalPointer(GL10.GL_FLOAT, 0, NormalBuffer); //NormalBuffer换成上面的objvBuffer竟然好多了 gl.glDrawElements(GL10.GL_TRIANGLES ,BufferUtil.objFtxt.length, GL10.GL_UNSIGNED_SHORT, objFBuffer); gl.glDisableClientState(GL10.GL_NORMAL_ARRAY);
}