#3 Re: Вопросы и ответы » Проблема с шейдером » 2020-02-03 16:48:23

Работаю над редактором для 3д игры. Но сейчас забросил, так как пишу свой двиг с нуля на OpenGL

#4 Re: Вопросы и ответы » Проблема с шейдером » 2020-01-15 20:34:33

Спасибо за ответ. Но текстура почему то не отображается. Поверхность просто белого цвета

#5 Вопросы и ответы » Проблема с шейдером » 2020-01-12 14:41:49

BANEBYTE
Ответов: 7

Попытался написать шейдер освещения на GLSL. Сделал все как по инструкции, но почему-то на выходе получаю сплошной черный цвет.
Вот код

Вертексный шейдер

varying vec3 normal;
varying vec3 position;

void main() {
	normal = gl_NormalMatrix * gl_Normal;
	position = (gl_ModelViewMatrix * gl_Vertex).xyz;
	gl_Position = ftransform();
}

Пиксельный шейдер

varying vec3 normal;
varying vec3 position;

vec3 light_pos;

void main() {
	light_pos = vec3(0.0, 10.0, 0.0);
	vec3 N = normalize(normal);
	vec3 LN = normalize(light_pos - position);
	float L = max(dot(N, LN), 0.0);
	vec3 color = gl_FrontMaterial.diffuse * L;
	gl_FragColor = vec4(color, 1.0);
}

#6 Вопросы и ответы » Текстурные координаты [РЕШЕНО] » 2020-01-10 20:05:06

BANEBYTE
Ответов: 0

Столкнулся с проблемой. Как правильно задать текстурные координаты, например, полигону. Насколько я знаю UV координаты задаются поочередно каждому вертексу. Здесь же координаты задаются всему мешу с помощью функции FreeformMeshSetTexCoord. Как правильно работать с этой функцией?
-------------------------------------------
Решил задавая функцией FreeformMeshAddTexCoord после каждого FreeformMeshAddVertex

#7 Re: Вопросы и ответы » Вылетает игра » 2020-01-10 19:35:22

Спасибо. Нормаль указал на (0,1,0). Заработало. Но освещение как-то криво работает, как это исправить? Полигон освещается только при приближении источника света к (0,0,0) позиции.

#8 Вопросы и ответы » Вылетает игра » 2020-01-09 17:49:22

BANEBYTE
Ответов: 2

Вылетает игра при вызове функции FreeformMeshFaceGroupAddTriangle. В чем ошибка?

f = FreeformCreateEmpty(render.matlib, render.matlib, global.scene);
mesh = FreeformAddMesh(f);
fg = FreeformMeshAddFaceGroup(f, mesh);
v1 = FreeformMeshAddVertex(f, mesh, 0, 10, 0);
v2 = FreeformMeshAddVertex(f, mesh, 0, 10, 100);
v3 = FreeformMeshAddVertex(f, mesh, 100, 10, 100);
FreeformMeshFaceGroupAddTriangle(f, mesh, fg, v1, v2, v3);

#9 Вопросы и ответы » Пропадает прозрачность » 2020-01-06 14:28:07

BANEBYTE
Ответов: 1

При применении ObjectSetMaterial на Freeform пропадает прозрачность на остальных объектах, которую я задавал функцией MaterialSetBlendingMode. В чем может быть ошибка?

#10 Re: Вопросы и ответы » Отключение сглаживания для материала » 2020-01-05 20:54:51

Спасибо большое! Теперь все работает! А что собственно она делает? (функция)

#11 Вопросы и ответы » Отключение сглаживания для материала » 2020-01-05 17:28:07

BANEBYTE
Ответов: 3

Как отключить сглаживание для материала? (Чтоб пиксели были видны квадратными, несглаженными). Или оно встроенно в Xtreme3d автоматически?

#13 Вопросы и ответы » Alpha канал для материала » 2020-01-05 15:07:39

BANEBYTE
Ответов: 1

Как сделать возможным в Xtreme3d заставить материал поддерживать прозрачность. Может быть шейдером? Но не шибко силен в GLSL. Нужна помощь

#14 Разработка движка » Предложение — дополнительные функции » 2020-01-04 10:30:02

BANEBYTE
Ответов: 1

Предлагаю добавить функции для работы с векторами (Dot/Cross product), а также вектора как объекты, чтоб проще было с ними работать. Как вам идея?

#15 Re: Вопросы и ответы » Billboard модель » 2020-01-03 20:31:57

Вобщем, методом нехитрых манипуляций мне удалось решить эту задачу!
Для куба код следующий:

v1x = ObjectGetPosition(camPos,0) - ObjectGetPosition(obj,0);
v1z = ObjectGetPosition(camPos,2) - ObjectGetPosition(obj,2);
angle = MathDotProduct(v1x, 0, v1z, 1, 0, 0);
if (ObjectGetPositionZ(obj) > ObjectGetPositionZ(camPos)) {
    angle = -angle;
} else {
    angle = angle;
}
ObjectSetRotation(obj, 0, angle, 0);

Для плоскости чуть другой:

v1x = ObjectGetPosition(camPos,0) - ObjectGetPosition(obj,0);
v1z = ObjectGetPosition(camPos,2) - ObjectGetPosition(obj,2);
angle = MathDotProduct(v1x, 0, v1z, 0, 0, 1);
if (ObjectGetPositionX(obj) < ObjectGetPositionX(camPos)) {
    angle = -angle;
} else {
    angle = angle;
}
ObjectSetRotation(obj, 0, angle, 0);

Пришлось добавлять скрипт MathDotProduct дабы рассчитать угол между векторами.

#16 Re: Вопросы и ответы » Billboard модель » 2020-01-03 19:53:32

Дело в том, что нужен поворот только по оси Y. Эта функция поворачивает по всем осям, насколько я понял

#17 Вопросы и ответы » Billboard модель » 2020-01-03 15:57:07

BANEBYTE
Ответов: 3

Всем привет, как заставить модель постоянно смотреть на камеру?
Использовал ObjectSetRotation(model, 0, ObjectGetTurn(camPos), 0), но ничего не выходит.
Спасибо за ответ!

Подвал доски

Под управлением FluxBB