Pokaż wiadomości

Ta sekcja pozwala Ci zobaczyć wszystkie wiadomości wysłane przez tego użytkownika. Zwróć uwagę, że możesz widzieć tylko wiadomości wysłane w działach do których masz aktualnie dostęp.


Wiadomości - Kyroaku

Strony: 1 ... 12 13 14 15 [16]
226
Projekty rozpoczęte / Odp: PURB
« dnia: Luty 25, 2014, 00:12:17 »
Po samej grafice i opisie stwierdzam, ze mi się podoba... Chociaż normalnie w tego typu gry nie gram, te wyprobuje.

227
Szkółka / Odp: Android OpenGL 2.0
« dnia: Luty 25, 2014, 00:00:25 »
Wiem juz, ze problem leży w macierzy matModel[16], ale wciąż nie wiem dlaczego.
Poprawilem oczywiście błędy, które zauwzyles.

228
Szkółka / Android OpenGL 2.0
« dnia: Luty 24, 2014, 16:12:11 »
Witam,
Pisze pod androida w OpenGL 2.0 i mam pewien problem.
Mam 2 macierze, które sa odpowiedzialne za przekształcenia wierzchołków:
matModel[16] oraz matProjection[16]
Do ustawiania tych macierzy uzywam klasy Matrix.
Przekazuje je do shadera z każdym wywołaniem metody "rysujacej" model.
Generalnie wszystko wydaje się być dobrze, dopóki nie obracam scena. Mam wrażenie, ze źle jest ustawiona macierz projekcji, ale jeszcze nie rozumiem dlaczego.
public void onSurfaceChanged(GL10 p1, int w, int h)
{
GLES20.glViewport(0, 0, w, h);
float ratio = (float)w/(float)h;
ss.setFrustum(-1.0f*ratio, 1.0f*ratio, -1.0f, 1.0f, 1.0f, 1000.0f);
//ss.setPerspective(45.0f, ratio, 1.0f, 1000.0f);
}
public void onDrawFrame(GL10 p1)
{
GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT | GLES20.GL_DEPTH_BUFFER_BIT);

objQuad.identity();
//objQuad.translate(0.0f, 0.0f, -2.0f);
objQuad.rotate(rot.y, 0.0f, 1.0f, 0.0f);
objQuad.rotate(rot.x, 1.0f, 0.0f, 0.0f);

objQuad.rotate(0.0f, 0.0f, 0.0f, 1.0f);
objQuad.draw(shader);

objQuad.rotate(90.0f, 0.0f, 0.0f, 1.0f);
objQuad.draw(shader);

objQuad.rotate(90.0f, 0.0f, 0.0f, 1.0f);
objQuad.draw(shader);

objQuad.rotate(90.0f, 0.0f, 0.0f, 1.0f);
objQuad.draw(shader);
}
Metoda rotate () tak, jak inne metody operujące na macierzach, wygląda tak:
public void rotate(float a, float x, float y, float z) {
float Matt[] = new float[16];
Matrix.setIdentityM(matT, 0);
Matrix.rotateM(matT, 0, a, x, y, z);
Matrix.multiplyMM(matModel, 0, matT, 0, matModel, 0);
}
uniform mat4 u_ModelMatrix;
uniform mat4 u_ViewMatrix;
uniform mat4 u_ProjectionMatrix;
uniform mat4 u_mvpMatrix;

attribute vec4 a_Vertex;
attribute vec3 a_Normal;
attribute vec2 a_Texcoord;
attribute vec4 a_Color;

varying vec4 v_Vertex;

void main()
{
v_Vertex = a_Vertex;
gl_Position = a_Vertex * u_mvpMatrix;
}
Najbardziej dziwi mnie to, ze jest różnica miedzy zapisem:
gl_Position = u_mvpMatrix * a_Vertex;A
gl_Position = a_Vertex * u_mvpMatrix;W pierwszym przypadku wszystko wygląda w ogóle inaczej, niż powinno. W drugim zas wygląda dobrze, ale tylko przy nieruchomej scenie.
ObjQuad to zwykły prostokąt na płaszczyźnie XZ.
Z gory dziękuje za każda odpowiedz,

Strony: 1 ... 12 13 14 15 [16]