के साथ परिणाम प्राप्त नहीं हो रहा है। मैं एक ऐसा एप्लिकेशन बनाने की कोशिश कर रहा हूं जो ओपनजीएल का उपयोग करके टेक्स्ट दिखाएगा। निर्दिष्ट ऑब्जेक्ट को किसी विशिष्ट स्थिति में स्थानांतरित करने के लिए Matrix.translateM
का उपयोग करने का प्रयास करते समय मुझे अप्रत्याशित व्यवहार मिलता है। अन्य सभी परिवर्तन मैट्रिस काम करते हैं क्योंकि मैं उन्हें उम्मीद करता हूं। एंड्रॉइड ओपनजीएल ईएस 2.0: मैट्रिक्स.ट्रैस्लेट एम
इस अनुवाद के बिना छवि है::
यह जब मैं Matrix.translateM(model_matrix, 0, -1.0f, 0, 0)
फोन मैं क्या मिलता है
यह मेरा रेंडरर कोड है।
@Override
public void onSurfaceCreated(GL10 unused, EGLConfig config) {
GLES20.glClearColor(0.5f, 0.5f, 0.5f, 1.0f);
GLES20.glDisable(GLES20.GL_DEPTH_TEST);
GLES20.glEnable(GLES20.GL_BLEND);
GLES20.glBlendFunc(GLES20.GL_SRC_ALPHA, GLES20.GL_ONE_MINUS_SRC_ALPHA);
// create programs
simple_texture = new SimpleTexture();
// create shapes
square = new Square();
// create debug text handlers
text_fps = new Text(this.font, this.text_scale);
text_fps.setSize(50);
text_fps.setText("Test\nLonger line");
// set camera position
final float eyeX = 0.0f;
final float eyeY = 0.0f;
final float eyeZ = -3.0f;
final float lookX = 0.0f;
final float lookY = 0.0f;
final float lookZ = 0.0f;
final float upX = 0.0f;
final float upY = 1.0f;
final float upZ = 0.0f;
Matrix.setLookAtM(view_matrix, 0, eyeX, eyeY, eyeZ, lookX, lookY, lookZ, upX, upY, upZ);
}
@Override
public void onSurfaceChanged(GL10 unused, int width, int height) {
GLES20.glViewport(0, 0, width, height);
// set projection matrix
float ratio = (float) width/height;
Matrix.orthoM(projection_matrix, 0, -ratio, ratio, -1, 1, 3, 7);
setScreenRatio(ratio);
setScreenHeight(height);
}
@Override
public void onDrawFrame(GL10 unused) {
GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
// calculate projection and view transformation
Matrix.multiplyMM(vp_matrix, 0, projection_matrix, 0, view_matrix, 0);
// if we are connected to debugger draw statistics
drawStatistics(vp_matrix);
}
और यह टेक्स्ट के लिए मेरा draw
कोड है।
// use predefined program
GLES20.glUseProgram(program);
// get attribute positions
attr_matrix = GLES20.glGetUniformLocation(program, "u_Matrix");
attr_position = GLES20.glGetAttribLocation(program, "a_Position");
attr_texture_position = GLES20.glGetAttribLocation(program, "a_TexturePosition");
attr_texture = GLES20.glGetUniformLocation(program, "u_Texture");
// set program parameters
GLES20.glEnableVertexAttribArray(attr_position);
GLES20.glVertexAttribPointer(attr_position, 2, GLES20.GL_FLOAT, false, 2 * 4, square_buffer);
// set texture parameters
GLES20.glEnableVertexAttribArray(attr_texture_position);
GLES20.glVertexAttribPointer(attr_texture_position, 2, GLES20.GL_FLOAT, false, 2 * 4, texture_buffer);
// set matrix
float[] result = new float[16];
float ratio = (float) texture_height/texture_width;
float screen_scale = (float) texture_height/PageRenderer.getScreenHeight();
Matrix.setIdentityM(model_matrix, 0);
Matrix.translateM(model_matrix, 0, -1, 0, 0);
Matrix.scaleM(model_matrix, 0, screen_scale, screen_scale * ratio, screen_scale);
Matrix.setIdentityM(result, 0);
Matrix.multiplyMM(result, 0, matrix, 0, model_matrix, 0);
GLES20.glUniformMatrix4fv(attr_matrix, 1, false, result, 0);
// assign texture
GLES20.glActiveTexture(GLES20.GL_TEXTURE0);
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, index);
GLES20.glUniform1i(attr_texture, 0);
// perform drawing
GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP, 0, 4);
// disable vertex array
GLES20.glDisableVertexAttribArray(attr_position);
GLES20.glDisableVertexAttribArray(attr_texture_position);
Shaders:
int vertex_shader = PageRenderer.loadShader(
GLES20.GL_VERTEX_SHADER,
"uniform mat4 u_Matrix;" +
"attribute vec4 a_Position;" +
"attribute vec2 a_TexturePosition;" +
"varying vec2 v_TexturePosition;" +
"void main() {" +
" gl_Position = a_Position * u_Matrix;" +
" v_TexturePosition = a_TexturePosition;" +
"}"
);
int fragment_shader = PageRenderer.loadShader(
GLES20.GL_FRAGMENT_SHADER,
"precision mediump float;" +
"varying vec2 v_TexturePosition;" +
"uniform sampler2D u_Texture;" +
"void main() {" +
" gl_FragColor = texture2D(u_Texture, v_TexturePosition);" +
"}"
);
स्केलिंग और घूर्णन काम के रूप में की उम्मीद है, लेकिन मैं समझ नहीं क्यों अनुवाद नहीं करता है। कृपया ध्यान दें कि मैंने हाल ही में ओपनजीएल का उपयोग नहीं किया है।
मैं translateM
के लिए बाईं ओर पाठ को स्थानांतरित करने की उम्मीद कर रहा था, इसे 'घुमाएं' नहीं।
यह कैसा दिखाई माना जाता है? आपने क्या उम्मीद किया? इसके अलावा, क्या आप अपने शेडर्स दिखा सकते हैं। – Tim
@ टिम सुनिश्चित करें। विवरण की कमी के लिए खेद है। मैंने शेडर कोड और छवि को 'translateM' के बिना दिखने के तरीके को जोड़ा है। मैं छवि को बाईं ओर ले जाने के लिए 'translateM' की अपेक्षा कर रहा था। – MeanEYE
आह, क्षमा करें। अब समस्या मिली है कि मेरे पास शेडर कोड पर दूसरा नजरिया था। :) धन्यवाद। – MeanEYE