问题描述
我目前正在学习适用于Android的Opengl ES。
我读过许多教程,其中说的坐标系是从-1f -1f(左下角)到1f 1f右上角。
我能找出的那么多。但是我目前正在尝试的问题是尝试调整三角形大小时:窗口似乎正在根据极值调整自身大小。如果这是我尝试绘制的唯一三角形,则在两个不同的实例上,
0f,0f,
0f,0.01f,
0.01f,0.01f
三角形与
完全相同
0f,0f
0f,1f
1f,1f
老实说我在这里迷路了。有我的代码:
int vertexShaderID,fragmentShaderID;
int[] result = new int[1];
_vertexSize = 2;
_verticeCount = 3;
_context = context;
vertexShaderID = GLES20.glCreateShader(GLES20.GL_VERTEX_SHADER);
fragmentShaderID = GLES20.glCreateShader(GLES20.GL_FRAGMENT_SHADER);
GLES20.glShaderSource(vertexShaderID,_context.getString(R.string.vertexShader));
GLES20.glShaderSource(fragmentShaderID,_context.getString(R.string.fragmentShader));
_programID = GLES20.glCreateProgram();
GLES20.glCompileShader(vertexShaderID);
GLES20.glGetShaderiv(vertexShaderID,GLES20.GL_COMPILE_STATUS,result,0);
GLES20.glCompileShader(fragmentShaderID);
GLES20.glGetShaderiv(fragmentShaderID,0);
GLES20.glAttachShader(_programID,vertexShaderID);
GLES20.glAttachShader(_programID,fragmentShaderID);
GLES20.glLinkProgram(_programID);
GLES20.glGetProgramiv(_programID,GLES20.GL_LINK_STATUS,0);
GLES20.glValidateProgram(_programID);
GLES20.glGenBuffers(1,0);
vertexBufferID = result[0];
GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER,vertexBufferID);
FloatBuffer coordBuffer = FloatBuffer.allocate(_vertexSize * _verticeCount);
coordBuffer.put(coords);
coordBuffer.position(0);
Log.d("count","" + SIZEOF_FLOAT * _verticeCount * _vertexSize);
GLES20.glBufferData(GLES20.GL_ARRAY_BUFFER,SIZEOF_FLOAT * _verticeCount * _vertexSize,coordBuffer,GLES20.GL_DYNAMIC_DRAW);
coordBuffer.clear();
GLES20.glEnabLevertexAttribArray(0);
GLES20.glVertexAttribPointer(0,2,GLES20.GL_FLOAT,true,2 * SIZEOF_FLOAT,0);
Log.d("version",GLES20.glGetString(GLES20.GL_VERSION));
我也试图替换
GLES20.glVertexAttribPointer(0,0);
的{{1}},
预先感谢您的帮助
P.-S:有我的着色器GLES20.glVertexAttribPointer(0,false,0);
解决方法
发现我犯的错误:我的着色器错误。 gl_position的depth参数设置为0,所以我想无论如何它都会在屏幕之外。如果gl_Position.xy = inPosition;
,则GLES20.glVertexAttribPointer(0,2,GLES20.GL_FLOAT,false,2 * SIZEOF_FLOAT,0);
可以正常工作。如果第4个参数为true,它将对其进行重新缩放。