gpt4 book ai didi

android - OpenGL-es 投影似乎不起作用

转载 作者:行者123 更新时间:2023-11-29 01:53:47 24 4
gpt4 key购买 nike

我已尝试遵循有关绘制形状并将投影应用于它们的类(class),如发现的那样 here , 但投影似乎不起作用。据我所知,我已经复制粘贴了项目中的所有代码,以下是重要的代码部分:

在我的 Renderer 类中:

@Override
public void onDrawFrame(GL10 unused) {
GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);

// Set the camera position (View matrix)
Matrix.setLookAtM(mVMatrix, 0, 0, 0, -3, 0f, 0f, 0f, 0f, 1.0f, 0.0f);

// Calculate the projection and view transformation
Matrix.multiplyMM(mMVPMatrix, 0, mProjMatrix, 0, mVMatrix, 0);

// Draw shape
mTriangle.draw(mMVPMatrix);
}

@Override
public void onSurfaceChanged(GL10 unused, int width, int height) {
GLES20.glViewport(0, 0, width, height);

float ratio = (float) width / height;
Matrix.frustumM(mProjMatrix, 0, -ratio, ratio, -1, 1, 3, 7);
}

我的 Triangle 类的 draw 方法:

public void draw(float[] mvpMatrix) {
GLES20.glUseProgram(mProgram);

mPositionHandle = GLES20.glGetAttribLocation(mProgram, "vPosition"); // get handle to vertex shader's vPosition member
GLES20.glEnableVertexAttribArray(mPositionHandle); // Enable a handle to the triangle vertices

GLES20.glVertexAttribPointer(mPositionHandle, COORDS_PER_VERTEX, GLES20.GL_FLOAT, false, vertexStride, vertexBuffer); // Prepare the triangle coordinate data

mColorHandle = GLES20.glGetUniformLocation(mProgram, "vColor"); // get handle to fragment shader's vColor member
GLES20.glUniform4fv(mColorHandle, 1, color, 0); // Set color for drawing the triangle


mMVPMatrixHandle = GLES20.glGetUniformLocation(mProgram, "uMVPMatrix"); // get handle to shape's transformation matrix
GLES20.glUniformMatrix4fv(mMVPMatrixHandle, 1, false, mvpMatrix, 0); // Apply the projection and view transformation

GLES20.glDrawArrays(GLES20.GL_TRIANGLES, 0, vertexCount); // Draw the triangle

GLES20.glDisableVertexAttribArray(mPositionHandle); // Disable vertex array
}

三角形仍在拉伸(stretch)。我做错了什么?

最佳答案

您是否尝试在 onSurfaceChanged 中进行调试?这些行会发生什么?特别是:

    • 传递的值 widthheight 是什么?
    • float ratio = (float) width/height; 计算哪个值?
    • 调用 Matrix.frustumM(mProjMatrix, 0, -ratio, ratio, -1, 1, 3, 7);?
  1. class Triangle 中的 private final String fragmentShaderCode 是什么样子的?作为 "gl_Position = uMVPMatrix * vPosition;"行中的乘法顺序+ 很重要。

您提供的代码看起来很不错,这里是个难题。

关于android - OpenGL-es 投影似乎不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16518549/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com