Урок 169. OpenGL. Шейдеры

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

Урок 169. OpenGL. Шейдеры

Сообщение damager82 » 27 окт 2015, 07:00

В этом уроке:
- создаем шейдеры
- рисуем треугольник
 


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

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

Re: Урок 169. OpenGL. Шейдеры

Сообщение Draz1w » 06 ноя 2015, 21:55

Очень много инфы получилось для одного урока, но меньше уже никак было не разбить.
На самом деле можно было проще.
Вот самый простой класс рендера без использования буферов и показывающий основы работы Шейдеров:

Код: Выделить всё

public class GLES20Renderer implements Renderer {
	private int _pointProgram;

	public void onSurfaceCreated(GL10 gl, EGLConfig config) {
		GLES20.glClearColor(0.0f, 0.0f, 0.0f, 1);
	}

	public void onSurfaceChanged(GL10 gl, int width, int height) {
		GLES20.glViewport(0, 0, width, height);

		int pointVertexShader = loadShader(GLES20.GL_VERTEX_SHADER, _pointVertexShaderCode);
		int pointFragmentShader = loadShader(GLES20.GL_FRAGMENT_SHADER, _pointFragmentShaderCode);
		_pointProgram = GLES20.glCreateProgram();
		GLES20.glAttachShader(_pointProgram, pointVertexShader);
		GLES20.glAttachShader(_pointProgram, pointFragmentShader);
		GLES20.glLinkProgram(_pointProgram);
	}

	public void onDrawFrame(GL10 gl) {
		GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT | GLES20.GL_DEPTH_BUFFER_BIT);
		GLES20.glUseProgram(_pointProgram);
	    GLES20.glDrawArrays(GLES20.GL_POINTS, 0, 1);
	}

	private int loadShader(int type, String source)  {
		int shader = GLES20.glCreateShader(type);
		GLES20.glShaderSource(shader, source);
		GLES20.glCompileShader(shader);
		return shader;
	}

	private final String _pointVertexShaderCode = 
			"void main() {							\n"
		+	" gl_PointSize = 15.0;					\n"
		+	" gl_Position = vec4(0.0,0.0,0.0,1);	\n"
		+	"}										\n";

	private final String _pointFragmentShaderCode = 
			"void main() {							\n"
		+	" gl_FragColor = vec4(1.0,1.0,1.0,1);	\n"
		+	"}										\n";

}
тут все рисуется только в шейдере и позиция и цвет заданы внутри самих шейдеров и поэтому листинг значительно проще для понимания основ, а подключение к шейдерам буферов вершин и цвета я бы советовал сделать уже следующим уроком. Я когда сам начинал , пока на этот пример не наткнулся в книге Mehta Prateek. - Learn OpenGL ES: For Mobile Game and Graphics Development (есть на рутрекере), вообще с трудом понимал что в рендере происходит, а потом последовательно с таких вот азов постепенно усложняя разбирал и пошло.
Там кстати неплохо описано как создавать простые модели в Blender и выгружать их в openGL и простое текстурирование. Я больше нигде не видел нормального описания.

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

Re: Урок 169. OpenGL. Шейдеры

Сообщение danek130995 » 09 дек 2015, 11:37

Спасибо огромное!! Вы так стараетесь понятно всё изложить, что этому нет цены! Спасибо!

chego
Сообщения: 3
Зарегистрирован: 18 фев 2017, 04:02

Re: Урок 169. OpenGL. Шейдеры

Сообщение chego » 18 фев 2017, 04:18

хорошие уроки спасибо вам за труды, с моей первой игры обязательно Баблагадорю Вас.

- подскажите пожалуйста как запустить скачанный у вас проект? использую последнюю версия AS. при запуске выдает ошибку Error:(1, 0) Plugin with id 'com.android.application' not found.
<a href="openFile:E:\Proj\game\Android\lesson175_texture\build.gradle">Open File</a>
читал что надо гдето чтото подключить чтобы проекты открывались но пока разобраться не получается.
Приходится создавать свой проект и перетаскивать текста из вашего.


Ответить