Can';Android OpenGL ES 2.0中的t绘图点
我在OpenGL es 2.0中使用了下面的着色器代码Can';Android OpenGL ES 2.0中的t绘图点,android,opengl-es,Android,Opengl Es,我在OpenGL es 2.0中使用了下面的着色器代码 final String vertexShader = "uniform mat4 u_MVPMatrix; \n" + "attribute vec4 a_Position; \n" + "void main() \n
final String vertexShader =
"uniform mat4 u_MVPMatrix; \n"
+ "attribute vec4 a_Position; \n"
+ "void main() \n"
+ "{ \n"
+ " gl_Position = u_MVPMatrix \n"
+ " * a_Position; \n"
+ " gl_PointSize = 10.0; \n"
+ "} \n";
final String fragmentShader =
"precision mediump float; \n"
+ "void main() \n"
+ "{ \n"
+ " gl_FragColor = vec4(1.0, \n"
+ " 1.0, 1.0, 1.0); \n"
+ "} \n";
@Override
public void onSurfaceChanged(GL10 glUnused, int width, int height)
{
// Set the OpenGL viewport to the same size as the surface.
GLES20.glViewport(0, 0, width, height);
// Create a new perspective projection matrix. The height will stay the same
// while the width will vary as per aspect ratio.
final float ratio = (float) width / height;
final float left = -ratio;
final float right = ratio;
final float bottom = -1.0f;
final float top = 1.0f;
final float near = 1.0f;
final float far = 10.0f;
Matrix.frustumM(mProjectionMatrix, 0, left, right, bottom, top, near, far);
}
onDrawFrame函数:
@Override
public void onDrawFrame(GL10 glUnused)
{
GLES20.glClear(GLES20.GL_DEPTH_BUFFER_BIT | GLES20.GL_COLOR_BUFFER_BIT);
Matrix.setIdentityM(mModelMatrix, 0);
//Push to the distance - note this will have no effect on a point size
Matrix.translateM(mModelMatrix, 0, 0.0f, 0.0f, -5.0f);
Matrix.multiplyMV(mMVPMatrix, 0, mViewMatrix, 0, mModelMatrix, 0);
Matrix.multiplyMV(mMVPMatrix, 0, mProjectionMatrix, 0, mMVPMatrix, 0);
GLES20.glUniformMatrix4fv(mMVPMatrixHandle, 1, false, mMVPMatrix, 0);
//Send the vertex
GLES20.glVertexAttribPointer(mPositionHandle, 3, GLES20.GL_FLOAT, false, 0, vertexBuf);
GLES20.glEnableVertexAttribArray(mPositionHandle);
//Draw the point
GLES20.glDrawArrays(GLES20.GL_POINTS, 0, 1);
}
这是我在android studio中使用的代码,只是不起作用,只有背景。
我已经设置了gl_PointSize,没有错误,似乎一切都正常。
我应该如何调试它
完整的代码在这里好吧,我使用了来自的代码,“multiplyMV”应该是“multiplyMM”,然后它就可以工作了。
“multiplyMV”使结果成为4元素列向量,因此其他3列为0。您没有glviewport()尝试它。如果在
onSurfaceChanged
中设置了它,但是代码太多,我必须删除一些mViewMatrix
在某个地方初始化了吗?顶点的坐标是多少?@RetoKoradi请参阅更新