【发布时间】:2014-02-14 00:51:30
【问题描述】:
我开始学习 OpenGL ES 2.0 for android。就我的理解而言,我只能渲染那些 x 和 y 坐标在 -1 和 1 之间标准化的值。但是突然间我的代码表现不同,渲染的值在 -4 到 4 的范围内。我的理解正确还是你认为我的代码有问题?
透视矩阵的MatrixHelper类:
public class MatrixHelper {
public static void perspectiveM(float[] m, float yFovInDegrees, float aspect,
float n, float f) {
final float angleInRadians = (float) (yFovInDegrees * Math.PI / 180.0);
final float a = (float) (1.0 / Math.tan(angleInRadians / 2.0));
m[0] = a / aspect;
m[1] = 0f;
m[2] = 0f;
m[3] = 0f;
m[4] = 0f;
m[5] = a;
m[6] = 0f;
m[7] = 0f;
m[8] = 0f;
m[9] = 0f;
m[10] = -((f + n) / (f - n));
m[11] = -1f;
m[12] = 0f;
m[13] = 0f;
m[14] = -((2f * f * n) / (f - n));
m[15] = 0f;
}
}
这是我画线的课:
public class Well {
private static final int POSITION_COMPONENT_COUNT = 2;
private static final int COLOR_COMPONENT_COUNT = 3;
private static final int STRIDE =
(POSITION_COMPONENT_COUNT + COLOR_COMPONENT_COUNT) * BYTES_PER_FLOAT;
private static final float[] VERTEX_DATA = {
2.57088082911189f,2.70649737162497f, 1f, 0f, 0f,
2.57088082911189f,2.70649737162497f, 1f, 0f, 0f,
};
private final VertexArray vertexArray;
public Well() {
vertexArray = new VertexArray(VERTEX_DATA);
}
public void bindData(ColorShaderProgram colorProgram) {
vertexArray.setVertexAttribPointer(0, colorProgram.getPositionAttributeLocation(), POSITION_COMPONENT_COUNT, STRIDE);
vertexArray.setVertexAttribPointer(POSITION_COMPONENT_COUNT, colorProgram.getColorAttributeLocation(), COLOR_COMPONENT_COUNT, STRIDE);
}
public void draw() {
glDrawArrays(GL_LINE_STRIP, 0, 2);
}
}
【问题讨论】:
-
默认视口覆盖两个轴的坐标范围 -1 到 +1。但不一定要 - 您需要定义投影矩阵和可能的相机变换矩阵,以正确地将渲染对象映射到屏幕的几何形状:developer.android.com/guide/topics/graphics/opengl.html 请澄清您的具体问题并显示您的相关代码.
标签: android opengl-es opengl-es-2.0