郁闷的中交兵 2017-06-28 04:19 采纳率: 100%
浏览 1318
已采纳

opengl android,为什么我的三角形不显示都是照着写的我的render哪里写错了吗

package com.cheerchip.opengl5;

import android.opengl.GLES20;
import android.opengl.GLSurfaceView;
import android.opengl.Matrix;

import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.FloatBuffer;

import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;

/**

  • Created by noname on 2017/6/28. */

public class GLRender implements GLSurfaceView.Renderer {
//顶点颜色
private final String vertexShaderCode =
"attribute vec4 vPosition;" +
"void main() {" +
" gl_Position = vPosition;" +
"}";
//片元颜色
private final String fragmentShaderCode =
"precision mediump float;" +
"uniform vec4 vColor;" +
"void main() {" +
" gl_FragColor = vColor;" +
"}";
private int programs;
//三角形顶点
private float[] vertexes = new float[]{
1f, 0f, 0f,
0f, 1f, 0f,
-1f, 0f, 0f

};
private FloatBuffer floatBuffer;

@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
    GLES20.glClearColor(0.5f,0.5f,0.5f,1.0f);//设置背景色灰色
    init();
    //生成shader调色板
    //顶点和片元一般两种

    int verextype = GLES20.glCreateShader(GLES20.GL_VERTEX_SHADER);
    GLES20.glShaderSource(verextype, vertexShaderCode);
    GLES20.glCompileShader(verextype);
    int fragmenttype = GLES20.glCreateShader(GLES20.GL_FRAGMENT_SHADER);
    GLES20.glShaderSource(fragmenttype, fragmentShaderCode);
    GLES20.glCompileShader(fragmenttype);

    // GLES20.
    programs = GLES20.glCreateProgram();
    //连接到调色板
    GLES20.glAttachShader(programs, verextype);
    GLES20.glAttachShader(programs, fragmenttype);
    //连接programs
    GLES20.glLinkProgram(programs);
}

@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {
    GLES20.glViewport(0,0,width,height);
    float ratio = (float) width / height;

    // create a projection matrix from device screen geometry
    //Matrix.frustumM(mProjMatrix, 0, -ratio, ratio, -1, 1, 3, 7);
}

@Override
public void onDrawFrame(GL10 gl) {

    GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT|GLES20.GL_DEPTH_BUFFER_BIT);
    GLES20.glUseProgram(programs);
    //获取顶点着色器的vPosition成员句柄
    int mPositionHandle = GLES20.glGetAttribLocation(programs, "vPositon");
    //启用三角形顶点的句柄
    GLES20.glEnableVertexAttribArray(mPositionHandle);
    //准备三角形数据3*4顶点偏移量
    GLES20.glVertexAttribPointer(mPositionHandle,3,GLES20.GL_FLOAT,false,3*4,floatBuffer);
    int uniformhandle= GLES20.glGetUniformLocation(programs,"vColor");
    //绘制颜色
    GLES20.glUniform4fv(uniformhandle,1,color,0);
    //h绘制图像
    GLES20.glDrawArrays(GLES20.GL_TRIANGLES,0,3);
    GLES20.glDisableVertexAttribArray(mPositionHandle);
}

//设置颜色,依次为红绿蓝和透明通道
float color[] = { 1.0f, 1.0f, 1.0f, 1.0f };
// 准备数据
private void init(){

    ByteBuffer buffer=ByteBuffer.allocateDirect(vertexes.length*4);//每个数4个字节
    buffer.order(ByteOrder.nativeOrder());
    floatBuffer = buffer.asFloatBuffer();
    floatBuffer.put(vertexes);
    floatBuffer.position(0);
}

}

  • 写回答

1条回答 默认 最新

  • 郁闷的中交兵 2017-06-28 04:52
    关注

    vPosition 少加了一个i麻痹看了我半天

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 file converter 转换格式失败 报错 Error marking filters as finished,如何解决?
  • ¥15 ubuntu系统下挂载磁盘上执行./提示权限不够
  • ¥15 Arcgis相交分析无法绘制一个或多个图形
  • ¥15 关于#r语言#的问题:差异分析前数据准备,报错Error in data[, sampleName1] : subscript out of bounds请问怎么解决呀以下是全部代码:
  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型