Google Android - это несложно

Добро пожаловать на форум сайта startandroid.ru
Текущее время: 15 дек 2017, 15:06

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: Урок 173. OpenGL. Камера
СообщениеДобавлено: 27 янв 2016, 07:00 
Администратор
Аватар пользователя

Зарегистрирован: 07 янв 2012, 11:32
Сообщений: 1359
Благодарил (а): 0 раз.
Поблагодарили: 72 раз.

В этом уроке:


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




Click here to read this article!

_________________
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение


Последний раз редактировалось damager82 06 июн 2017, 23:10, всего редактировалось 3 раз(а).

Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Урок 173. OpenGL. Камера
СообщениеДобавлено: 27 янв 2016, 13:54 

Зарегистрирован: 10 окт 2015, 17:07
Сообщений: 20
Благодарил (а): 0 раз.
Поблагодарили: 4 раз.
Плохо плохо, не разобрался с камерой нормально.
Во первых метод 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


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Урок 173. OpenGL. Камера
СообщениеДобавлено: 07 фев 2016, 00:21 

Зарегистрирован: 25 янв 2015, 18:57
Сообщений: 38
Благодарил (а): 9 раз.
Поблагодарили: 2 раз.
Спасибо Вам большое! Вы объясняете так, как никто другой. Подробно, тщательно, прям ход мысли указываете - откуда и куда ей идти, с чего начинать думать. Спасибо!


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Урок 173. OpenGL. Камера
СообщениеДобавлено: 15 фев 2016, 12:21 

Зарегистрирован: 15 фев 2016, 12:15
Сообщений: 3
Откуда: Kiev
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.
Подскажите пожалуйста, вот здесь: 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)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Урок 173. OpenGL. Камера
СообщениеДобавлено: 15 фев 2016, 12:41 

Зарегистрирован: 15 фев 2016, 12:15
Сообщений: 3
Откуда: Kiev
Благодарил (а): 2 раз.
Поблагодарили: 0 раз.
damager82 писал(а):
В этом уроке:

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

Click here to read this article!


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


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Урок 173. OpenGL. Камера
СообщениеДобавлено: 16 фев 2016, 00:38 

Зарегистрирован: 10 окт 2015, 17:07
Сообщений: 20
Благодарил (а): 0 раз.
Поблагодарили: 4 раз.
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


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Урок 173. OpenGL. Камера
СообщениеДобавлено: 10 ноя 2017, 16:46 

Зарегистрирован: 14 сен 2017, 16:51
Сообщений: 5
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Приветствую.
А можно как то к данной теме прикрутить тач элемент, что бы камеру самому крутить?


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Часовой пояс: UTC + 3 часа


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB