Урок 173. OpenGL. Камера

Обсуждение уроков
Ответить
Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Урок 173. OpenGL. Камера

Сообщение damager82 » 27 янв 2016, 07:00

В этом уроке:
- работаем с камерой


Click here to read this article!
Последний раз редактировалось damager82 06 июн 2017, 23:10, всего редактировалось 3 раза.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

Draz1w
Сообщения: 20
Зарегистрирован: 10 окт 2015, 17:07

Re: Урок 173. OpenGL. Камера

Сообщение Draz1w » 27 янв 2016, 13:54

Плохо плохо, не разобрался с камерой нормально.
Во первых метод setLookAtM - достаточно тяжелый для каждого кадра,
потому что там куча вычислений + дважды вычисляется корень.
во вторых камера не умеет двигаться вперед и назад и помнить куда она повернута.
setLookAtM лучше использовать один раз для статичной камеры и все.

а каждый кадр стоит вычислять только компоменты камеры, зависящие от ее положения:
вот как-то так:
public float[] getViewMatrix() {
viewMatrix[12] = -(viewMatrix[0] * position[0] + viewMatrix[4]
* position[1] + viewMatrix[8] * position[2]);
viewMatrix[13] = -(viewMatrix[1] * position[0] + viewMatrix[5]
* position[1] + viewMatrix[9] * position[2]);
viewMatrix[14] = -(viewMatrix[2] * position[0] + viewMatrix[6]
* position[1] + viewMatrix[10] * position[2]);

return viewMatrix;
}
вот теория:
http://www.gamedev.ru/code/articles/openglcamera
вот по ней я делал клас камеры для android:
https://github.com/Karavanych/DraziwGLe ... amera.java

danek130995
Сообщения: 42
Зарегистрирован: 25 янв 2015, 18:57

Re: Урок 173. OpenGL. Камера

Сообщение danek130995 » 07 фев 2016, 00:21

Спасибо Вам большое! Вы объясняете так, как никто другой. Подробно, тщательно, прям ход мысли указываете - откуда и куда ей идти, с чего начинать думать. Спасибо!

MaestroVS
Сообщения: 5
Зарегистрирован: 15 фев 2016, 12:15
Откуда: Kiev

Re: Урок 173. OpenGL. Камера

Сообщение MaestroVS » 15 фев 2016, 12:21

Подскажите пожалуйста, вот здесь: http://stackoverflow.com/questions/6072 ... -opengl-es
нашел пример рисования сферы. Попробовал прорисовать сферу инициализировав в конструкторе рендерера Sphere = new Sphere(10,10) дописав в конце метода onDrawFrame строку mSphere.draw(gl);

public class Sphere {

static private FloatBuffer sphereVertex;
static private FloatBuffer sphereNormal;
static float sphere_parms[]=new float[3];

double mRaduis;
double mStep;
float mVertices[];
private static double DEG = Math.PI/180;
int mPoints;

/**
* The value of step will define the size of each facet as well as the number of facets
*
* @param radius
* @param step
*/

public Sphere( float radius, double step) {
this.mRaduis = radius;
this.mStep = step;
sphereVertex = FloatBuffer.allocate(40000);
mPoints = build();
Log.d("ALIS CHECK!!!!!!", " COUNT:" + mPoints);
}

public void draw(GL10 gl) {
gl.glFrontFace(GL10.GL_CW);
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, sphereVertex);

gl.glColor4f(1.0f, 0.0f, 0.0f, 1.0f);
gl.glDrawArrays(GL10.GL_POINTS, 0, mPoints);
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
}

private int build() {

/**
* x = p * sin(phi) * cos(theta)
* y = p * sin(phi) * sin(theta)
* z = p * cos(phi)
*/
double dTheta = mStep * DEG;
double dPhi = dTheta;
int points = 0;

for(double phi = -(Math.PI/2); phi <= Math.PI/2; phi+=dPhi) {
//for each stage calculating the slices
for(double theta = 0.0; theta <= (Math.PI * 2); theta+=dTheta) {
sphereVertex.put((float) (mRaduis * Math.sin(phi) * Math.cos(theta)) );
sphereVertex.put((float) (mRaduis * Math.sin(phi) * Math.sin(theta)) );
sphereVertex.put((float) (mRaduis * Math.cos(phi)) );
points++;

}
}
sphereVertex.position(0);
return points;
}
}

В итоге выдало ошибку:

Application maestro.firstopengl (SDK target 23) called a GL11 Pointer method with an indirect Buffer.
02-15 11:04:57.147 16844-16858/maestro.firstopengl E/AndroidRuntime﹕ FATAL EXCEPTION: GLThread 6309
java.lang.IllegalArgumentException: Must use a native order direct Buffer
at com.google.android.gles_jni.GLImpl.glVertexPointerBounds(Native Method)
at com.google.android.gles_jni.GLImpl.glVertexPointer(GLImpl.java:1122)
at maestro.firstopengl.Sphere.draw(Sphere.java:42)
at maestro.firstopengl.OpenGLRenderer3D_anim.onDrawFrame(OpenGLRenderer3D_anim.java:284)

MaestroVS
Сообщения: 5
Зарегистрирован: 15 фев 2016, 12:15
Откуда: Kiev

Re: Урок 173. OpenGL. Камера

Сообщение MaestroVS » 15 фев 2016, 12:41

damager82 писал(а):В этом уроке:

- работаем с камерой

Click here to read this article!
Было бы очень интересно также почитать уроки по рисованию сложных фигур (как то сфера, цилиндр, тор) а также по освещению ;)

Draz1w
Сообщения: 20
Зарегистрирован: 10 окт 2015, 17:07

Re: Урок 173. OpenGL. Камера

Сообщение Draz1w » 16 фев 2016, 00:38

MaestroVS писал(а): Было бы очень интересно также почитать уроки по рисованию сложных фигур (как то сфера, цилиндр, тор) а также по освещению ;)
На самом деле вы немножко не тем путем пытаетесь идти.
Сложные фигуру рисуются точно так же как треугольник, просто вы массивы данных подготавливаете в специальных 3d редакторах типа 3dmax или Blender. Вы там сделаете и тор и сферу и цилиндр и все что угодно и человека, и дом, и деревья. Просто нужно сделать выгрузку объекта, например в формате obj, распарсить его, самому или воспользоваться готовыми парсерами (я под себя переделывал вот этот парсер например https://github.com/seanrowens/oObjLoader )
А пытаться вычислять вершины процедурно, это лишний труд, вряд ли это когда-нибудь пригодиться.
А стоит сделать парсер из Blendera и Макса и у вас появляются неограниченный возможности по рисованию на openGL всего что душа пожелает :)

По работе с редактором и парсингом объектов есть очень хорошая книжка для начинающих
Prateek Mehta Learn OpenGL ES: For Mobile Game and Graphics Development
Глава 4: 3D Modeling
http://rutracker.org/forum/viewtopic.php?t=4545820
она хоть и на английском но настолько понятно там все написано что даже я со своим корявым английским все понимал :) Причем вообще книга уникальная, для новичков потому , что реально там понятно все разжевано и очень простые и понятные примеры приведены. Я уроки на русском читал ничего не понимал, а с помощью этой книги въехал в opengl :)

P.S. пока вот мои результаты если интересно кому-то
http://www.youtube.com/watch?v=2dvjGbVdrDY

Spider
Сообщения: 5
Зарегистрирован: 14 сен 2017, 16:51

Re: Урок 173. OpenGL. Камера

Сообщение Spider » 10 ноя 2017, 16:46

Приветствую.
А можно как то к данной теме прикрутить тач элемент, что бы камеру самому крутить?

Ответить