如何解决如何在不使用glViewPort的情况下在opengl上具有固定坐标系
我目前正在学习适用于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,它将对其进行重新缩放。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。